繁体   English   中英

使用 Excel 用户表单搜索 Access 数据库并使用 VBA 在列表框中显示结果

[英]Search Access database with an Excel Userform and display results in Listbox using VBA

我在 Excel 中有一个用户表单,我打算用作搜索表单,并有一个列表框来显示结果。

该表单将从我的 Access 数据库中的表中搜索帐号。
除了搜索字段 (TextBox),它还有一个搜索按钮 (CommandButton) 和一个列表框。

我的目标:

  1. 从 Excel 连接到我的 Access 数据库
  2. 验证搜索字段。
    如果该字段为空,则显示消息以输入帐号。
    如果该条目不在表中找到的条目中,则返回帐号不存在的消息。
    如果帐号在表格中,则在列表框中显示结果。

我正在尝试创建一个 Excel 工作表来放置我的查询结果。

  1. AcctNo 是 Access 中我的 MemberAccts 表的标题之一。
  2. acctNoField 是我的搜索表单中搜索字段的名称。

错误是

“没有为一个或多个参数指定值”。

调试时, rst.Open qry, cnn, adOpenKeyset, adLockOptimistic高亮显示。

我是哪个参数?

Private Sub acctSearchBtn_Click()
    
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("AcctInfo")
    sh.Cells.ClearContents
    
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
        
    Dim qry As String, 
    Dim AcctNo As String
     
    If Me.acctNoField.Value = "" Then
        MsgBox "Please enter an Account Number", vbCritical
        Exit Sub
        
    ElseIf Me.acctNoField.Value <> qry Then
            
        cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\MasterDb.accdb"
        qry = "SELECT * FROM MembrAccts WHERE Me.acctNoField.Value= '" & AcctNo & "'"

        rst.Open qry, cnn, adOpenKeyset, adLockOptimistic
    
        MsgBox "The Account Number does not exists", vbCritical
        Exit Sub
        
    Else
        MsgBox "Place Retrieve_account function here", vbCritical
                                           
    End If
    
rst.Close
cnn.Close
    
End Sub

你有 Me.acctNoField.Value 和 AcctNo 在 qry 代码中彼此的位置。 不需要声明 AcctNo 变量。 将 acctNoField.Value 与 qry 变量进行比较是没有意义的。 缺少空记录集的测试。

考虑:

If Me.acctNoField.Value = "" Then
    MsgBox "Please enter an Account Number", vbCritical

Else

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\MasterDb.accdb"
    qry = "SELECT * FROM MembrAccts WHERE AcctNo = '" & Me.acctNoField.Value & "'"

    rst.Open qry, cnn, adOpenKeyset, adLockOptimistic

    If rst.EOF And rst.BOF Then
        MsgBox "The Account Number does not exist", vbCritical
    Else
        'code here to read data from recordset, perhaps use CopyFromRecordset
        sh.Range("A1").CopyFromRecordset rst
    End If

    rst.Close
    cnn.Close

End If

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM