delphi 版 sqlHelper第二版

  1 {
  2   odbc操作sqlite帮助类
  3   author:yywang
  4   date:2013-5-15
  5 }
  6 unit CommUtils;
  7 
  8 interface
  9 
 10 uses
 11   SysUtils, Windows, ActiveX, DB, ADODB, Generics.Collections;
 12 
 13 type
 14   TParameterMap = class
 15 
 16   private
 17     thisKey: string;
 18     thisValue: Variant;
 19     thisDataType: TDataType;
 20     thisSize: Integer;
 21   public
 22     constructor Create(key: string; value: Variant); overload;
 23     constructor Create(key: string; value: Variant; dataType: TFieldType;
 24       size: Integer); overload;
 25 
 26     function GetKey: string;
 27     function GetValue: Variant;
 28     function GetDataType: TDataType;
 29     function GetSize: Integer;
 30 
 31     procedure SetKey(key: string);
 32     procedure SetValue(value: Variant);
 33     procedure SetDataType(dataType: TDataType);
 34     procedure SetSize(size: Integer);
 35 
 36   published
 37     property key: string read GetKey write SetKey;
 38     property value: Variant read GetValue write SetValue;
 39     property dataType: TDataType read GetDataType write SetDataType;
 40     property size: Integer read GetSize write SetSize;
 41 
 42   end;
 43 
 44   TSqlHelper = class
 45 
 46   public
 47     { 执行单个插入更新删除sql }
 48     function ExecSQL(sql: string): Integer; overload;
 49 
 50     { 执行单个插入更新删除sql 参数化 }
 51     function ExceSQL(sql: string; parms: TList<TParameterMap>): Integer;
 52       overload;
 53 
 54     { 执行批量的sql插入更新删除 }
 55     function ButchExecSQL(sqls: TList<string>): Integer;
 56 
 57     { 获取单个值得查询 }
 58     function GetSingle(sql: string): Variant; overload;
 59 
 60     { 获取单个值得查询 参数化 }
 61     function GetSingle(sql: string; parms: TList<TParameterMap>): Variant;
 62       overload;
 63 
 64     { 获取一个连接 }
 65     function GetConnection(): TADOConnection;
 66 
 67     { 获取一个查询query对象 }
 68     function GetQuery(sql: string; connection: TADOConnection): TADOQuery;
 69       overload;
 70 
 71     { 获取一个query对象,参数化 }
 72     function GetQuery(sql: string; parms: TList<TParameterMap>;
 73       connection: TADOConnection): TADOQuery; overload;
 74 
 75     { 关闭连接 }
 76     procedure CloseConnection(conn: TADOConnection);
 77 
 78     { 关闭Query }
 79     procedure CloseQuery(query: TADOQuery);
 80 
 81     { 关闭连接及Query }
 82     procedure Close(query: TADOQuery; connection: TADOConnection);
 83 
 84   private
 85     { 私有 }
 86 
 87   end;
 88 
 89 implementation
 90 
 91 const
 92   constr: string =
 93     'Provider=MSDASQL.1;Persist Security Info=False;Data Source=SQLite3 Datasource';
 94 
 95 function TSqlHelper.ExecSQL(sql: string): Integer;
 96 begin
 97   Result := ExceSQL(sql, nil);
 98 end;
 99 
