在Delphi中:链接两个独立的MDB(访问数据库)文件,而不是表

时间:2012-04-09 05:16:08

标签: delphi ms-access

不确定这是否明智,所以在这里把问题抛到一边。 这有点非常类似于主细节情况,但有一些变化。

这有点令人困惑,但与我无关。

问题:我有两个独立的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方法中使用它,但似乎不起作用。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

TxQuery是另一种选择。

引用:

  

TxQuery 组件是可以使用的TDataSet后代组件   使用 SQL查询一个或多个TDataSet后代组件   语句

答案 2 :(得分:0)

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