VB6错误中无效使用属性。如何解决这个问题?

时间:2012-09-01 18:11:53

标签: properties vb6

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的新手。我真的需要帮助

1 个答案:

答案 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中的记录数量非常大,这可能会使您的程序无响应!

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