100 function TSqlHelper.ExceSQL(sql: string; parms: TList<TParameterMap>): Integer;
101 
102 var
103   command: TADOCommand;
104   conn: TADOConnection;
105   parm: TParameterMap;
106 begin
107   try
108     conn := GetConnection;
109     command := TADOCommand.Create(nil);
110     with command do
111     begin
112       connection := conn;
113       CommandText := sql;
114       if (parms <> nil) and (parms.Count > 0) then
115       begin
116         for parm in parms do
117         begin
118           Parameters.FindParam(parm.key).value := parm.value;
119           if (parm.size <> -1) then
120           begin
121             Parameters.FindParam(parm.key).dataType := parm.dataType;
122             Parameters.FindParam(parm.key).size := parm.size;
123           end;
124         end;
125       end;
126       Execute;
127     end;
128     Result := 1;
129   finally
130     command.Cancel;
131     CloseConnection(conn);
132   end;
133 end;
134 
135 function TSqlHelper.ButchExecSQL(sqls: TList<string>): Integer;
136 var
137   command: TADOCommand;
138   sql: string;
139   conn: TADOConnection;
140 begin
141   try
142     try
143       conn := GetConnection;
144       command := TADOCommand.Create(nil);
145       conn.BeginTrans;
146       with command do
147       begin
148         connection := conn;
149         for sql in sqls do
150         begin
151           if sql <> '' then
152           begin
153             CommandText := sql;
154             Execute;
155           end;
156         end;
157       end;
158       Result := 1;
159       conn.CommitTrans;
160     except
161       Result := 0;
162       conn.RollbackTrans;
163     end;
164   finally
165     command.Cancel;
166     CloseConnection(conn);
167   end;
168 end;
169 
170 function TSqlHelper.GetSingle(sql: string): Variant;
171 begin
172   Result := GetSingle(sql, nil);
173 end;
174 
175 function TSqlHelper.GetSingle(sql: string; parms: TList<TParameterMap>)
176   : Variant;
177 var
178   query: TADOQuery;
179   conn: TADOConnection;
180 begin
181   try
182     conn := GetConnection;
183     query := GetQuery(sql, parms, conn);
184     if query.RecordCount < 0 then
185       Result := '';
186     query.First;
187     Result := query.Fields.Fields[0].AsVariant;
188   finally
189     CloseQuery(query);
190     CloseConnection(conn);
191   end;
192 end;
193 
194 function TSqlHelper.GetQuery(sql: string;
195   connection: TADOConnection): TADOQuery;
196 begin
197   Result := GetQuery(sql, nil, connection);
198 end;
199 
200 function TSqlHelper.GetQuery(sql: string; parms: TList<TParameterMap>;
201   connection: TADOConnection): TADOQuery;
202 var
203   query: TADOQuery;
204   parm: TParameterMap;
205 begin
206   query := TADOQuery.Create(nil);
207   query.connection := connection;
208   query.sql.Add(sql);
209   if (parms <> nil) and (parms.Count > 0) then
210   begin
211     for parm in parms do
212     begin
213       query.Parameters.FindParam(parm.key).value := parm.value;
214       if (parm.size <> -1) then
215       begin
216         query.Parameters.FindParam(parm.key).dataType := parm.dataType;
217         query.Parameters.FindParam(parm.key).size := parm.size;
218       end;
219     end;
220   end;
221   query.Open;
222   Result := query;
223 end;
224 
225 function TSqlHelper.GetConnection: TADOConnection;
226 var
227   conn: TADOConnection;
228 begin
229   conn := TADOConnection.Create(nil);
230   conn.ConnectionString := constr;
231   conn.Open();
232   Result := conn;
233 end;
234 
235 procedure TSqlHelper.CloseQuery(query: TADOQuery);
236 begin
237   { if query.Active then }
238   query.Close;
239 end;
240 
241 procedure TSqlHelper.CloseConnection(conn: TADOConnection);
242 begin
243   if conn.Connected then
244     conn.Close;
245 end;
246 
247 procedure TSqlHelper.Close(query: TADOQuery; connection: TADOConnection);
248 begin
249   if query <> nil then
250     CloseQuery(query);
251   if connection <> nil then
252     CloseConnection(connection);
253 end;
254 
255 function TParameterMap.GetKey;
256 begin
257   Result := thisKey;
258 end;
259 
260 function TParameterMap.GetValue;
261 begin
262   Result := thisValue;
263 end;
264 
265 function TParameterMap.GetDataType;
266 begin
267   Result := thisDataType;
268 end;
269 
270 function TParameterMap.GetSize;
271 begin
272   Result := thisSize;
273 end;
274 
275 procedure TParameterMap.SetKey(key: string);
276 begin
277   thisKey := key;
278 end;
279 
280 procedure TParameterMap.SetValue(value: Variant);
281 begin
282   thisValue := value;
283 end;
284 
285 procedure TParameterMap.SetDataType(dataType: TFieldType);
286 begin
287   thisDataType := dataType;
288 end;
289 
290 procedure TParameterMap.SetSize(size: Integer);
291 begin
292   thisSize := size;
293 end;
294 
295 constructor TParameterMap.Create(key: string; value: Variant);
296 begin
297   thisValue := value;
298   thisKey := key;
299   thisDataType := ftUnknown;
300   thisSize := -1;
301 end;
302 
303 constructor TParameterMap.Create(key: string; value: Variant;
304   dataType: TFieldType; size: Integer);
305 begin
306   thisKey := key;
307   thisValue := value;
308   thisDataType := dataType;
309   thisSize := size;
310 end;
311 
312 initialization
313 
314 CoInitialize(nil);
315 
316 finalization
317 
318 CoUnInitialize;
319 
320 end.

 

posted @ 2013-05-16 10:15  wangyan9110  阅读(1147)  评论(0编辑  收藏  举报