过时的引用会导致查询数据时出错吗?

时间:2019-02-27 18:57:02

标签: vba ms-access

在某些情况下,将数据更新到MS Access中的表时出错。

在工作中的服务器文件上,有一个MDB格式的锁定数据库文件,除非创建在其属性路径中添加security.mdw的快捷方式,否则根本无法访问该文件。在该数据库文件上保存着添加作业,更新作业以及从本地表和通过MySQL ODBC Ansi驱动程序存储的表中删除作业的形式。这不是问题,因为每当我同时在Windows 10(在打开表单时不显示错误)和运行缓慢的Windows 7计算机上测试功能时,都会在表单上导致“此控件中没有对象”打开,它们可以正常运行。

但是目前我有一个问题,指出使用相同的锁定MDB文件时,当其他人更新了作业的状态时,更新作业数据的操作出现了问题,例如在网站上(显示mysql表数据),错误的数据显示了。在另存为.ACCDB(并且可编辑)的另一种形式函数中,我有以下参考文献:

1 / Visual Basic for Applications
2 / Microsoft Access 16.0对象库
3 / OLE自动化
4 / Microsoft ActiveX数据对象6.1库
5 / Microsoft DAO 3.6对象库
6 / Microsoft Windows公共控件2 6.0

在锁定的mdb文件中,引用是...

1 / Visual Basic for Applications
2 / Microsoft Access 16.0对象库
3 / OLE自动化
4 / Microsoft ActiveX数据对象2.1库
5 / Microsoft DAO 3.6对象库
6 / Microsoft Excel 16.0对象库
7 / Microsoft Word 16.0对象库
8 / Microsoft Forms 2.0对象库

由于mdb文件已锁定,因此即使打开该文件,它甚至都无法保存对引用列表所做的任何更改。因此,即使我添加了导致Windows 7系统上“此控件中没有对象”的可怕的MSCONCTL.OCX文件,但仍会导致该错误。

所以我的问题是标题所指出的。过时的引用有时会导致查询数据时出错吗?

1 个答案:

答案 0 :(得分:1)

由于同时具有DAO和ADO,因此您的代码应始终保持歧义,没有例外。不要依赖参考优先级为您做正确的事。

执行Dim rs As RecordsetDim rs As DAO.Recordset而不是Dim rs As ADODB.Recordset

此外,事实是MDB已锁定,并且您提到了security.mdw,这听起来像是在使用旧的工作组安全性。我将摆脱它(如今它没有安全性)并更新引用。此后,DAO和ADO均已更新。您应该使用最新的DAO(现在称为“ Microsoft Office Access数据库引擎库”)和ADO 6.1。