Delphi中使用程序建立Access的链接表 (0分)

  • 主题发起人 主题发起人 yzhshi
  • 开始时间 开始时间
Y

yzhshi

Unregistered / Unconfirmed
GUEST, unregistred user!
uses
comobj;

{以下程序,1.mdb为主数据库,2.mdb为需要进行链接的数据库,含有一个表Table2}
procedure TForm1.Button1Click(Sender: TObject);
var
l_cat, l_tbl: OleVariant;
begin
{打开链接的要连接到的数据库,即主数据库}
l_cat := CreateOleObject('ADOX.Catalog');
l_cat.ActiveConnection := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/1.MDB';

l_tbl := CreateOleObject('ADOX.Table');
l_tbl.Name := 'Linked_Table2';//链接后的表的名称

{指出链接表的信息}
l_tbl.ParentCatalog := l_cat;
l_tbl.Properties('Jet OLEDB:Remote Table Name') := 'Table2';
l_tbl.Properties('Jet OLEDB:Link Datasource') := 'C:/2.MDB';
l_tbl.Properties('Jet OLEDB:Create Link') := True;

{进行链接操作}
l_cat.Tables.Append(l_tbl);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
l_cat, l_tbl: OleVariant;
i: Integer;
begin
{打开含有链接表的数据库}
l_cat := CreateOleObject('ADOX.Catalog');
l_cat.ActiveConnection := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/1.MDB';

l_tbl := CreateOleObject('ADOX.Table');

{遍历表,寻找链接表,同时刷新}
for i := 0 to l_cat.Tables.Count - 1 do
if (l_tbl.Type = 'LINK') and (l_tbl.Name = 'Linked_Table2') Then
l_tbl.Properties('Jet OLEDB:Link Datasource') := 'C:/2.MDB';
end;
 
主要根据下面这个帖子进行的修改。

哪位兄台能帮我把这段VB代码(不长)转为delphi中能运行的代码?通过就给分,不甚感谢
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1034163

还有其他方法,这是其中一种,刚刚实验出来的,可以实现功能。
其他方法不断探索,随时更新。
 
procedure TForm1.Button2Click(Sender: TObject);是起什么作用呢?
我以前用过procedure TForm1.Button1Click(Sender: TObject);基本一样的过程,但是进行查询时却是找不到数据库。
我是在adoconnetion1的afterconnetion事件中加入的。
var
cat:olevariant;
tdb:olevariant;
begin
d.Connected:=true; //adoconnetion
cat:=createoleobject('adox.catalog');
cat.activeconnection:=d.ConnectionObject;
tdb:=createoleobject('adox.table');
tdb.name:='ware_zzz';
tdb.ParentCatalog:=cat;
tdb.Properties('Jet OLEDB:Exclusive Link'):=true;
tdb.Properties('jet oledb:link datasource'):='c:/x.mdb';
tdb.Properties('Jet OLEDB:Remote Table Name'):='ware';
tdb.Properties('Jet OLEDB:Create Link'):=True;
cat.Tables.Append(tdb);
 
确实存在这个问题,当程序退出后,再次进来就没有这个问题了,我再研究一下……
 
用BDE连起来就行了。先设置一下系统DSN 或者用户DSN,然后就可以看得到你的数据库了。
 
第二个函数是刷新链接表内容的。就是说可能存在链接表和原始表数据不一致的情况,使用这个命令进行刷新。
另外今天实验了一下,当建立链接表过几秒后再访问就不会出现问题,但是直接访问肯定出现问题,找了半天也没找到解决办法,应该是缓存的原因。
 
链接表有多个如何处理?如同一mdb内有多个表要链接到另一表中。也就是2.mdb中有多个表时。
 
执行多次Append吧。应该可以的。
 
想问一下各位,有没有办法在 Sql 语句里面添加键接表?
 
能够用Adox已经不错了。用SQL语句暂时没有听说过。
 
SQL中无此操作的吧?
yzhshi兄:我整理成的链接表文章在这周的电脑商情报上出来了,要不要把稿费分你?如何寄?
 
我的意思是能不能用Create 命令来创建一个链接表,上次好象有人说过!
 
to chenjiong,呵呵。我这个也是从一个VB代码翻译过来的。
拿出来共享最好。[:)]
 
我原先为解决这个问题也花了不少时间,
得到方法后也想公开让大家都知道一下,倒也不是为了那点稿费。
:)

有空再向你请教!
 
一起进步啦,呵呵。
 
yzhshi大虾,请问一下在ACCESS中如何建立链接到其它类型数据库的链接表
如Dbase、paradox、odbc等
找过资料,没找到指明目标表类型的参数。
 
To yzhshi:

能幫個忙嗎, 謝謝
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1471565
 
摸索了一会,基本找到Ado链接其他类型数据库的方法,以Text为例,写在下面,其他的可以举一反三
uses
comobj;

{以下程序,1.mdb为主数据库,2.mdb为需要进行链接的数据库,含有一个表Table2}
procedure TForm1.Button1Click(Sender: TObject);
var
l_cat, l_tbl: OleVariant;
begin
{打开链接的要连接到的数据库,即主数据库}
l_cat := CreateOleObject('ADOX.Catalog');
l_cat.ActiveConnection := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/1.MDB';

l_tbl := CreateOleObject('ADOX.Table');
l_tbl.Name := 'Linked_Table2'; //链接后的表的名称

{指出链接表的信息}
l_tbl.ParentCatalog := l_cat;
{注意这一下的字段,这里是连接Text的,也可以连接paradox,其他的就好办了,不过text的还没有完全弄清楚}
l_tbl.Properties('Jet OLEDB:Remote Table Name') := '1.txt';
l_tbl.Properties('Jet OLEDB:Link Provider String') := 'text; HDR=Yes; FMT=Delimited';
l_tbl.Properties('Jet OLEDB:Link Datasource') := 'C:/aa/';
l_tbl.Properties('Jet OLEDB:Create Link') := True;

{进行链接操作}
l_cat.Tables.Append(l_tbl);
end;
 
后退
顶部