Access数据库链接表的路径只能在Access数据库中通过
链接表管理器修改。能不能在Delphi中能过代码动态
改表链接表的路径。现在有一数据库 “Test.MDB” 在“D:\”根目录下,
“Test.MDB” 数据库中有两个“Test_1”和“Test_2”两个链接表,
“Test_1”的链接路径是“D:\Data\A.MDB”。
“Test_2”的链接路径是“D:\Data\B.MDB”。链接表的功能就是当我打开“Test.MDB” 数据库中的“Test_1”和“Test_2”的表时,
系统就显示“D:\Data\A.MDB”和“D:\Data\B.MDB”文件中的内容。问题是链接表的路径只能在Access提供的链接表管理器修改,不能用Delphi通过代码实现。
如果我想安装程序安装数据库文件在
C:\Data\Test.MDB
C:\Data\A.MDB
C:\Data\B.MDB
下。因为Test.MDB中的链接表的路径是“D:\Data\A.MDB”和“D:\Data\B.MDB”。
此时我想Test.MDB中的链接表的路径是“C:\Data\A.MDB”和“C:\Data\B.MDB”。
也就是程序安装目录。
请问怎么用Delphi通过代码在第一次启动的时候改变Test.MDB中链接表的路径。
链接表管理器修改。能不能在Delphi中能过代码动态
改表链接表的路径。现在有一数据库 “Test.MDB” 在“D:\”根目录下,
“Test.MDB” 数据库中有两个“Test_1”和“Test_2”两个链接表,
“Test_1”的链接路径是“D:\Data\A.MDB”。
“Test_2”的链接路径是“D:\Data\B.MDB”。链接表的功能就是当我打开“Test.MDB” 数据库中的“Test_1”和“Test_2”的表时,
系统就显示“D:\Data\A.MDB”和“D:\Data\B.MDB”文件中的内容。问题是链接表的路径只能在Access提供的链接表管理器修改,不能用Delphi通过代码实现。
如果我想安装程序安装数据库文件在
C:\Data\Test.MDB
C:\Data\A.MDB
C:\Data\B.MDB
下。因为Test.MDB中的链接表的路径是“D:\Data\A.MDB”和“D:\Data\B.MDB”。
此时我想Test.MDB中的链接表的路径是“C:\Data\A.MDB”和“C:\Data\B.MDB”。
也就是程序安装目录。
请问怎么用Delphi通过代码在第一次启动的时候改变Test.MDB中链接表的路径。
var
Path,Path1,Path2:String;
l_cat, l_tbl: OleVariant;
i,TblCount:Integer;
begin
//Path为Test.MDB的路径
//Path1为A.MDB的路径
//Path2为A.MDB的路径 //打开含有链接表的数据库
l_cat:= CreateOleObject('ADOX.Catalog');
l_cat.ActiveConnection := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'\Test.mdb';
try
//遍历表,寻找链接表,同时删除
TblCount:=l_cat.Tables.Count;
for i := TblCount - 1 downto 0 do
begin
l_tbl:=l_cat.Tables[i];
if l_tbl.Type = 'LINK' Then
l_cat.Tables.Delete(i);
end;
//创建新的链接信息
l_tbl:= CreateOleObject('ADOX.Table'); //指出链接表的信息
l_tbl.Name := 'Test_1'; //链接后的表的名称
l_tbl.ParentCatalog := l_cat;
l_tbl.Properties('Jet OLEDB:Remote Table Name') := 'A';
l_tbl.Properties('Jet OLEDB:Link Datasource') := Path1+'\A.mdb';
l_tbl.Properties('Jet OLEDB:Create Link') := True; //添加连接表
l_cat.Tables.Append(l_tbl); l_tbl.Name := 'Test_2'; //链接后的表的名称
l_tbl.ParentCatalog := l_cat;
l_tbl.Properties('Jet OLEDB:Remote Table Name') := 'B';
l_tbl.Properties('Jet OLEDB:Link Datasource') := Path2+'\B.mdb';
l_tbl.Properties('Jet OLEDB:Create Link') := True; //添加连接表
l_cat.Tables.Append(l_tbl);
finally
l_Cat:=UnAssigned;
end;
end.