从不同的.mdb文件访问表

时间:2010-02-01 15:32:22

标签: vb.net ms-access database-design

我需要在数据网格中显示已保存项目的网格(比较“订单”),其中项目保存在具有类似模式的Access 2000数据库中,如下所示:

ID     Name      Country_ID   Plant_Type
1      'Test'    1            1
2      'Second'  2            2

让我们调用文件“Projects.mdb”。然后在datagrid中显示为:

ID     Name      Country      Plant Type
1      'Test'    'Germany'    'Free Range'
2      'Second'  'France'     'Inclined Roof'

其中国家和“工厂类型”是从不同的.mdb文件中的不同表中获取的(也是Access 2000,称之为“Language.mdb”,尽管其中有很多不同的背景数据),具体取决于关于当前用户的语言偏好。遗憾的是,不能将这些.mdb合并到一个文件中。

为了能够显示我到目前为止已将表格从“Language.mdb”链接到“Projects.mdb”的数据网格,但是当项目安装在我创建的.msi文件的另一台计算机上时,这会搞砸(我们' d喜欢这个容易打包和安装),因为目标计算机上的链接路径上不存在“Language.mdb”(基本上是问题here)。 我可以提出以下解决方案:

  • 强制所有用户在同一路径上安装,以便链接起作用(不合需要)
  • 在查询中使用连接字符串,如here on MSDN所示(仍在尝试此操作,但我需要处理详细信息)
  • 制作一个安装后脚本,根据正确的路径重新链接表。

但我觉得我在这里做错了。如上所述,它不是合并.mdb文件的选项,但是对于更改数据库模式或其他任何建议(我对数据库不是很有经验)的其他建议将非常感激。

3 个答案:

答案 0 :(得分:1)

为了解决'不同的安装路径'问题,我使用代码(在每个数据库加载时)首先查找当前db文件夹中的任何后端数据库;如果找不到,它会要求用户找到丢失的.mdb文件。然后代码重新链接数据库。成功链接dbs后,数据库将保存路径并在后续加载时首先检查此路径。

答案 1 :(得分:0)

那么,基于您对解决方案的限制。我会选择选项2或3.根本没有一个优雅的解决方案。

然而,我倾向于你的第三个选项,作为“一次性”修复,以使文件链接,以便它们之间的路径是已知的,并且您不会动态地将路径信息添加到每个查询中。

注释

我只想提一下,但我相信你已经知道了,如果你正在做这样的事情,用Access做这件事感觉不对,更不用说此时为客户端访问2000了部署。我强烈建议另外真正评估解决方案,看看你是否可以合并到一个,或者可能转移到SQL Server Express或者你可以作为安装程序发送给用户的东西

答案 2 :(得分:0)

是否应该将项目拆分为允许每个用户计算机上的前端?如果是这样,您是否可以将路径存储在前端,只有在更改时才重新链接?在大多数情况下,重新链接表的代码非常简单。可以允许用户浏览该位置,并且可以相应地更新Connect属性。