2015-09-27 2 views
0

Я написал инструмент счета в Excel/VBA.Вызываемый объект отключен от своих клиентов - VBA-SQL Query

Я получаю сообщение об ошибке при попытке запустить код (в Excel) ниже, и я не знаю почему?

Ошибка связи: вызванный объект отключился от своих клиентов.

usfOKNAR01.txtfakt4.Value - это поле со списком, из которого я беру идентификатор счета-фактуры.

---- Код VBA для запуска запроса из базы данных Access.

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 

В Access У меня есть запрос называется pokaz_Raty

SQL код выглядит следующим образом:

SELECT tbRATY.Faktura_ID AS ID, tbKLIENT.KLIENT AS KLIENT, tbINCOME.Faktura_ID AS [NR-FAKT], tbINCOME.kwota_brutto AS [KWOTA BRUTTO], tbRATY.Kwota AS WPŁACONO, [tbINCOME].[kwota_brutto]-[tbRATY].[Narastajaco] AS [DO ZAPŁATY], tbRATY.Data 
FROM tbKLIENT INNER JOIN (tbINCOME INNER JOIN (SELECT *, (SELECT Sum(KWOTA) FROM tbRATY t WHERE t.Faktura_ID=tbRATY.Faktura_ID AND t.Identyfikator<=tbRATY.Identyfikator)As Narastajaco FROM tbRATY) AS tbRATY ON tbINCOME.Identyfikator = tbRATY.Faktura_ID) ON tbKLIENT.Identyfikator = tbINCOME.klient 
ORDER BY tbRATY.Data; 

Может 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

Спасибо, что сделали эту работу! смайлик healp :) – MIREK

Смежные вопросы