如何使用Access VBA中的传递查询执行SET IDENTITY_INSERT ON / OFF?

时间:2016-03-11 11:33:02

标签: sql-server vba ms-access pass-through

我有一个Access数据库,它有几个链接的表。现在我想在这些表上执行SET IDENTITY_INSERT ON / OFF。我用Google搜索并找到了类似这样的内容

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

来自https://social.msdn.microsoft.com/Forums/sqlserver/en-US/063270f6-0bb6-4630-85f5-b5b3a72e5295/turning-identityinsert-on-from-ms-access?forum=sqldataaccess

但是,如果我这样做

Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("Passthru")

我抱怨传递的字符串必须是DELETE,INSERT,SELECT,PROCEDURE或UPDATE之一。

我很确定这有可能。 Here作者粘贴调用Sub ExecutePassThru的示例代码,但不存在代码。

1 个答案:

答案 0 :(得分:3)

  

[它]抱怨传递的字符串必须是DELETE,INSERT,SELECT,PROCEDURE或UPDATE之一。

Access无法识别该查询是(打算是)传递查询,因为.Connect的{​​{1}}属性尚未设置为以“ODBC”开头的字符串。 。您需要在设置QueryDef属性之前设置.Connect属性

由于您已经在数据库中定义了链接表,因此您只需复制其中一个.SQL属性,如下所示:

.Connect