2

这有点类似于主从情况,但有一些变化。

问题:我有两个独立的 MS Access 数据库文件 (.mdb),需要链接。

  • 第一个数据库有零件编号、零件详细信息、供应商等...
  • 第二个数据库将单独的零件编号作为表名,在这些表中是使用该零件的客户和产品编号。

我找不到合适的主从链接方法,主要是因为表格名称必须随着网格中单元格数据的更改/更新而即时更改。

因此,我想出了一种替代链接方法,如下所示。而且我不完全确定这是链接它们的好方法。

{DBGrid1 显示来自 ADOTable1 的值 } {DBGrid2 显示来自 ADOTable2 的值,其表名发生变化}

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var PartTableName: string;
begin
if DBGrid1.Fields[2].IsNull then exit
  else
   begin
     if ADOTable2.active then ADOTable2.Close;
     PartTableName:= DBGrid1.Fields[2].AsString;
     while pos('-',TableString) > 0 do
       PartTableName[pos('-',PartTableName)] := '_';
     ADOTable2.TableName:= PartTableName;  //obtained from cell click in DBGrid1
     ADOTable2.Open;
   end;
end;

DBGrid2 显示使用在 DBGrid1 中单击的任何部件号的客户和产品。

必须有更好的方法来做到这一点?这种链接方式对我来说似乎很粗糙。我也宁愿在 OnDataChange 方法中使用它,但似乎不起作用。

4

3 回答 3

3

您可以在 Access 中进行设置。这是一个比在 Delphi 中更强大的解决方案。

在您的 Access 版本中找到链接表管理器,它允许您将表从另一个数据库链接到您拥有的数据库中。然后,您可以使用 delphi 访问单个 mdb 并获取所有表。

于 2012-04-09T07:23:16.087 回答
2

TxQuery是您的另一个选择。

引用:

TxQuery组件是一个 TDataSet 后代组件,可用于使用SQL 语句查询一个或多个 TDataSet 后代组件。

于 2012-04-09T07:41:00.140 回答
0

我建议您不要重新查询,而是考虑使用 ADO 组件来过滤表的内容。这将大致相当于主从安排,并且具有仅执行“内存中”操作的优点,并且每次“主”行更改时都不会访问数据库。(在每个主行更改时,只需更改子表上的过滤条件)

于 2012-04-09T23:59:18.267 回答