Как установить значение ячейки Excel в качестве критерия для запроса доступа? - PullRequest
1 голос
/ 02 апреля 2019

Я создаю новый запрос в MS Access, который обновляет существующую запись на основе полей «Филиал» и «Сотрудник».Как я могу установить критерии для ссылки на значения ячеек?Скажем, A2 содержит идентификатор «Филиал» для доступа, а B2 содержит значение идентификатора «Сотрудник» в Access. Я хочу обновить поле «Заметки» в Access.Мой запрос работает при работе в Excel, но только потому, что я указал идентификаторы «Сотрудник» и «Филиал».Ничего не обновляется, когда я запускаю мой код ниже:

Код

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"));

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Вот мое решение из того, что я узнал от @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
1 голос
/ 02 апреля 2019

Ваши переменные волшебным образом не передаются в запрос только потому, что они имеют одинаковые имена.

Вам необходимо указать параметры в запросе Access и передать их через объект DAO.QueryDef вКод Excel VBA.

Вот пример: 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
...