2015-09-27 114 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

相關問題