try
if assigned(srctdf.fields[dsttdf.fields[i].name]) then
begin
if s<>'' then s := s +',';
s := s +dsttdf.fields[i].name;
end;
except
end;
end;
if s<>'' then
db.execute(format(sqlstr,[dsttdf.name,s,srctdf.name]),dbsqlpassthrough);
end;
procedure renamemdbtable(db:database;srctbname,dsttbname:string);
var tdf:tabledef;
begin
tdf := db.tabledefs[srctbname];
if assigned(tdf) then
begin
tdf.set_name(dsttbname);
db.tabledefs.refresh;
end;
end;
procedure altermdbtable(db:database;tbname:string;fldarray:tfieldrecarray;idxarray:tindexrecarray);
var
tdfold,tdfnew:tabledef;
fld:field;
idx : _index;
i ,j : integer;
bfound:boolean;
begin
tdfold := db.tabledefs[tbname];
if not assigned(tdfold) then exit;
tdfnew := createmdbtable(db,'temp2002xh',fldarray,idxarray);
copymdbtable(db,tdfold,tdfnew);
dropmdbtable(db,tbname);
renamemdbtable(db,'temp2002xh',tbname);
end;
function createmdbtable(db:database;tbname:string;fldarray:tfieldrecarray;idxarray:tindexrecarray):tabledef;
var
tb : tabledef;
fld : field;
idx : _index;
i ,j : integer;
begin
tb := db.createtabledef(tbname,0,'','');
for i:=0 to high(fldarray) do
begin
fld := tb.createfield(fldarray[i].fieldname,fldarray[i].fieldtype,fldarray[i].fieldsize);
fld.set_required(fldarray[i].required);
fld.set_defaultvalue(fldarray[i].defaultvalue);
tb.fields.append(fld);
end;
for i:=0 to high(idxarray) do
begin
idx := tb.createindex(idxarray[i].name);
idx.set_primary(idxarray[i].primary );
idx.set_unique(idxarray[i].unique);
idx.set_required(idxarray[i].required);
for j:=0 to high(idxarray[i].fields) do
begin
fld := idx.createfield(idxarray[i].fields[j].fieldname,idxarray[i].fields[j].fieldtype,idxarray[i].fields[j].fieldsize);
idx.fields.append(fld);
end;
tb.indexes.append(idx);
end;
db.tabledefs.append(tb);
result := tb;
end;
procedure compactmdbdatabasex(dbname:string);
var pwd:string;
tmpdb:string;
begin
pwd := getmdbpassword(dbname);
tmpdb := getwintempfile;
tmpdb := changefileext(tmpdb,'.mdb');
compactmdbdatabase(dbname,tmpdb,pwd,'',isaccess97(dbname));
if fileexists(tmpdb) then
begin
copyfile(pchar(tmpdb),pchar(dbname),false);
deletefile(tmpdb);
end;
end;
procedure createrelations(dbname,pwd:string;rs:trelationarray);
var db:database;
i,j : integer;
fld:field;
r:relation;
begin
db := opendatabase(dbname,pwd);
for i:= 0 to high(rs) do
begin
r := db.createrelation(rs[i].name,rs[i].table,rs[i].foreigntable,rs[i].attributes);
for j:= 0 to high(rs[i].fields) do
begin
fld := r.createfield(rs[i].fields[j].fieldname,rs[i].fields[j].fieldtype,rs[i].fields[j].fieldsize);
fld.set_foreignname(rs[i].fields[j].foreignname);
r.fields.append(fld);
end;
db.relations.append(r);
end;
end;
function opendatabase(dbname,pwd:string):database;
var db:database;
dbengine:_dbengine;
begin
if pwd <>'' then
pwd := ';pwd='+pwd;
if isaccess97(dbname) then
begin
dbengine := createcomobject(dao97.class_dbengine) as _dbengine;
db := dbengine.opendatabase(dbname,dbdrivernoprompt,false,pwd);
end else
begin
dbengine := createcomobject(dao2000.class_dbengine) as _dbengine;
db := dbengine.opendatabase(dbname,dbdrivernoprompt,false,pwd)
end;
result := db;