Как выполнить SET IDENTITY_INSERT ON/OFF с помощью сквозного запроса из Access VBA?
У меня есть доступ к базе данных, которая имеет несколько связанных таблиц. Теперь я хотел бы выполнить SET IDENTITY_INSERT ON/OFF для этих таблиц. Я погуглил и нашел такие вещи
Private mDb As Database
Public Sub SetIdentityInsert(strTableName As String, strOnorOff As String)
Dim qdf As QueryDef
Dim strSQL As String
On Error GoTo Proc_Err
Set qdf = mDb.QueryDefs("qryIDENTITY_INSERT")
strSQL = "SET IDENTITY_INSERT " & strTableName & " " & strOnorOff
qdf.SQL = strSQL
qdf.Execute
Proc_Exit:
On Error Resume Next
Set qdf = Nothing
Exit Sub
Proc_Err:
Resume Proc_Exit
Resume
End Sub
Однако, если я сделаю это
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("Passthru")
Я жалуюсь, что переданная строка должна быть одной из: DELETE, INSERT, SELECT, PROCEDURE или UPDATE.
Я уверен, что это возможно как-то. Здесь автор вставляет пример кода, вызывающего Sub ExecutePassThru, но код для него отсутствует.
1 ответ
[Он] жалуется, что переданная строка должна быть одной из: DELETE, INSERT, SELECT, PROCEDURE или UPDATE.
Access не распознает, что запрос является (должен быть) транзитным запросом, потому что .Connect
собственность QueryDef
не была установлена строка, которая начинается с "ODBC;" Вам нужно установить .Connect
свойство, прежде чем установить .SQL
имущество.
Поскольку у вас уже есть связанные таблицы, определенные в базе данных, вы можете просто скопировать одну из их .Connect
свойства, как это:
Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = cdb.QueryDefs("Passthru")
qdf.Connect = cdb.TableDefs("YourExistingLinkedTableName").Connect
qdf.ReturnsRecords = False
qdf.SQL = "SET IDENTITY_INSERT " & TheRestOfYourSqlCommand