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的新手。我真的需要帮助
答案 0 :(得分:0)
为TextBox触发的默认属性是Text
属性。因此,如果有一个名为Text1
的TextBox,则此语句:Text1 = "Hello"
将等同于Text1.Text = "Hello"
。但是我总是喜欢在访问它时使用属性名称和控件名称(即Text1.Text = "Hello"
)。
无论如何,请使用以下行测试:Me.aTbArrtime.text = rs!Full_Name
我想到的另一件事是,如果你已经使用了一些其他组件,说一个自定义的TextBox控件(而不是默认的),并且在加载失败的情况下,VB将替换控件(自定义)在表单中使用PictureBox制作文本框。要检查它,请单击表单中的TextBox并查看其属性。并查看控件类型是否为TextBox。如果是PictureBox,请仔细检查项目中是否存在自定义文本框的OCX或DLL。
关于SQL代码的一个小建议是,您可以在查询本身中包含比较,而不是循环遍历所有记录。例如:
.Source = "select * from Participants WHERE Bar_Code_No = " & Val(Me.aTbBar.Text) & " LIMIT 1"
如果匹配Bar_Code_No
,则会返回单个记录。执行此查询后,您只需检查它是否返回任何记录。如果是,则找到匹配。否则,找不到匹配项。通过这种方式,您可以避免循环,如果表Participants
中的记录数量非常大,这可能会使您的程序无响应!
希望这会对你有所帮助。祝你好运:)