我正在将Access 2010数据库从使用本机数据库中的DAO转换为使用ADO访问的SQL Server 2012。没有太多的代码更改,一切都完美无缺......除了一件事:
我有一些非常简单的临时表,我需要在使用前删除所有行。表上没有连接或约束 - 只有三列,所有这些列都是主键的一部分。
这是在MDB中工作的旧DAO代码:
DoCmd.SetWarnings False
DoCmd.RunSQL ("DELETE * FROM Print_Tickets_TEMP;")
DoCmd.SetWarnings True
这是在SQL Server中产生错误的新ADO代码:
CurrentProject.Connection.Execute "DELETE FROM Print_Tickets_TEMP;"
运行此ADO代码会产生错误:
无法从指定的表中删除(错误80004005)。
这显然是非常基本的东西,适用于SSMS和Access传递查询。所以,我认为必须有一些我不设置的许可,锁定或财产。请注意Connection.Execute
在整个应用程序中使用了INSERTS和UPDATES。
我在搜索与人们从联接表中删除的问题相关的答案时找到的唯一信息。正如我所说,这是一个简单的独立表。无论如何,我在我的智慧结束...如果有人对什么缺失有任何想法或者可以解释为什么我不能/不应该这样做,那将是非常有帮助的!
编辑:如果有帮助,此代码位于从Access表单调用的VBA模块中。
答案 0 :(得分:0)
如果存在导致此问题的特定存储过程,请尝试将这些行添加到proc的开头。
设置NO_BROWSETABLE OFF 设置NOCOUNT
如果要查询系统表,请使用仅向前游标(最安全,完全避免使用ADODB.Recordset)。
如果您使用的是SQL Server 7.0:如果您将ANSI_WARNINGS设置为OFF,请参阅KB#259775;如果您使用的是ROUND()函数,请确保您发送的参数不为空(参见KB#199105)
如果您使用的是SQL Server 2000,并且在视图上具有LEFT JOIN的表上使用SELECT DISTINCT,请升级到SQL Server 2000 Service Pack 2(请参阅知识库文章#308547)。
如果您正在使用MTS事务,请尝试使用SQL Server中的事务更改您的方法。
如果以上都不能解决您的问题,请参阅知识库#243899。
http://tutorials.aspfaq.com/8000xxxxx-errors/80004005-errors.html