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中链接表的路径。

解决方案 »

  1.   

    请参阅:http://www.ceocio.net/article_view.asp?bigtypeid=5&smalltypeid=18&id=37一文(是VB的)
      

  2.   

    利用udl文件连接就可以了。只需在运行时指定一次,挺好用的。
      

  3.   

    如果你的应用。EXE和数据库保持相对稳定,就用相对路径不要用绝对路径。如果要动态连,修改的是ConnectoinString属性,动态付一下值就可以了。
      

  4.   

    你可以用相对路径啊,也可以在运行的时候重写ConnectoinString属性就好了
      

  5.   

    用以下代码可以实现:
    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.
      

  6.   

    如果你的应用。EXE和数据库保持相对稳定,就用相对路径不要用绝对路径。如果要动态连,修改的是ConnectoinString属性,动态付一下值就可以了。