1

我有一个 Access db,它链接了几个表。现在我想在这些表上执行 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

来自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 之一。

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

4

1 回答 1

3

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

Access 无法识别查询是(打算是)传递查询,因为尚未将的.Connect属性设置为以“ODBC;”开头的字符串。QueryDef您需要在设置.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
于 2016-03-11T13:47:40.173 回答