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.
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.
相关文章推荐
- javaScript几个操作数组增减元素的函数
- 一个很有用的DELPHI字符操作函数
- C#操作Excel的几个函数
- Delphi 的内存操作函数(5): 复制内存
- [转]Delphi 几个读写注册表的函数
- Delphi之通过ADOX操作access数据库
- 字符串操作函数的几个基本函数
- 几个文件夹操作的函数
- DELPHI中操作ACCESS数据库
- delphi用于时间操作的函数 (1)
- Delphi 的内存操作函数(2): 给数组指针分配内存
- 自己写的几个ARM汇编内存操作函数
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- delphi字符串操作函数一览
- delphi字符串操作函数一览
- Delphi 的内存操作函数(2): 给数组指针分配内存
- Delphi中的操作二进制文件的两个重要函数
- Delphi数学常用操作函数一
- 关于几个字符串操作的函数
- Delphi学习之函数 ① 扩展的字符串操作函数