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 时,总是发生 Invalid Use of Proper 错误。错误发生在 Me.aTbName = rs!Full_Name。你能帮我解决这个问题吗?对不起,我是这个论坛和 VB 的新手。我真的需要帮助

4

1 回答 1

0

为 TextBox 触发的默认属性是该Text属性。因此,如果有一个名称为 的 TextBox Text1,则此语句: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非常大,这可能会使您的程序无响应!

希望这会对你有所帮助。祝你好运 :)

于 2012-09-02T05:31:03.103 回答