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.