您的位置:首页 > 编程语言 > Delphi

delphi 中操作access数据库的几个函数。

2006-04-06 10:50 405 查看
unit U_AccessFun;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  ADODB, DB, ComObj, ActiveX;

const
  con_LocalDBFile  = 'ptdb.mdb';
  con_LocalDBPSW   = 'Lmi';
  con_ConnectionString =
      'Provider=Microsoft.Jet.OLEDB.4.0;'+
      'Data Source=%s;'+
      'Jet OLEDB:Database Password=%s;';

  //取得临时文件名
  function GetTempPathFileName():string;

  //建立Access文件,如果文件存在则失败
  function Create_Access_File(FileName:String; PassWord:string = ''):Boolean;

  //压缩与修复数据库,覆盖源文件
  function CompactDataBase(AFileName, APassWord:string): Boolean;

  //执行SQL语句
  function EXEC_SQL(Query: TADOQuery; sSQLText: string): Boolean;

  function OPEN_SQL(Query: TADOQuery; sSQLText: string): Boolean;

  //是否存在表
  function ExistsUserTable(Query: TADOQuery; sTableName: string): Boolean;

  //删除表
  function DropTable(Query: TADOQuery; sTableName: string): Boolean;

  //重命名表: 将 sOldName 改为 sNewName
  function RenameTable(Query: TADOQuery; sOldName, sNewName: string): Boolean;

  //是否存在视图
  function ExistsUserView(Query: TADOQuery; sViewName: string): Boolean;

  //删除视图
  function DropView(Query: TADOQuery; sViewName: string): Boolean;

  //创建远程SQL数据库的视图
  function CreateView(Query: TADOQuery;
                      sLocalViewName  : string;//本地视图名
                      sServerTableName: string;//远程表名
                      sDataSource     : string;//远程数据源地址
                      sDataBase       : string;//远程数据库名
                      sUserName       : string;//远程数据库登录名
                      sPassWord       : string //远程数据库登录密码
                      ): Boolean;

  //导入某表的所有数据到一张[新表]
  function ExportAllDataToANewTable(Query: TADOQuery; sSourceTable, sNewTable: string): Boolean;

  //将一张表的数据[插入]到另一张表中。注意:2张表的结构必须相同,并且无自追加字段。
  function InsertDataIntoOtherTable(Query: TADOQuery; sSourceTable, sDestTable: string): Boolean;

  //如果表:sTable 中存在数据,则执行sSQLText 语句
  function ifExistDataThenExecSQL(Query: TADOQuery; sTable: string; sSQLText: string): Boolean;
 
implementation

function GetTempPathFileName():string;
var
  SPath,SFile:array [0..254] of char;
begin
  GetTempPath(254,SPath);
  GetTempFileName(SPath,'~SM',0,SFile);
  result:=SFile;
  DeleteFile(PChar(result));
end;

function Create_Access_File(FileName:String; PassWord:string = ''):Boolean;
var
  sTempFileName:string;
  vCatalog:OleVariant;
begin
  sTempFileName:= GetTempPathFileName;
  try
    vCatalog:= CreateOleObject('ADOX.Catalog');
    vCatalog.Create(Format(con_ConnectionString,[sTempFileName, PassWord]));
    Result:=CopyFile(PChar(sTempFileName),PChar(FileName),True);
    DeleteFile(sTempFileName);
  except
    result:=false;
  end;
end;

function CompactDataBase(AFileName, APassWord:string): Boolean;
var
  sTempFileName:string;
  vJE:OleVariant;
begin
  sTempFileName:=GetTempPathFileName;
  try
    vJE:=CreateOleObject('JRO.JetEngine');
    vJE.CompactDatabase(Format(con_ConnectionString,[AFileName,     APassWord]),
                        Format(con_ConnectionString,[sTempFileName, APassWord]));
    Result:=CopyFile(PChar(sTempFileName), PChar(AFileName), False);
    DeleteFile(sTempFileName);
  except
    Result:=false;
  end;
end;

////////////////////////

function Exec_SQL(Query: TADOQuery; sSQLText: string): Boolean;
begin
  Result:= False;
  if not Assigned(Query) then Exit;
  with Query do
  begin
    if Active then Close;
    SQL.Clear;
    SQL.Add(sSQLText);
    try ExecSQL;
    except Exit;
    end;
  end;
  Result:= True;
end;

function OPEN_SQL(Query: TADOQuery; sSQLText: string): Boolean;
begin
  Result:= False;
  if not Assigned(Query) then Exit;
  with Query do
  begin
    if Active then Close;
    SQL.Clear;
    SQL.Add(sSQLText);
    try Open;
    except Exit;
    end;
  end;
  Result:= True;
