2015-09-27 113 views
0

我在Excel/VBA中编写了一个发票工具。调用的对象已从其客户端断开连接 - VBA- SQL查询

当我尝试运行下面的代码(在Excel中)时出现错误消息,我不知道为什么?

错误消息:调用的对象已与其客户端断开连接。

usfOKNAR01.txtfakt4.Value是一个组合框,我从中获取发票的ID。

----从Access数据库运行查询的VBA代码。

Public Sub faktury2() 
SQL = "" 
SQL = Array("SELECT * FROM [pokaz_Raty] WHERE ID = " & usfOKNAR01.txtfakt4.Value & ";", _ 
"SELECT DISTINCT(tbINCOME.[Faktura_ID]), tbRATY.[Faktura_ID] FROM tbRATY INNER JOIN tbINCOME ON tbRATY.[Faktura_ID] = tbINCOME.Identyfikator;") 
For i = 0 To 1 
Set rs = New ADODB.Recordset 
rs.Open SQL(i), db, adOpenStatic, adLockReadOnly 'here the error mesage jumps. 
GoTo dalej2 
Next i 
Exit Sub 
dalej2: 
Select Case i 
Case 0 
With usfOKNAR01.MultiPage1.Pages(9).lb4 
    .Clear 
    .ColumnCount = rs.Fields.Count 
    'NAGLOWKI 
    w = 0 
    For z = 0 To rs.Fields.Count - 1 
    .AddItem 
    .List(w, z) = rs.Fields(z).Name 
    Next z 
       w = 1 
         Do 
         .AddItem 
         For z = 0 To rs.Fields.Count - 1 
          If IsNull(rs.Fields(z)) = True Or rs.Fields(z).Value = 0 Then 
          .List(w, z) = "Brak danych!" 
          Else 
          .List(w, z) = rs.Fields(z).Value 
          End If 
       Next z 
       w = w + 1 
       rs.MoveNext 
       Loop Until rs.EOF 
    End With 
Case 1 
With usfOKNAR01.txtfakt4 
     .ColumnCount = rs.Fields.Count 
     .Clear 
     w = 0 
     rs.MoveFirst 
      Do 
       If IsNull(rs.Fields(0)) Then 
       .AddItem "" 
       Else 
       .AddItem 
       .List(w, 0) = rs.Fields(1).Value 
       .List(w, 1) = rs.Fields(0).Value 
       End If 
      rs.MoveNext 
      w = w + 1 
      Loop Until rs.EOF 
End With 
End Select 

在访问我有一个名为pokaz_Raty

SQL代码查询看起来是这样的:

​​

能somebothy看看蚂蚁帮助我与我的问题?

谢谢!

回答

1

由于您尚未为sql0分配值,因此出现错误。其实我无法弄清楚为什么你有For i = 0 To 1循环,为什么你有Array(Select ...)。

试试这个

Public Sub faktury2() 

Dim SQL as String 

SQL="SELECT tbRATY.Faktura_ID AS ID, tbKLIENT.KLIENT AS KLIENT, tbINCOME.Faktura_ID AS [NR-FAKT]," 
SQL=SQL & " tbINCOME.kwota_brutto AS [KWOTA BRUTTO], tbRATY.Kwota AS WPLACONO," 
SQL=SQL & " [tbINCOME].[kwota_brutto]-[tbRATY].[Narastajaco] AS [DO ZAPLATY], tbRATY.Data" 
SQL=SQL & " FROM tbKLIENT INNER JOIN (tbINCOME INNER JOIN" 
SQL=SQL & " (SELECT *, (SELECT Sum(KWOTA) FROM tbRATY t" 
SQL=SQL & " WHERE t.Faktura_ID=tbRATY.Faktura_ID " 
SQL=SQL & " AND t.Identyfikator<=tbRATY.Identyfikator)As Narastajaco FROM tbRATY) AS tbRATY" 
SQL=SQL & " ON tbINCOME.Identyfikator = tbRATY.Faktura_ID) ON tbKLIENT.Identyfikator = tbINCOME.klient" 
SQL=SQL & " ORDER BY tbRATY.Data" 

Set rs = New ADODB.Recordset 
rs.Open SQL, db, adOpenStatic, adLockReadOnly 

If rs.EOF AND rs.BOF = FALSE then 

    GoTo dalej2 

End if 
Exit Sub 
dalej2: 
Select Case i 
Case 0 
With usfOKNAR01.MultiPage1.Pages(9).lb4 
    .Clear 
    .ColumnCount = rs.Fields.Count 
    'NAGLOWKI 
    w = 0 
    For z = 0 To rs.Fields.Count - 1 
    .AddItem 
    .List(w, z) = rs.Fields(z).Name 
    Next z 
       w = 1 
         Do 
         .AddItem 
         For z = 0 To rs.Fields.Count - 1 
          If IsNull(rs.Fields(z)) = True Or rs.Fields(z).Value = 0 Then 
          .List(w, z) = "Brak danych!" 
          Else 
          .List(w, z) = rs.Fields(z).Value 
          End If 
       Next z 
       w = w + 1 
       rs.MoveNext 
       Loop Until rs.EOF 
    End With 
Case 1 
With usfOKNAR01.txtfakt4 
     .ColumnCount = rs.Fields.Count 
     .Clear 
     w = 0 
     rs.MoveFirst 
      Do 
       If IsNull(rs.Fields(0)) Then 
       .AddItem "" 
       Else 
       .AddItem 
       .List(w, 0) = rs.Fields(1).Value 
       .List(w, 1) = rs.Fields(0).Value 
       End If 
      rs.MoveNext 
      w = w + 1 
      Loop Until rs.EOF 
End With 
End Select 

End Sub 

我没有测试过我们彻底检查的SQL。只是复制你所说的访问工作,并将其分成多行,以便于阅读。

+0

谢谢你这样做的工作! greate healp :) – MIREK

相关问题