3

我正在为我真的不喜欢的 ASP.NET CMS 重新设计一个应用程序。我在性能上做了一些改进,却发现这个 CMS 不仅使用 MS SQL,而且一些用户“简单地”使用 MS Access 数据库。

问题是我有一些内部连接的表,MS Access 版本位于两个不同的文件中。我不能简单地将表移动到另一个 mdb 文件。

我现在正试图找出一种跨多个访问数据库文件“内部连接”的好方法?

如果我已经获取了所有数据并以编程方式进行操作,那将是非常遗憾的!

谢谢

4

4 回答 4

11

您根本不需要链接表。有两种方法可以使用来自不同 MDB 的数据,无需链接表即可使用。第一种是在 SQL 的 FROM 子句中使用“IN 'c:\MyDBs\Access.mdb'”。您保存的查询之一是:

SELECT MyTable.*
FROM MyTable IN 'c:\MyDBs\Access.mdb'

另一个保存的查询是:

SELECT OtherTable.*
FROM OtherTable IN 'c:\MyDBs\Other.mdb'

然后,您可以保存这些查询,然后使用保存的查询连接这两个表。

或者,您可以通过在 FROM 子句中为每个表指定源 MDB 的路径来在单个 SQL 语句中管理它,如下所示:

SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable 
  INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID

但请记住一件事:

Jet 查询优化器不一定能够将这些表中的索引用于连接(是否将它们用于单个字段的标准是另一个问题),所以这可能非常慢(在我的测试中,它不是,但我没有使用大数据集进行测试)。但是这个性能问题也适用于链接表。

于 2008-09-22T23:33:18.940 回答
3

如果您有权访问 MDB,并且能够更改它们,您可能会考虑使用链接表。Access 提供了链接到外部数据(在其他 MDB、Excel 文件中,甚至在 SQL Server 或 Oracle 中)的能力,然后您可以针对这些链接执行联接。

我强烈鼓励对这种选项进行性能测试。如果将 Access 数据库的用户迁移到另一个系统(甚至是 SQL Express)是可行的,那也是可取的——上次我检查过,不再有 64 位的 ODBC JET 驱动程序,所以如果应用程序曾经托管在在 64 位环境下,这些用户将被淹没。

于 2008-09-22T21:04:10.623 回答
1

在一个访问数据库中,您可以创建指向另一个数据库的“链接表”。您应该(我认为)能够查询这些表,就好像它们都存在于同一个数据库中一样。

这确实意味着您必须更改其中一个数据库来创建虚拟表,但至少您实际上并没有移动数据,只是创建了一个指向它的指针

于 2008-09-22T21:05:23.587 回答
0

在 Access 中,您可以通过“链接表管理器”添加远程表。您可以将链接添加到一个 Access 文件或另一个,或者您可以创建一个引用两个文件中的表的新 Access 文件。完成此操作后,内部连接查询与在单个数据库中执行它们没有什么不同。

于 2008-09-22T21:07:03.660 回答