end;
end;
procedure clearlinktables(dbname,pwd:string);
var engine : _dbengine;
dbs:database;
i:integer;
tdtest,tdfloop:tabledef;
strtb,strconnect :string;
tdflinked:tabledef;
begin
engine := createcomobject(class_dbengine) as _dbengine;
dbs := engine.opendatabase(dbname,dbdrivernoprompt,false,';name=dbs;pwd='+pwd);
for i := dbs.tabledefs.count-1 downto 0 do
begin
tdfloop := dbs.tabledefs.item[i];
if ((tdfloop.attributes and dbattachedtable) <> 0) or
((tdfloop.attributes and dbattachexclusive) <> 0) or
((tdfloop.attributes and dbattachsavepwd) <> 0) then
dbs.tabledefs.delete(tdfloop.name)
end;
end;
//link tables between databases
procedure connectx(srcname, srcpwd, dstname, dstpwd,suffix: string);
var engine : _dbengine;
dbssrc, dbsdst:database;
i,j:integer;
tdtest,tdfloop:tabledef;
strtb,strconnect :string;
tdflinked:tabledef;
begin
engine := createcomobject(class_dbengine) as _dbengine;
dbssrc := engine.opendatabase(srcname,dbdrivernoprompt,false,';name=dbsrc;pwd='+srcpwd);
dbsdst := engine.opendatabase(dstname,dbdrivernoprompt,false,';name=dbdst;pwd='+dstpwd);
for i := dbsdst.tabledefs.count-1 downto 0 do
begin
tdfloop := dbsdst.tabledefs.item[i];
if ((tdfloop.attributes and dbattachedtable) <> 0) or
((tdfloop.attributes and dbattachexclusive) <> 0) or
((tdfloop.attributes and dbattachsavepwd) <> 0) then
dbsdst.tabledefs.delete(tdfloop.name)
end;
for i:=0 to dbssrc.tabledefs.count-1 do
begin
tdfloop := dbssrc.tabledefs[i];
if (tdfloop.attributes and dbsystemobject) = 0 then
begin
strtb := tdfloop.name;
for j:=0 to dbsdst.tabledefs.count-1 do
begin
tdtest := dbsdst.tabledefs.item[j];
if tdtest.name = strtb then
begin
if not (
((tdtest.attributes and dbattachedtable) <> 0) or
((tdtest.attributes and dbattachexclusive) <> 0) or
((tdtest.attributes and dbattachsavepwd) <> 0)) then
strtb := strtb + suffix
else
begin
dbsdst.tabledefs.delete( strtb);
end;
end;
end;
strconnect := ';database='+ srcname + ';pwd=' + srcpwd;
tdflinked := dbsdst.createtabledef(strtb,0,tdfloop.name, strconnect);
dbsdst.tabledefs.append(tdflinked);
end;
end;
end;
end.