【问题标题】:How can I set an Excel Cell Value as the criteria for Access Query?如何将 Excel 单元格值设置为 Access Query 的条件?
【发布时间】:2019-08-23 06:59:38
【问题描述】:

我正在 MS Access 中创建一个新查询,该查询根据“分支”和“员工”字段更新现有记录。如何设置标准以引用单元格值?假设A2 持有Access 的“Branch”ID,B2 持有Access 中“Employee”ID 的值。我想更新我的Access“Notes”字段。我的查询在 Excel 中运行时有效,但这只是因为我指定了“员工”和“分支机构”ID 是什么。当我在下面运行我的代码时没有任何更新:

代码

Sub modify_record()
Dim ac As Object
Dim branchid As String
Dim employeeid As String
Dim notesF As String
Set ac = CreateObject("Access.Application")

branchid = Sheets("Sheet4").Range("A2")
employeeid = Sheets("Sheet4").Range("B2")
notesF = Sheets("Sheet4").Range("C2")

Dim strDatabasePath As String
strDatabasePath = "C:\Users\johnsmith\OneDrive\pbsbackup.mdb"

With ac
.OpenCurrentDatabase (strDatabasePath)
Dim db As Object
Set db = .CurrentDb
db.Execute "Update_Records"
End With

End Sub

在 MS Access 中查询。保存为 Update_Records

 UPDATE pbsmaster SET pbsmaster.notes = "notesF" WHERE 
    (((pbsmaster.branch)="branchid") AND((pbsmaster.employee)="employeeid"));

【问题讨论】:

    标签: sql excel vba ms-access dao


    【解决方案1】:

    您的变量不会神奇地转移到查询中,只是因为它们具有相同的名称。

    您需要在 Access 查询中指定参数,并通过 Excel VBA 代码中的DAO.QueryDef 对象传递它们。

    这里是一个例子:https://stackoverflow.com/a/2317225/3820271

    Dim qd As Object ' DAO.QueryDef
    Set qd = db.QueryDefs("Update_Records")
    qd.Parameters("branchid") = branchid
    ' etc.
    qd.Execute
    

    【讨论】:

    • 谢谢你的回复,我去看看参数。还在学习SQL。一旦我得到你的建议,我会接受。
    【解决方案2】:

    这是我从@Andre 那里学到的解决方案。我能够执行我的代码,我注意到使用参数比使用 DAO 打开记录集要快得多。

    Sub foo()
    Dim db As Database
    Dim qdf As QueryDef
    
    Set db = OpenDatabase("C:\Users\employee\OneDrive\samplefile.mdb")
    
    Set qdf = db.CreateQueryDef("", _
              "PARAMETERS pbsbranch text , pbsnotes text; " & _
              "UPDATE pbsmaster SET pbsmaster.notes=[pbsnotes] " & _
              "WHERE pbsmaster.branch=[pbsbranch]  " & _
              "")
    qdf!pbsbranch = Sheets("Sheet4").Range("A2")
    qdf!pbsnotes = Sheets("Sheet4").Range("C2")
    
    qdf.Execute dbFailOnError
    Set qdf = Nothing
    Set cdb = Nothing
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 2018-08-12
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多