2012-09-01 25 views
0
Private Sub aTbBar_Change() 
    Set con = New ADODB.Connection 
    With con 
     .CursorLocation = adUseClient 
     .ConnectionString = "Provider=Microsoft.jet.oledb.4.0;persist security info=false;data source=" & App.Path & "\Event_Participants.accde" 
     .Open 
    End With 


    Set rs = New ADODB.Recordset 
    With rs 
     Set .ActiveConnection = con 
     .CursorType = adOpenDynamic 
     .Source = "select * from Participants" 
     .Open 


     'check from table if user and pwd matches 
     If rs.RecordCount <> 0 Then 
      rs.MoveFirst 
      While Not rs.EOF 
       If rs!Bar_Code_No = Val(Me.aTbBar) Then 
        Me.aTbName = rs!Full_Name 
        Me.aTbSection = rs!Section 
        Me.aTbArrtime = Time() 
       End If 
       rs.MoveNext 
      Wend 
     End If 

     .Close 
     Set rs = Nothing 

    End With 

    'save to the database 
    'check from table if user and pwd matches 

    Set rs = New ADODB.Recordset 
    With rs 
     Set .ActiveConnection = con 
     .CursorType = adOpenDynamic 
     .LockType = adLockOptimistic 
     .Source = "select * from Participants" 
     .Open 


     If rs.RecordCount <> 0 Then 
      rs.MoveFirst 
      While Not rs.EOF 
       If rs!Bar_Code_No = Val(Me.aTbBar) Then 
        .Update 
        rs!Arr_Time = Me.aTbArrtime 
       End If 
       rs.MoveNext 
      Wend 
     End If 

    End With 

    rs.Close 
    Set rs = Nothing 

End Sub 

當我輸入該文本框的名稱時,總會出現錯誤的無效使用aTbBar 錯誤發生在Me.aTbName = rs!Full_Name。你能幫我解決這個問題嗎?對不起,在這個論壇和VB中新來的。我真的需要幫助VB6錯誤中屬性的無效使用。如何解決這個問題?

+1

你能至少標記源代碼行,哪裏出現錯誤? – arrowd

+2

歡迎來到StackOverflow。我在這裏看不到問題。您沒有描述過問題,標記了一段代碼就是問題,或者提出了任何問題。請編輯您的問題以提供一些信息,所以我們可以嘗試並幫助您解決您遇到的任何問題。 –

+0

錯誤發生在 Me.aTbName = rs!Full_Name –

回答

0

爲TextBox觸發的默認屬性是Text屬性。因此,如果有名稱爲Text1的文本框,則此語句:Text1 = "Hello"將等於Text1.Text = "Hello"。但是在訪問時我總是更喜歡使用屬性名稱和控件名稱(即Text1.Text = "Hello")。

總之,測試它通過使用此行:Me.aTbArrtime.text = rs!Full_Name

,我心目中是,如果你已經使用了一些其他成分,比如定製的TextBox控件(而不是默認的一個)的另一件事,並且在加載失敗的情況下,VB會用您的表單中的PictureBox替換控件(自定義文本框)。爲了檢查,點擊窗體中的TextBox並查看它的屬性。並查看控件類型是否爲TextBox。如果它是一個PictureBox,請仔細檢查您的OCX或DLL是否存在於自定義文本框中。

對你的SQL代碼的一個小建議是,你可以在你的查詢本身中包含比較,而不是循環遍歷所有記錄。例如:如果它Bar_Code_No匹配

.Source = "select * from Participants WHERE Bar_Code_No = " & Val(Me.aTbBar.Text) & " LIMIT 1" 

這將返回一個記錄。執行此查詢後,您只需檢查它是否返回任何記錄。如果是這樣,找到一個匹配。否則,找不到匹配項。通過這種方式,您可以避免循環,如果表Participants中的記錄數量非常大,可能會使您的程序無法響應!

希望這會幫助你。祝你好運:)

相關問題