VB 6.0 может кто-нибудь помочь мне с моим кодом? - PullRequest
1 голос
/ 29 октября 2011

Я работаю с моей системой инвентаризации проектов. Я хочу отобразить отфильтрованные даты в моей таблице книг в mysql в моем listview1, используя 2 DTPicker, и составить для него отчет.У меня возникла ошибка в моем запросе в classmodule idk, если это всего лишь запрос, и я действительно запутался, я начинающий в vb 6.0 ... Пожалуйста, вам нужна ваша помощь, ребята.

Я использую 2 таблицы, а именно книги и поставщика.

МОЙ КОД В МОДУЛЕ КЛАССА:

Sub DisplayList(ListView1 As ListView, DateFrom As Date, DateTo As Date)
Dim lstItem As ListItem, a As Integer
Dim rs As New ADODB.Recordset
Dim sql As String
If rs.State = adStateOpen Then rs.Close

sql = " SELECT supplier.category,books.title,books.dataAcquired,books.amount,books.quantity,books.accesionno,books.conditions" & _
      " From supplier INNER JOIN books" & _
      " ON supplier.code=books.code" & _
      " WHERE (((books.dataAcquired)>=#" & DateFrom & "#) and ((books.dataAcquired) <=#" & DateTo & "#))" & _
      " GROUP BY supplier.category,books.title,books.dataAcquired,books.amount,books.quantity,books.accesionno,books.conditions" & _
      " ORDER BY books.dataAcquired DESC;"
   rs.Open sql, cnn

   ListView1.ListItems.Clear
   Do While Not rs.EOF
    a = a + 1
        Set lstItem = ListView1.ListItems.Add(, , a, 1, 1)
            lstItem.SubItems(1) = rs(0).Value
            lstItem.SubItems(2) = rs(1).Value
            lstItem.SubItems(3) = rs(2).Value
            lstItem.SubItems(4) = rs(3).Value
            lstItem.SubItems(5) = rs(4).Value
            lstItem.SubItems(6) = rs(5).Value
            lstItem.SubItems(7) = rs(6).Value
            rs.MoveNext
            Loop

End Sub

МОЙ КОД В МОЕЙ ФОРМЕ:

Private Sub Show_Click()
clsData.DisplayList ListView1, DTPicker1.Value, DTPicker2.Value
lblCount.Caption = ListView1.ListItems.Count
End Sub

Private Sub Form_Load()
DTPicker1.Value = Date
DTPicker2.Value = Date
End Sub

Private Sub Form_Activate()
clsData.DisplayList ListView1, DTPicker1.Value, DTPicker2.Value
lblCount.Caption = ListView1.ListItems.Count
End Sub

1 Ответ

1 голос
/ 29 октября 2011

Изменить # на '

format date how yyyy-MM-dd or yyyyMMdd

sql = " SELECT supplier.category,books.title,books.dataAcquired,books.amount,books.quantity,books.accesionno,books.conditions" & _
  " From supplier INNER JOIN books" & _
  " ON supplier.code=books.code" & _
  " WHERE (((books.dataAcquired)>='" & format(DateFrom,"yyyy-MM-dd") & "') and ((books.dataAcquired) <='" & format(DateTo,"yyyy-MM-dd") & "'))" & _
  " GROUP BY supplier.category,books.title,books.dataAcquired,books.amount,books.quantity,books.accesionno,books.conditions" & _
  " ORDER BY books.dataAcquired DESC;"

изменить цикл при добавлении проверок для набора записей emptys, некоторые как

 if RecordsetIsClosed(rs) then exit sub

 While Not RecordSetIsEmpty(rs)
      a = a + 1
      Set lstItem = ListView1.ListItems.Add(, , a, 1, 1)
      lstItem.SubItems(1) = rs(0).Value
      lstItem.SubItems(2) = rs(1).Value
      lstItem.SubItems(3) = rs(2).Value
      lstItem.SubItems(4) = rs(3).Value
      lstItem.SubItems(5) = rs(4).Value
      lstItem.SubItems(6) = rs(5).Value
      lstItem.SubItems(7) = rs(6).Value
      rs.MoveNext
 wend

Public Function RecordSetIsEmpty(ByRef rs As ADODB.Recordset) As Boolean    
'   On Local Error GoTo RecordSetIsEmpty_Error    
'       RecordSetIsEmpty = True    
'       If rs Is Nothing Then
'           RecordSetIsEmpty = True
'           Exit Function
'       End If    
'       If RecordsetIsClosed(rs) = True Then
'           RecordSetIsEmpty = True
'           Exit Function
'       End If    
    RecordSetIsEmpty = (rs.BOF = True And rs.EOF = True)
'   RecordSetIsEmpty_Done:
'       Exit Function
'   RecordSetIsEmpty_Error:
'       Resume RecordSetIsEmpty_Done    
End Function


Public Function RecordsetIsClosed(ByRef rs As ADODB.Recordset) As Boolean    
On Local Error GoTo RecordsetIsClosed_Error
    RecordsetIsClosed = True    
    If rs Is Nothing Then
        RecordsetIsClosed = True
    End If        
    If rs.State <> adStateClosed Then
        RecordsetIsClosed = False
    End If
RecordsetIsClosed_Done:
    Exit Function
RecordsetIsClosed_Error:
    Resume RecordsetIsClosed_Done
End Function

Не забудьте открыть соединение с базой данных

обновлено спасибо Mark Bertenshaw

RecordSetIsEmpty - это использование для проблем, когда делаю movenext .. ну, я помню

RecordsetIsClosed - это использование, поскольку в некоторых случаях менеджеры баз данных возвращают не набор записей, либо набор записей неправильно инициализирован

например, необходим доступ, используйте movefist, прежде чем делать movenext или читать значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...