我正在尝试保留SQL Server Express表和生产Access版本之间同步的活动表的副本。在其他表中,我能够擦除SQL Server表的内容,并重新插入整个混乱以捕获所有更改。但是,当我尝试使用此表时 - 我获取信息 - 但自动编号字段从上一次迭代中的最后一个未使用的数字开始递增。经过十几次“同步”操作后,我很危险地接近这个字段的自动编号。
我尝试从Microsoft Access前端应用程序发出'DBCC CHECKIDENT',它会抛出一个错误,即该语句没有以SELECT,DELETE,PROCEDURE,DROP,ALTER或类似的方式启动。从SQL Server管理控制台(我在当前测试环境中可以访问的工具,但在应用程序投入生产时不会访问)时,此命令可以正常工作。
然后,我使用DoCmd.RunSQL命令尝试了“TRUNCATE TABLE”查询,并且它抛出了链接表(大约)上不支持该操作的错误。此表链接到Microsoft Access前端(后端表位于SQL Server Express上)。
所以,快速总结一下:
- 编辑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)
答案 0 :(得分:1)
在SQL Server端,您可以
使用其他DBCC命令
DBCC CHECKIDENT ('MyTable', RESEED, 1)
或使用TRUNCATE TABLE ...
如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果未定义种子,则使用默认值1。
所以你要跑
TRUNCATE TABLE MyTable
答案 1 :(得分:0)
我查看了所有代码,并与当地的VBA专家核实过,他指出我在尝试进行传递查询时在表的命名方面出错了。我基本上是用它所拥有的名称作为前端的链接来引用该表,而不是它在后端的SQL Server中拥有的实际表名。
以下连接字符串一旦更正,就可以工作:
strConnect = "ODBC;DRIVER={SQL Server};SERVER=ENV980-067\ENVIRON_TEST;DATABASE=instkeeper_test;TRUSTED_CONNECTION=YES;"
然后,这允许我在远程表上执行TRUNCATE TABLE命令,并执行DoCmd.RunSQL语句以从生产源重新填充表。
最终结果是,当选择该选项来更新Activity时,它将清除远程表的内容,然后将生产表的内容读入测试表,以便在重置自动编号时使用。
答案 2 :(得分:0)
我发现了一种简单的方法,可以在SQL View中编写一个用Access编写的SQL查询!
写下这个:
ALTER TABLE YourTable ALTER COLUMN YourField COUNTER(1,1)