Так что я немного озадачен тем, как обращаться с внешней базой данных и текущей базой данных в коде VBA.Ниже приведена подпрограмма, целью которой является обновление текущей базы данных Access уникальными записями, найденными во внешней базе данных Access.
Внешние SourceDBPath
и SelectedTable
передаются, и я указываю внешнюю базу данных и таблицу с помощью строковой переменной SourceDBTable
.Затем в SQL я пытаюсь извлечь записи со значениями, которые не соответствуют их основному ответному полю, поэтому в исходную базу данных вставляются только уникальные записи между двумя БД.
(Например, где source =external:
NOT EXIST sourceDB.SelectedTable.Field1 = currentDB.SelectedTable.Field1 And sourceDB.SelectedTable.Field2 = currentDB.SelectedTable.Field2 And sourceDB.SelectedTable.Field3 = currentDB.SelectedTable.Field3,
и т. д.)
ТАК, мои вопросы:
1) Нужно ли указывать текущую базу данных в SQL (например, currentDB.table.field)или по умолчанию будет использоваться текущая база данных, если таблица или поле вызывается без префикса (просто таблица или поле, как в приведенном ниже коде)?
2) В конечном счете, я поступаю правильно?
Мой код:
Private Sub UpdateDatabaseTable(SourceDBPath As String, SelectedTable As String)
Dim SourceDBTable As String
On Error GoTo DBError
SourceDBTable = "[;DATABASE=" & SourceDBPath & "]." & SelectedTable
Call DoCmd.RunSQL("INSERT INTO " & SelectedTable & " " & _
"SELECT Field1, Field2, Field3 " & _
"FROM " & SourceDBTable & " " & _
"WHERE NOT EXISTS( SELECT * " & _
"FROM " & SourceDBTable & " " & _
"WHERE (Field1=" & SourceDBTable & ".Field1 And Field2=" & SourceDBTable & ".Field2 And Field3=" & SourceDBTable & ".Field3"));")
GoTo EndSub
DBError:
MsgBox "Database Error!" & vbCrLf & "Error #" & Str(Err.Number) & ": " & Err.Source & vbCrLf & Err.Description, vbExclamation, "Database Error"
EndSub:
End Sub
ПРИМЕЧАНИЕ. Я получил свой SQL путем экстраполяции и изменения кода, найденного в решении ЗДЕСЬ