Vba Microsoft Access 2010-更改数据库名称和扩展名后重新编译新的connectionString

Vba Microsoft Access 2010-更改数据库名称和扩展名后重新编译新的connectionString,vba,ms-access,Vba,Ms Access,我有一个旧的Access数据库(2000格式),我想将其转换为新的.accdb 2007格式。我只知道访问的基本知识,所以我知道这是一个挑战,我决定无论如何都要这样做 它有两个文件,一个似乎有所有的表“WOSS_tables.mdb”(duh),另一个(“WOSS.mdb”)有一堆表单和一个模块,当我转到数据库工具/visualbasic时,还有很多代码 我在Access 2010中打开了它们,并做了一个“保存并发布”、“保存ass.accdb”,一切都很顺利 因此,当我打开WOSS.mdb时,

我有一个旧的Access数据库(2000格式),我想将其转换为新的.accdb 2007格式。我只知道访问的基本知识,所以我知道这是一个挑战,我决定无论如何都要这样做

它有两个文件,一个似乎有所有的表“WOSS_tables.mdb”(duh),另一个(“WOSS.mdb”)有一堆表单和一个模块,当我转到数据库工具/visualbasic时,还有很多代码

我在Access 2010中打开了它们,并做了一个“保存并发布”、“保存ass.accdb”,一切都很顺利

因此,当我打开WOSS.mdb时,首先会弹出一个登录表单,但当我尝试登录时,它会显示:

所以我明白了,它没有找到新文件。 深入研究WOSS.mdb文件(现在是WOSS.accdb),我发现一个模块有一个名为ruta(西班牙语中的route)的连接字符串,因此我对其进行了更改,现在将其指向我的桌面:

Option Compare Database
Option Explicit

Public xdescripcion As String
'** Ruta para abrir la base de datos
'Public Const Ruta = "\\the_super_secret_old_route\"
Public Const Ruta = "C:\Users\AlexXPS\Desktop\Woss"
Public M
在一堆表格上找到,像这样的行:

Set dbs = DBEngine.Workspaces(0).OpenDatabase(Ruta + "WOSS_Tables.mdb", False, False, "")
Set dbs = OpenDatabase(Ruta + "WOSS_Tables.mdb", False, False, "")
也用“WOSS_Tables.accdb”更新了这些

现在,我点击Save,然后是Debug菜单,Compile,然后我关闭并重新打开,我仍然得到与上面相同的错误,就像它根本没有编译一样

如果我检查表单和模块代码,就像我更改了它一样,Ruta正确地指向我的桌面,其他更改也正确保存

那么,我做错了什么

PS:很抱歉发了这么长的帖子:(


编辑!!!!!!!

好吧,把代码弄乱了我发现了一些东西:

在登录屏幕上有一个ComboBox,它应该显示Users表中的所有用户名,ComboBox对其“Row Source”数据属性有一个简单的查询

SELECT DISTINCTROW [Usuarios].[Name], [Usuarios].[Name] FROM Usuarios ORDER BY [Usuarios].[Name]; 
这与我更改的“Ruta”变量无关

所以现在的问题是,我如何告诉ComboBox其源数据库的位置已更改?(它不再是“\the\u super\u secret\u old\u route\WOSS\u Tables.mdf”,而是“C:\Users\AlexXPS\Desktop\WOSS/WOSS\u Tables.accdb”)

显示之前的错误消息是因为组合框找不到数据库:),而不是其他代码(当然也需要更改)

我希望我能很好地解释自己,如果不是,这里有一个截图


再次查看您对Ruta常数所做的更改

'Public Const Ruta = "\\the_super_secret_old_route\"
Public Const Ruta = "C:\Users\AlexXPS\Desktop\Woss"
请注意,以前的版本以反斜杠结尾;新版本没有。因此,在您的
OpenDatabase()
语句中,您给出了数据库的完整路径,如下所示

"C:\Users\AlexXPS\Desktop\WossWOSS_Tables.mdb"
或者你的其他改变就是这样

"C:\Users\AlexXPS\Desktop\WossWOSS_Tables.accdb"
无论哪种方式,文件名前面似乎缺少一个反斜杠

编辑:更新的问题表明您将此作为组合框的行源:

SELECT DISTINCTROW [Usuarios].[Name], [Usuarios].[Name]
FROM Usuarios ORDER BY [Usuarios].[Name];
打开导航窗格,右键单击其标题,然后选择导航选项。。。在“显示隐藏对象”旁边的框中放置复选标记。然后验证是否存在名为Usuarios的链接表。您需要更新包含实际Usuarios源表的数据库的位置。为此,请选择功能区的“数据库工具”部分,然后选择“链接表管理器”以更新链接的位置

Edit2:您可以检查Usuarios链接的
.Connect
属性,以确定包含源表的db文件的位置

Public Function BackEndLocation() As String
    BackEndLocation = Split(CurrentDb.TableDefs("Usuarios").Connect, "=")(1)
End Function

这样,您就可以去掉Ruta常量,避免在代码调用的任何地方更新该常量和数据库文件的名称
OpenDatabase()
。只要使用链接表管理器在文件名或位置更改时更新链接,然后依靠
BackEndLocation()
函数告诉代码它的位置。

再次查看您对Ruta常量所做的更改

'Public Const Ruta = "\\the_super_secret_old_route\"
Public Const Ruta = "C:\Users\AlexXPS\Desktop\Woss"
请注意,以前的版本以反斜杠结尾;新版本没有。因此,在您的
OpenDatabase()
语句中,您给出了数据库的完整路径,如下所示

"C:\Users\AlexXPS\Desktop\WossWOSS_Tables.mdb"
或者你的其他改变就是这样

"C:\Users\AlexXPS\Desktop\WossWOSS_Tables.accdb"
无论哪种方式,文件名前面似乎缺少一个反斜杠

编辑:更新的问题表明您将此作为组合框的行源:

SELECT DISTINCTROW [Usuarios].[Name], [Usuarios].[Name]
FROM Usuarios ORDER BY [Usuarios].[Name];
打开导航窗格,右键单击其标题,然后选择导航选项。。。在“显示隐藏对象”旁边的框中放置复选标记。然后验证是否存在名为Usuarios的链接表。您需要更新包含实际Usuarios源表的数据库的位置。为此,请选择功能区的“数据库工具”部分,然后选择“链接表管理器”以更新链接的位置

Edit2:您可以检查Usuarios链接的
.Connect
属性,以确定包含源表的db文件的位置

Public Function BackEndLocation() As String
    BackEndLocation = Split(CurrentDb.TableDefs("Usuarios").Connect, "=")(1)
End Function

这样,您就可以去掉Ruta常量,避免在代码调用的任何地方更新该常量和数据库文件的名称
OpenDatabase()
。只要使用链接表管理器在文件名或位置更改时更新链接,然后依靠
BackEndLocation()
函数告诉代码它的位置。

在第一个数据库(WOSS.accdb)中是否有链接表?不,那里没有表。在WOSS_Tables.accdb文件中有一个Users表,其中包含所有用户/密码/其他信息您在第一个数据库(WOSS.accdb)中有链接表吗?没有,没有表。在WOSS_Tables.accdb文件中有一个Users表,其中包含了所有的用户/密码/其他信息。你说得对!这是错误的,改变了它。非常感谢。请看我的编辑上面!:)数据库中有一个Usuarios表,可能是本地表,但更可能是指向另一个数据库中的表的链接。可能您无法看到它,因为它被设置为隐藏。有关更新链接的指导,请参阅我答案的更新。非常好!更新每个链接