mdb Utils (Access)[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 luckyjan 的 blog

    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;

本文关键:mdb Utils (Access)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top