一个简单的,适应多种数据库之间存取操作的数据库访问层
来源:互联网 发布:开票软件重装恢复数据 编辑:程序博客网 时间:2024/04/28 07:30
unit DataAccess_U;
interface
uses
Classes, ADODB, DB, SysUtils, Dbtables, Variants, Forms;
type
TDataAccess = class
public
function GetSQLValue(ASQLStr: string; var AValue: Variant): Boolean; overload; virtual;
function GetSQLValue(ASQLStr: string; var AValue: string): Boolean; overload; virtual;
procedure ExecSQL(ASQLStr: string); virtual; abstract;
function OpenSQL(ASQLStr: string; var ADataSet: TDataSet): Boolean; virtual; abstract;
end;
TServerAccess = class(TDataAccess)
private
function GetCommQuery: TADOQuery;
procedure FreeCommQuery(AQuery: TADOQuery);
public
ADOConnection: TADOConnection;
ConnectString: string;
constructor Create;
destructor Destroy; override;
procedure ExecSQL(ASQLStr: string); override;
function OpenSQL(ASQLStr: string; var ADataSet: TDataSet): Boolean; override;
procedure InitAll; virtual;
end;
TClientAccess = class(TDataAccess)
private
DataBaseName: string; //{ DONE : 等待赋值 }
function GetCommQuery: TQuery;
procedure FreeCommQuery(AQuery: TQuery);
public
constructor Create;
procedure ExecSQL(ASQLStr: string); override;
function OpenSQL(ASQLStr: string; var ADataSet: TDataSet): Boolean; override;
class procedure CreateAlias;
procedure InitAll;
end;
implementation
constructor TServerAccess.Create;
begin
ADOConnection := TADOConnection.Create(nil);
end;
destructor TServerAccess.Destroy;
begin
ADOConnection.Free;
inherited;
end;
procedure TServerAccess.ExecSQL(ASQLStr: string);
var
tmpQuery: TADOQuery;
begin
tmpQuery := GetCommQuery;
try
tmpQuery.Close;
tmpQuery.SQL.Text := ASQLStr;
tmpQuery.ExecSQL;
finally
freeCommQuery(tmpQuery);
end;
end;
procedure TServerAccess.FreeCommQuery(AQuery: TADOQuery);
begin
FreeAndNil(AQuery);
end;
function TServerAccess.GetCommQuery: TADOQuery;
begin
Result := TADOQuery.Create(nil);
Result.Connection := ADOConnection;
end;
procedure TServerAccess.InitAll;
begin
end;
function TServerAccess.OpenSQL(ASQLStr: string;
var ADataSet: TDataSet): Boolean;
var
tmpADOQuery: TADOQuery;
begin
tmpADOQuery := GetCommQuery();
tmpADOQuery.SQL.Text := ASQLStr;
tmpADOQuery.Open;
Result := tmpADOQuery.RecordCount > 0;
ADataSet := tmpADOQuery;
end;
constructor TClientAccess.Create;
begin
DataBaseName := 'selfold';
end;
class procedure TClientAccess.CreateAlias;
var
tmpStrList: TStringList;
begin
Session.DeleteAlias('selfold');
Session.SaveConfigFile;
if not Session.IsAlias('selfold') then
begin
tmpStrList := TStringList.Create;
try
tmpStrList.Add('path =' + ExtractFilePath(Application.ExeName) + 'HS_DATA');
Session.AddAlias('selfold', 'STANDARD', tmpStrList);
Session.SaveConfigFile;
finally
tmpStrList.Free;
end;
end;
end;
procedure TClientAccess.ExecSQL(ASQLStr: string);
var
tmpQuery: TQuery;
begin
tmpQuery := GetCommQuery;
tmpQuery.SQL.Text := ASQLStr;
tmpQuery.ExecSQL;
FreeCommQuery(tmpQuery);
end;
procedure TClientAccess.FreeCommQuery(AQuery: TQuery);
begin
AQuery.Free;
end;
function TClientAccess.GetCommQuery: TQuery;
begin
Result := TQuery.Create(nil);
Result.DatabaseName := DataBaseName;
end;
procedure TClientAccess.InitAll;
begin
end;
function TClientAccess.OpenSQL(ASQLStr: string;
var ADataSet: TDataSet): Boolean;
var
tmpQuery: TQuery;
begin
tmpQuery := GetCommQuery;
tmpQuery.RequestLive := True;
tmpQuery.SQL.Text := ASQLStr;
tmpQuery.Open;
ADataSet := tmpQuery;
Result := tmpQuery.RecordCount > 0;
end;
{ TDataAccess }
function TDataAccess.GetSQLValue(ASQLStr: string;
var AValue: Variant): Boolean;
var
tmpDataSet: TDataSet;
i: Integer;
begin
Result := OpenSQL(ASQLStr, tmpDataSet);
try
if Result then
begin
AValue := VarArrayCreate([0, tmpDataSet.FieldCount], varVariant);
for I := 0 to tmpDataSet.FieldCount - 1 do // Iterate
begin
AValue[I] := tmpDataSet.Fields[I].AsString;
end; // for
end;
finally
tmpDataSet.Close;
tmpDataSet.Free;
end;
end;
function TDataAccess.GetSQLValue(ASQLStr: string;
var AValue: string): Boolean;
var
tmpDataSet: TDataSet;
begin
Result := OpenSQL(ASQLStr, tmpDataSet);
try
if Result then
AValue := tmpDataSet.Fields[0].AsString;
finally
tmpDataSet.Close;
tmpDataSet.Free;
end;
end;
- 一个简单的,适应多种数据库之间存取操作的数据库访问层
- 一个简单的,适应多种数据库之间存取操作的数据库访问层
- 简单工厂模式构建数据访问层以实现多种数据库之间的切换
- 简单工厂模式构建数据访问层以实现多种数据库之间的切换
- 简单工厂模式构建数据访问层以实现多种数据库之间的切换
- 使用ADO.NET 建立适应多种数据库的数据访问层接口
- 适应多种数据库的db helper代码
- 一个简单的访问数据库的应用程序
- 一个简单的PHP数据库访问类
- 一个简单访问Mysql数据库的例程
- 一个简单的jsp访问数据库程序
- 一个简单的NET数据访问层操作类
- PHP 存取 MySQL 数据库的一个例子
- 一个用asp+存取数据库的例子
- 解析数据访问层操作数据库的方式
- 使用Oracle DBLink进行数据库之间对象的访问操作
- Oracle--DBLink 进行数据库之间对象的访问操作
- 使用Oracle DBLink进行数据库之间对象的访问操作
- Base64编码/解码VB6超精简版(适用于中、英文)
- 编写可移植数据访问层
- LibLand摄相头驱动 for Linux
- 求助解决JAVA
- 几个建索引的技巧
- 一个简单的,适应多种数据库之间存取操作的数据库访问层
- hibernate 延迟加载问题探讨
- C++ Thread
- 回溯法-经典问题C程序
- 祛除装修异味的方法 总有一种适合你!
- 解决web页面的同步问题
- C++ Python
- 一个比CBitmap更优秀的类 ----- CImage
- EasyJWeb中防重复提交使用及原理