SQL工厂法
来源:互联网 发布:5毛特效软件 编辑:程序博客网 时间:2024/06/02 20:23
来自:http://blog.csdn.net/hnxxcxg/article/details/6077221
表結構:
exeno caption params sqlcommand tablename
201 登錄 @loginname ftsring(20) select * from user where loginname=:loginname user
//author: cxg
unit MySQL;
interface
uses
SysUtils, ADODB, uFunction;
type
TMySQL = class(TObject)
private
fExeNo: Integer;
fCaption: string;
fParams: string;
fSqlcommand: string;
fTablename: string;
fQry: TADOQuery;
fValueArr: array[0..49] of Variant; //最多支持50个参数
procedure SetExeNo(Value: integer);
protected
public
constructor Create;
destructor Destroy; override;
procedure AddParam(const aValue: Variant);
//说明: 添加参数值
//参数: const aValue: Variant -- 参数值
function GetData: _Recordset; //非事务性查询
procedure ExeSQL; //事务性操作
procedure BeginTrans; //开始事务
procedure CommitTrans; //提交事务
procedure RollbackTrans; //回滚事务
property ExeNo: Integer read fExeNo write SetExeNo; //SQL执行序号
end;
implementation
{ TMySQL }
procedure TMySQL.AddParam(const aValue: Variant);
begin
fValueArr[fQry.Parameters.Count] := aValue;
fQry.Parameters.AddParameter;
end;
procedure TMySQL.BeginTrans;
begin
fQry.Connection.BeginTrans;
end;
procedure TMySQL.CommitTrans;
begin
fQry.Connection.CommitTrans;
end;
constructor TMySQL.Create;
begin
inherited;
fQry := TADOQuery.Create(nil);
fQry.Connection := uFunction.GetConnection;
end;
destructor TMySQL.Destroy;
begin
FreeAndNil(fqry);
inherited;
end;
procedure TMySQL.ExeSQL;
var
i: Integer;
begin
with fQry do
begin
Close;
SQL.Clear;
SQL.Text := fSqlcommand;
if Parameters.Count > 0 then
for i := 0 to Parameters.Count - 1 do
Parameters[i].Value := fValueArr[i];
ExecSQL;
end;
end;
function TMySQL.GetData: _Recordset;
var
i: Integer;
begin
Result := nil;
with fQry do
begin
Close;
SQL.Clear;
SQL.Text := fSqlcommand;
if Parameters.Count > 0 then
for i := 0 to Parameters.Count - 1 do
Parameters[i].Value := fValueArr[i];
Open;
Result := fQry.Recordset;
end;
end;
procedure TMySQL.RollbackTrans;
begin
fQry.Connection.RollbackTrans;
end;
procedure TMySQL.SetExeNo(Value: integer);
var
aQry: TADOQuery;
begin
fQry.Parameters.Clear;
fExeNo := Value;
aQry := TADOQuery.Create(nil);
aQry.Connection := uFunction.getconnection;
with aQry do
begin
Close;
SQL.Clear;
SQL.Text := 'select * from [sql] where [exeno]=:exeno';
Parameters.ParamByName('exeno').Value := fExeNo;
Open;
if not IsEmpty then
begin
fCaption := FieldByName('caption').AsString;
fParams := FieldByName('params').AsString;
fSqlcommand := FieldByName('sqlcommand').AsString;
fTablename := FieldByName('tablename').AsString;
end;
end;
aQry.Free;
end;
end.
客户端只需要写执行号,和参数
客户端完全没有sql语句
MySQL := TMySQL.Create;
MySQL.ExeNo := 201;
MySQL.AddParam(Trim(Edit_LoginName.Text));
MySQL.AddParam(Trim(Edit_LoginPW.Text));
DS.Data := MySQL.GetData;
直接写sql就是胖客户
首先安全性差
其次维护不方便
我换个数据库,我的服务端和客户端都不需要更改
- SQL工厂法
- 工厂
- 工厂
- 工厂
- 工厂
- 工厂
- 工厂
- 工厂
- 采用工厂模式思想,通用连接ms sql server/oracle
- 简单工厂,工厂,抽象工厂
- 简单工厂、工厂、抽象工厂
- 简单工厂、工厂、抽象工厂
- 工厂与工厂方法
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 简单工厂 静态工厂
- IOS8定位服务
- 如何发布 JSON 项目? --橙子
- hdu3911 线段树
- 第八周求方程的根
- 吐槽一下Activiti的用户手册和一本书
- SQL工厂法
- 在Centos6.5下安装CMake2.8
- Django1.7+python 2.78+pycharm使用mysql数据库
- c字符-字符串问题集锦
- mysql 测试系列1 -fio 磁盘性能测试
- signed和unsigned之间以及移位操作相关左移和右移
- ionic 环境搭建
- MySQL中的中文匹配
- java.lang.OutOfMemoryError: Java heap space 的解决