2011-10-29 91 views
1

我正在使用我的項目庫存系統,我想使用2 DTPicker在我的listview1的mysql中的書籍表中顯示已過濾的日期,併爲其生成報告。我在我的查詢在classmodule idk中有一個錯誤,如果它只有查詢和即時通訊真的困惑我在vb 6.0的一個begginer ...請需要你的幫助球員。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 

MY CODE IN MY FORM:加入,同時

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

變化#由'

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;" 

變化循環驗證爲記錄集清空,一些如何

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 

不要忘記打開數據庫連接

更新感謝馬克Bertenshaw

RecordSetIsEmpty是使用了問題做MoveNext的時候..嗯,我記得

RecordsetIsClosed在某些情況下和數據庫管理人員,因爲使用返回不記錄集或記錄集不正確初始化

例如訪問是必要的使用movefist之前做movenext或讀取值

+0

雖然我標記了你關於SQL日期比較(這是代碼的主要問題),但我真的不明白你爲什麼需要RecordSetIsEmpty()函數。一旦檢查到記錄集不是Nothing,就可以非常高興地使用While Not rs.EOF(甚至更好,Do Until rs.EOF)作爲循環條件。每條記錄的檢查都是不必要的,而且效率低下。 –

+0

已更新。 rs.eof有時失敗抱歉沒有例子現在我與.net工作,但我等待服務給某人 –

相關問題