const
dtInt = 1;
dtNumeric = 2;
dtStr = 3;
dtBlob = 4;
dtNull = 5;
TSQliteParam = class
public
name: string;
valuetype: integer;
valueinteger: int64;
valuefloat: double;
valuedata: string;
valueblob: TBytes;
end;
procedure TSQLiteDB.AddParamBlob(name: string; value: TBytes);
var
par: TSQliteParam;
begin
par := TSQliteParam.Create;
par.name := name;
par.valuetype := SQLITE_BLOB;
par.valueBlob := value;
fParams.Add(par);
end;
procedure TSQLiteDB.SetParams(Stmt: TSQLiteStmt);
var
n: integer;
i: integer;
par: TSQliteParam;
iSize: integer;
ptr: pointer;
Name:AnsiString;
begin
try
for n := 0 to fParams.Count - 1 do
begin
par := TSQliteParam(fParams[n]);
Name:=par.name;
i := sqlite3_bind_parameter_index(Stmt, PAnsiChar(AnsiString(par.name)));
if i > 0 then
begin
case par.valuetype of
SQLITE_INTEGER:
sqlite3_bind_int64(Stmt, i, par.valueinteger);
SQLITE_FLOAT:
sqlite3_bind_double(Stmt, i, par.valuefloat);
SQLITE_TEXT:
sqlite3_bind_text(Stmt, i, PAnsiChar(Utf8String(par.valuedata)), length(Utf8String(par.valuedata)), SQLITE_TRANSIENT);
SQLITE_BLOB:begin
iSize:= Length(par.valueblob);
GetMem(ptr,iSize);
Move(Pbyte(@par.valueblob[0]),ptr,iSize);
SQLite3_Bind_Blob(stmt, i, ptr, iSize, @DisposePointer);
end;
SQLITE_NULL:
sqlite3_bind_null(Stmt, i);
end;
end;
end;
finally
ParamsClear;
end;
end;
{{{}}}