我试图在 SQL Server Express 表和生产 Access 版本之间保持活动表的副本同步。在其他表中,我能够擦除 SQL Server 表的内容,并将整个混乱重新插入以捕获所有更改。但是,当我尝试使用此表执行此操作时 - 我得到了信息 - 但 Autonumber 字段从上一次迭代中最后一个未使用的数字递增。经过十几个“同步”操作后,我很危险地接近用完该字段的自动编号。
我尝试从 Microsoft Access 前端应用程序发出“DBCC CHECKIDENT”,这会引发一个错误,即该语句不是以 SELECT、DELETE、PROCEDURE、DROP、ALTER 或类似的东西开头的。此命令在从 SQL Server 管理控制台发出时有效(我在当前测试环境中可以访问的工具,但在应用程序投入生产时不会)。
然后,我使用 DoCmd.RunSQL 命令尝试了“TRUNCATE TABLE”查询,它抛出了链接表不支持该操作的错误(大约)。此表链接到 Microsoft Access 前端(后端表位于 SQL Server Express 上)。
因此,快速总结一下:
- 前端是 Microsoft Access VBA 应用程序
- 数据存储在远程计算机上的 SQL Server Express 上
- 数据表在前端应用程序中链接
- 当这个应用程序投入生产时,我将无法使用 SQL Server 管理控制台命令,它需要自己运行它的内务管理。
- DoCmd.RunSQL 和 CurrentDB.Execute 似乎不允许使用 TRUNCATE TABLE - 或 - 'DBCC CHECKIDENT' 命令。
- 当从 SQL Server 管理控制台发出时,上述两个功能 -DO- 都可以工作 - 请参阅上文,了解为什么这不是一个可行的选项。
- -所有- 其他表的行为方式与我期望的一样,除了这个之外,它们会根据需要重置它们的缩进字段。
-- 编辑于 08/08/2011 @ 15:08 --
好的 - 我在基于 VBA 的传递查询中尝试了多次尝试,所有这些都导致 ODBC -- 调用失败错误。这是我为处理传递而创建的模块的代码(借用了 dbforums.com 的代码):
Function RunPassThrough(ByVal ConnectionString As String, ByVal SQL As String, Optional ByVal QueryName As String)
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = dbs.CreateQueryDef
With qdf
.Name = QueryName
.Connect = ConnectionString
.SQL = SQL
.ReturnsRecords = (Len(QueryName) > 0)
If .ReturnsRecords = False Then
.Execute
Else
If Not IsNull(dbs.QueryDefs(QueryName).Name) Then dbs.QueryDefs.Delete QueryName
dbs.QueryDefs.Append qdf
End If
.Close
End With
Set qdf = Nothing
Set dbs = Nothing
End Function
因此,我需要指定一个到数据库的连接字符串;以下所有都失败了:
strConnect = "ODBC;DRIVER={SQL Server};SERVER=ENV980-067\ENVIRON_TEST;DATABASE=instkeeper_test;Uid=<my username>;Pwd=<my password>;"
结果:运行时错误 ODBC -- 调用失败(错误 #3146)
strConnect = "ODBC;DRIVER={SQL Server};SERVER=ENV980-067\ENVIRON_TEST;DATABASE=instkeeper_test;TRUSTED_CONNECTION=YES;"
结果:运行时错误 ODBC -- 调用失败(错误 #3146)
strConnect = "ODBC;DSN=instkeeper_beta;"
结果:询问我的数据源名称,一旦使用数据源管理面板指定,我得到运行时错误 ODBC -- 调用失败(错误 #3146)
strConnect = "ODBC;Server=ENV980-067\ENVIRON_TEST;Database=instkeeper_test;User ID=<my user name>;Password=<my password>;Trusted_Connection=False;"
结果:运行时错误 ODBC -- 调用失败(错误 #3146)
-- 编辑于 08/08/2011 @ 16:41 --
连接字符串迭代的更多失败,我正式不知道如何使这个野兽工作。在尝试了以前的方法之后 - 现在在请求 DSN 后,使用该接口进行的任何传递都会失败。无法修复,必须恢复它们才能调用链接表并通过 JET 运行。
strConnect = "ODBC;DATA SOURCE=instkeeper_test;"
结果:运行时错误 ODBC -- 调用失败(错误 #3146)
strConnect = "ODBC;DRIVER=SQL Server;SERVER=ENV980-067\ENVIRON_TEST;"
结果:运行时错误 ODBC -- 调用失败(错误 #3146)
strConnect = "ODBC;DRIVER=SQL Server;Server=ENV980-067\ENVIRON_TEST;Database=instkeeper_test;User ID=<my user name>;Password=<my password>;"
结果:运行时错误 ODBC -- 调用失败(错误 #3146)