end;

function ExistsUserTable(Query: TADOQuery; sTableName: string): Boolean;
var
  ac: TADOConnection;
  vCatalog:OleVariant;
  i: integer;
  sName: string;
begin
  Result:= False;
  ac:= Query.Connection;
  vCatalog:= CreateOleObject('ADOX.Catalog');
  vCatalog.ActiveConnection:= ac.ConnectionString;
  for i:= 0 to vCatalog.Tables.Count - 1 do
  begin
    sName:= vCatalog.Tables.Item[i].Name;
    //vCatalog.Tables.Item[i].Type
    if UpperCase(sName) = UpperCase(sTableName) then
    begin
      Result:= True;
      Break;
    end;
  end;
end;

function DropTable(Query: TADOQuery; sTableName: string): Boolean;
var sSQLText: string;
const con_DropTable = 'Drop Table %s';
begin
  if ExistsUserTable(Query, sTableName) then
  begin
    sSQLText:= Format(con_DropTable, [sTableName]);
    Result:= Exec_SQL(Query, sSQLText);
  end else
    Result:= True;
end;

function RenameTable(Query: TADOQuery; sOldName, sNewName: string): Boolean;
var
  ac: TADOConnection;
  vCatalog:OleVariant;
  i: integer;
  sName: string;
begin
  Result:= False;
  ac:= Query.Connection;
  vCatalog:= CreateOleObject('ADOX.Catalog');
  vCatalog.ActiveConnection:= ac.ConnectionString;
  for i:= 0 to vCatalog.Tables.Count - 1 do
  begin
    sName:= vCatalog.Tables.Item[i].Name;
    If UpperCase(sName) = UpperCase(sOldName) Then
    begin
      try
        vCatalog.Tables.Item[i].Name:= sNewName;
        Result:= True;
      except Exit;
      end;
      Break;
    end;
  end;
end;

function ExistsUserView(Query: TADOQuery; sViewName: string): Boolean;
begin
  Result:= ExistsUserTable(Query, sViewName);
end;

function DropView(Query: TADOQuery; sViewName: string): Boolean;
var sSQLText: string;
const con_DropView = 'Drop View %s';
begin
  if ExistsUserView(Query, sViewName) then
  begin
    sSQLText:= Format(con_DropView, [sViewName]);
    Result:= Exec_SQL(Query, sSQLText);
  end else
    Result:= True;
end;

function CreateView(Query: TADOQuery;
                    sLocalViewName  : string;//本地视图名
                    sServerTableName: string;//远程表名
                    sDataSource     : string;//远程数据源地址
                    sDataBase       : string;//远程数据库名
                    sUserName       : string;//远程数据库登录名
                    sPassWord       : string //远程数据库登录密码
                    ): Boolean;
var sSQLText: string;
begin
  sSQLText:= 'create view '+ sLocalViewName +
             ' as select * from '+ sServerTableName +
             ' in [ODBC][ODBC;'+
             'DRIVER=SQL Server;'+
             'SERVER='+ sDataSource +';'+
             'DATABASE='+ sDataBase +';'+
             'UID='+ sUserName +';'+
             'PWD='+ sPassWord +';]';
  Result:= Exec_SQL(Query, sSQLText);
end;

function ExportAllDataToANewTable(Query: TADOQuery; sSourceTable, sNewTable: string): Boolean;
const sSQL_SelectInto = 'SELECT * INTO %s FROM %s';
var sSQLText: string;
begin
  Result:= False;
  if not DropTable(Query, sNewTable) then Exit;
  sSQLText:= Format(sSQL_SelectInto, [sNewTable, sSourceTable]);
  Result:= Exec_SQL(Query, sSQLText);
end;

function InsertDataIntoOtherTable(Query: TADOQuery; sSourceTable, sDestTable: string): Boolean;
const sSQL_InsertSelect = 'INSERT INTO %s SELECT * FROM %s';
var sSQLText: string;
begin
  Result:= False;
  if not ExistsUserTable(Query, sDestTable) then Exit;
  sSQLText:= Format(sSQL_InsertSelect, [sDestTable, sSourceTable]);
  Result:= Exec_SQL(Query, sSQLText);
end;

function ifExistDataThenExecSQL(Query: TADOQuery; sTable: string; sSQLText: string): Boolean;
begin
  Result:= OPEN_SQL(Query, 'select * from ' + sTable);
  if Result then
  begin
    if Query.RecordCount > 0 then
      Result:= Exec_SQL(Query, sSQLText);
  end;
end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息