【问题标题】:Most efficient way to find a record in Access linked to SQL Server database在 Access 中查找链接到 SQL Server 数据库的记录的最有效方法
【发布时间】:2017-11-28 15:16:11
【问题描述】:

我有一个链接到 SQL Server 数据库的多用户访问 UI,该数据库用于为抵押贷款公司执行贷款审查。用户当前正在使用 Access 中已经存在的“查找记录”功能,并且需要很长时间才能找到记录。虽然我确实理解为什么需要这么长时间以及理论上需要做什么,但我无法找出编写代码以直接执行所需记录的最佳方法。它需要是一个类似于现有查找记录功能的消息框,但它执行最有效的方式。我尝试了以下,其中不包含消息框,它不起作用:

  Private Sub txtFindLoan_AfterUpdate()

  Dim sSQL As String
  sSQL = "SELECT * FROM dbo_PreCloseAuditEnc WHERE LOAN_NUM = '" & 
  Me.txtFindLoan & "'"

  Me.RecordSource = sSQL
  Me.Requery
  End Sub 

提前致谢!

【问题讨论】:

  • 在访问 bobby 表之前,您需要阅读、理解并开始使用参数化查询。 bobby-tables.com 你不应该从用户那里接收输入,然后直接对任何数据库执行。
  • 此外,可能值得精确探索瓶颈所在。如果没有索引或服务器是树莓派等,查询调优只会让你到目前为止。
  • 您所拥有的应该可以正常工作。不清楚 LOAD_NUM 是文本列还是数字列。使用各种代码、存储过程等,这里并不会真正改变任何东西。在您的示例代码中是否假定 dbo_PreCloseAuditEnc 是标准链接表?如果有 500 或 5,000,000 行,那么如果 LOAD_NUM 上的索引存在于 sql server 上,那么您所拥有的应该可以立即工作。通过您的示例,访问只会将一条记录拉到网络管道中。除了您发布的内容之外,您不需要任何其他内容。

标签: sql-server ms-access vba


【解决方案1】:

没有瓶颈,只是您不需要重新查询。当然,请确保您在 LOAN_NUM 字段上有一个 索引

你可以有一个 InputBox 来获取贷款号码。可以通过按钮调用代码:

Private Sub LoanButton_Click()

    Dim sLoanNo As String
    Dim sSQL As String

    sLoanNo = InputBox("Loan Number:", "Select Loan Number")
    If sLoanNo <> "" Then
        ' Input provided.
        ' Validate input. 
        ' IsValidLoanNumber will be a function to do this. Must return True/False.
        If IsValidLoanNumber(sLoanNo) Then
            sSQL = "SELECT * FROM dbo_PreCloseAuditEnc WHERE LOAN_NUM = '" & sLoanNo & "'"    
            Me.RecordSource = sSQL
        End If
    End If

End Sub 

【讨论】:

    【解决方案2】:

    您可能最好使用ADODB,因为您只使用外部数据,并将表单直接绑定到过滤的ADODB 记录集。

    正如 Sean Lange 所说,您应该参数化您的查询,您可以使用 DAO 或 ADO 来做到这一点,但不能通过修改 Me.RecordSource 属性来实现

    Private Sub txtFindLoan_AfterUpdate()
        Dim sSQL As String
    'I'm assuming your table name in MS SQL is dbo.PreCloseAuditEnc
        sSQL = "SELECT * FROM dbo.PreCloseAuditEnc WHERE LOAN_NUM = ?"
        Dim adoConn As New ADODB.Connection
    'Enter a valid OLEDB connection string here:
        adoConn.Open "Provider=SQLNCLI11;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;"
        Dim cmd As New ADODB.Command
        cmd.ActiveConnection = adoConn
        cmd.CommandText = sSQL
        cmd.Parameters.Append cmd.CreateParameter(Type:=adChar, Value:=Me.txtFindLoan)
        Me.RecordSet = cmd.Execute
    End Sub 
    

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      相关资源
      最近更新 更多