mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 17:49:25 +02:00
Patch from Luiz Americo, bug #12703
- Format code to get consistent use of spacing, indentation and capitalization. git-svn-id: trunk@12242 -
This commit is contained in:
parent
1446eb9dc2
commit
332d850f1e
@ -1,4 +1,4 @@
|
||||
unit customsqliteds;
|
||||
unit CustomSqliteDS;
|
||||
|
||||
{
|
||||
This is TCustomSqliteDataset, a TDataset descendant class for use with fpc compiler
|
||||
@ -39,13 +39,13 @@ unit customsqliteds;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Db;
|
||||
Classes, SysUtils, db;
|
||||
|
||||
type
|
||||
PDataRecord = ^DataRecord;
|
||||
PPDataRecord = ^PDataRecord;
|
||||
DataRecord = record
|
||||
Row: PPchar;
|
||||
Row: PPChar;
|
||||
BookmarkFlag: TBookmarkFlag;
|
||||
Next: PDataRecord;
|
||||
Previous: PDataRecord;
|
||||
@ -57,17 +57,17 @@ type
|
||||
FFieldRow: PChar;
|
||||
FFieldIndex: Integer;
|
||||
FRowSize: Integer;
|
||||
FPosition: Longint;
|
||||
FPosition: LongInt;
|
||||
public
|
||||
constructor Create(const ActiveItem: PDataRecord; FieldIndex: Integer);
|
||||
function Write(const Buffer; Count: Longint): Longint; override;
|
||||
function Read(var Buffer; Count: Longint): Longint; override;
|
||||
function Seek(Offset: Longint; Origin: Word): Longint; override;
|
||||
function Write(const Buffer; Count: LongInt): LongInt; override;
|
||||
function Read(var Buffer; Count: LongInt): LongInt; override;
|
||||
function Seek(Offset: LongInt; Origin: Word): LongInt; override;
|
||||
end;
|
||||
|
||||
//callback types
|
||||
TSqliteCdeclCallback = function(UserData: Pointer; Count: LongInt; Values: PPChar; Names: PPChar): LongInt; cdecl;
|
||||
TSqliteCallback = function (UserData:Pointer; Count:LongInt; Values:PPChar; Names:PPChar):LongInt of Object;
|
||||
TSqliteCallback = function(UserData: Pointer; Count: LongInt; Values: PPChar; Names: PPChar): LongInt of object;
|
||||
TCallbackInfo = record
|
||||
Proc: TSqliteCallback;
|
||||
Data: Pointer;
|
||||
@ -76,7 +76,7 @@ type
|
||||
|
||||
TRecordState = (rsAdded, rsDeleted, rsUpdated);
|
||||
TRecordStateSet = set of TRecordState;
|
||||
TQueryUpdatesCallback = procedure (UserData: Pointer; Values: PPChar; ABookmark: TBookmark; RecordState: TRecordState) of Object;
|
||||
TQueryUpdatesCallback = procedure(UserData: Pointer; Values: PPChar; ABookmark: TBookmark; RecordState: TRecordState) of object;
|
||||
|
||||
TGetSqlStrFunction = function(APChar: PChar): String;
|
||||
|
||||
@ -100,7 +100,7 @@ type
|
||||
FIndexFieldList: TList;
|
||||
FOnGetHandle: TDataSetNotifyEvent;
|
||||
FOptions: TSqliteOptions;
|
||||
FSqlList:TStrings;
|
||||
FSQLList: TStrings;
|
||||
procedure CopyCacheToItem(AItem: PDataRecord);
|
||||
function GetIndexFields(Value: Integer): TField;
|
||||
procedure SetMasterIndexValue;
|
||||
@ -111,7 +111,7 @@ type
|
||||
FPrimaryKey: String;
|
||||
FPrimaryKeyNo: Integer;
|
||||
FFileName: String;
|
||||
FSql: String;
|
||||
FSQL: String;
|
||||
FTableName: String;
|
||||
FSelectSqlStr: String;
|
||||
FAutoIncFieldNo: Integer;
|
||||
@ -190,9 +190,9 @@ type
|
||||
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint; override;
|
||||
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
|
||||
function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; override;
|
||||
function Locate(const KeyFields: string; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean; override;
|
||||
function LocateNext(const KeyFields: string; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean;
|
||||
function Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;override;
|
||||
function Locate(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean; override;
|
||||
function LocateNext(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean;
|
||||
function Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant; override;
|
||||
// Additional procedures
|
||||
function ApplyUpdates: Boolean;
|
||||
function CreateTable: Boolean;
|
||||
@ -223,7 +223,7 @@ type
|
||||
property ReturnCode: Integer read FReturnCode;
|
||||
property SqliteHandle: Pointer read FSqliteHandle;
|
||||
property SqliteVersion: String read GetSqliteVersion;
|
||||
property SQLList:TStrings read FSqlList;
|
||||
property SQLList:TStrings read FSQLList;
|
||||
published
|
||||
property AutoIncrementKey: Boolean read FAutoIncrementKey write FAutoIncrementKey;
|
||||
property IndexFieldNames: string read FIndexFieldNames write FIndexFieldNames;
|
||||
@ -234,10 +234,10 @@ type
|
||||
property PrimaryKey: String read FPrimaryKey write FPrimaryKey;
|
||||
property SaveOnClose: Boolean read FSaveOnClose write FSaveOnClose;
|
||||
property SaveOnRefetch: Boolean read FSaveOnRefetch write FSaveOnRefetch;
|
||||
property SQL: String read FSql write FSql;
|
||||
property SQL: String read FSQL write FSQL;
|
||||
property TableName: String read FTableName write FTableName;
|
||||
property MasterSource: TDataSource read GetMasterSource write SetMasterSource;
|
||||
property MasterFields: string read GetMasterFields write SetMasterFields;
|
||||
property MasterFields: String read GetMasterFields write SetMasterFields;
|
||||
|
||||
property Active;
|
||||
|
||||
@ -266,8 +266,8 @@ type
|
||||
property OnPostError;
|
||||
end;
|
||||
|
||||
function Num2SqlStr(APChar: PChar): String;
|
||||
function Char2SqlStr(APChar: PChar): String;
|
||||
function Num2SQLStr(APChar: PChar): String;
|
||||
function Char2SQLStr(APChar: PChar): String;
|
||||
|
||||
|
||||
implementation
|
||||
@ -289,7 +289,7 @@ begin
|
||||
Result:= Proc(Data, Count, Values, Names);
|
||||
end;
|
||||
|
||||
function Num2SqlStr(APChar: PChar): String;
|
||||
function Num2SQLStr(APChar: PChar): String;
|
||||
begin
|
||||
if APChar = nil then
|
||||
begin
|
||||
@ -299,7 +299,7 @@ begin
|
||||
Result := String(APChar);
|
||||
end;
|
||||
|
||||
function Char2SqlStr(APChar: PChar): String;
|
||||
function Char2SQLStr(APChar: PChar): String;
|
||||
begin
|
||||
if APChar = nil then
|
||||
begin
|
||||
@ -328,7 +328,7 @@ begin
|
||||
// FRowSize := 0;
|
||||
end;
|
||||
|
||||
function TDSStream.Seek(Offset: Longint; Origin: Word): Longint;
|
||||
function TDSStream.Seek(Offset: LongInt; Origin: Word): LongInt;
|
||||
begin
|
||||
Case Origin of
|
||||
soFromBeginning : FPosition := Offset;
|
||||
@ -338,7 +338,7 @@ begin
|
||||
Result := FPosition;
|
||||
end;
|
||||
|
||||
function TDSStream.Write(const Buffer; Count: Longint): Longint;
|
||||
function TDSStream.Write(const Buffer; Count: LongInt): LongInt;
|
||||
var
|
||||
NewRow: PChar;
|
||||
begin
|
||||
@ -367,7 +367,7 @@ begin
|
||||
Inc(FPosition, Count);
|
||||
end;
|
||||
|
||||
function TDSStream.Read(var Buffer; Count: Longint): Longint;
|
||||
function TDSStream.Read(var Buffer; Count: Longint): LongInt;
|
||||
var
|
||||
BytesToMove: Integer;
|
||||
begin
|
||||
@ -405,8 +405,8 @@ begin
|
||||
FBeginItem^.Previous := nil;
|
||||
FEndItem^.Next := nil;
|
||||
|
||||
FBeginItem^.BookMarkFlag := bfBOF;
|
||||
FEndItem^.BookMarkFlag := bfEOF;
|
||||
FBeginItem^.BookmarkFlag := bfBOF;
|
||||
FEndItem^.BookmarkFlag := bfEOF;
|
||||
|
||||
FMasterLink := TMasterDataLink.Create(Self);
|
||||
FMasterLink.OnMasterChange := @MasterChanged;
|
||||
@ -416,7 +416,7 @@ begin
|
||||
FUpdatedItems := TFPList.Create;
|
||||
FAddedItems := TFPList.Create;
|
||||
FDeletedItems := TFPList.Create;
|
||||
FSqlList := TStringList.Create;
|
||||
FSQLList := TStringList.Create;
|
||||
inherited Create(AOwner);
|
||||
end;
|
||||
|
||||
@ -468,7 +468,7 @@ begin
|
||||
FDeletedItems.Destroy;
|
||||
FMasterLink.Destroy;
|
||||
FIndexFieldList.Destroy;
|
||||
FSqlList.Destroy;
|
||||
FSQLList.Destroy;
|
||||
// dispose special items
|
||||
Dispose(FBeginItem);
|
||||
Dispose(FCacheItem);
|
||||
@ -493,7 +493,7 @@ begin
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.CompareBookmarks(Bookmark1, Bookmark2: TBookmark
|
||||
): Longint;
|
||||
): LongInt;
|
||||
var
|
||||
TempItem: PDataRecord;
|
||||
begin
|
||||
@ -681,16 +681,14 @@ begin
|
||||
TempItem := FBeginItem;
|
||||
TempActive := PPDataRecord(ActiveBuffer)^;
|
||||
if TempActive = FCacheItem then // Record is being edited
|
||||
begin
|
||||
TempActive := FInternalActiveBuffer;
|
||||
end;
|
||||
//RecNo is 1 based
|
||||
inc(Result);
|
||||
Inc(Result);
|
||||
while TempActive <> TempItem do
|
||||
begin
|
||||
if TempItem^.Next <> nil then
|
||||
begin
|
||||
inc(Result);
|
||||
Inc(Result);
|
||||
TempItem := TempItem^.Next;
|
||||
end
|
||||
else
|
||||
@ -841,18 +839,16 @@ end;
|
||||
procedure TCustomSqliteDataset.InternalOpen;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if FMasterLink.DataSource <> nil then
|
||||
begin
|
||||
//todo: retrieve only necessary fields
|
||||
FSql := 'Select * from '+FTableName+';'; // forced to obtain all fields
|
||||
end;
|
||||
if FMasterLink.DataSource <> nil then
|
||||
FSQL := 'Select * from ' + FTableName + ';'; //forced to obtain all fields
|
||||
|
||||
if FSql = '' then
|
||||
if FSQL = '' then
|
||||
begin
|
||||
if FTablename = '' then
|
||||
DatabaseError('Tablename not set',Self);
|
||||
FSql := 'Select * from '+FTableName+';';
|
||||
FSQL := 'Select * from '+FTableName+';';
|
||||
end;
|
||||
|
||||
if FSqliteHandle = nil then
|
||||
@ -875,7 +871,7 @@ begin
|
||||
begin
|
||||
if FIndexFieldList.Count <> FMasterLink.Fields.Count then
|
||||
DatabaseError('MasterFields count doesn''t match IndexFields count', Self);
|
||||
//Set FSql considering MasterSource active record
|
||||
//Set FSQL considering MasterSource active record
|
||||
SetDetailFilter;
|
||||
end;
|
||||
|
||||
@ -1055,13 +1051,13 @@ begin
|
||||
AFieldList.Destroy;
|
||||
end;
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
writeln('##TCustomSqliteDataset.FindRecordItem##');
|
||||
writeln(' KeyFields: ', KeyFields);
|
||||
WriteLn('##TCustomSqliteDataset.FindRecordItem##');
|
||||
WriteLn(' KeyFields: ', KeyFields);
|
||||
for i := 0 to AFieldCount - 1 do
|
||||
begin
|
||||
writeln('LocateFields[',i,']');
|
||||
writeln(' Key: ', LocateFields[i].Key);
|
||||
writeln(' Index: ', LocateFields[i].Index);
|
||||
WriteLn('LocateFields[', i, ']');
|
||||
WriteLn(' Key: ', LocateFields[i].Key);
|
||||
WriteLn(' Index: ', LocateFields[i].Index);
|
||||
end;
|
||||
{$endif}
|
||||
//Search the list
|
||||
@ -1075,7 +1071,7 @@ begin
|
||||
if not CompFunction(TempItem^.Row[Index], Key) then
|
||||
begin
|
||||
MatchRecord := False;
|
||||
Break;//for
|
||||
break; //for
|
||||
end;
|
||||
end;
|
||||
if MatchRecord then
|
||||
@ -1088,7 +1084,7 @@ begin
|
||||
Resync([]);
|
||||
DoAfterScroll;
|
||||
end;
|
||||
Break;//while
|
||||
break; //while
|
||||
end;
|
||||
TempItem := TempItem^.Next;
|
||||
end;
|
||||
@ -1113,19 +1109,19 @@ begin
|
||||
Dispose(AItem);
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.Locate(const KeyFields: string; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean;
|
||||
function TCustomSqliteDataset.Locate(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions): Boolean;
|
||||
begin
|
||||
CheckBrowseMode;
|
||||
Result := FindRecordItem(FBeginItem^.Next, KeyFields, KeyValues, LocateOptions, True) <> nil;
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.LocateNext(const KeyFields: string; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean;
|
||||
function TCustomSqliteDataset.LocateNext(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions): Boolean;
|
||||
begin
|
||||
CheckBrowseMode;
|
||||
Result := FindRecordItem(PPDataRecord(ActiveBuffer)^^.Next, KeyFields, KeyValues, LocateOptions, True) <> nil;
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;
|
||||
function TCustomSqliteDataset.Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant;
|
||||
var
|
||||
TempItem: PDataRecord;
|
||||
begin
|
||||
@ -1195,7 +1191,7 @@ begin
|
||||
ftFloat, ftDateTime, ftDate, ftTime, ftCurrency:
|
||||
begin
|
||||
Str(Double(Buffer^), TempStr);
|
||||
//Str returns a space as the first character for positive values
|
||||
//Str returns an space as the first character for positive values
|
||||
//and the - sign for negative values. It's necessary to remove the extra
|
||||
//space while keeping the - sign
|
||||
if TempStr[1] = ' ' then
|
||||
@ -1258,8 +1254,11 @@ procedure TCustomSqliteDataset.SetDetailFilter;
|
||||
if not AField.IsNull then
|
||||
begin
|
||||
case AField.DataType of
|
||||
ftString,ftMemo: Result:='"'+AField.AsString+'"';//todo: handle " caracter properly
|
||||
ftDateTime,ftDate,ftTime:Str(AField.AsDateTime,Result);
|
||||
//todo: handle " caracter properly
|
||||
ftString, ftMemo:
|
||||
Result := '"' + AField.AsString + '"';
|
||||
ftDateTime, ftDate, ftTime:
|
||||
Str(AField.AsDateTime, Result);
|
||||
else
|
||||
Result := AField.AsString;
|
||||
end; //case
|
||||
@ -1273,7 +1272,7 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
if FMasterLink.Dataset.RecordCount = 0 then //Retrieve all data
|
||||
FSql:='Select * from '+FTableName
|
||||
FSQL := 'Select * from ' + FTableName
|
||||
else
|
||||
begin
|
||||
AFilter := ' where ';
|
||||
@ -1283,7 +1282,7 @@ begin
|
||||
if i <> FMasterLink.Fields.Count - 1 then
|
||||
AFilter := AFilter + ' and ';
|
||||
end;
|
||||
FSql:='Select * from '+FTableName+AFilter;
|
||||
FSQL := 'Select * from ' + FTableName + AFilter;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1291,16 +1290,16 @@ procedure TCustomSqliteDataset.MasterChanged(Sender: TObject);
|
||||
begin
|
||||
SetDetailFilter;
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
writeln('##TCustomSqliteDataset.MasterChanged##');
|
||||
writeln(' SQL used to filter detail dataset:');
|
||||
writeln(' ',FSql);
|
||||
WriteLn('##TCustomSqliteDataset.MasterChanged##');
|
||||
WriteLn(' SQL used to filter detail dataset:');
|
||||
WriteLn(' ', FSQL);
|
||||
{$endif}
|
||||
RefetchData;
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.MasterDisabled(Sender: TObject);
|
||||
begin
|
||||
FSql:='Select * from '+FTableName+';';
|
||||
FSQL := 'Select * from ' + FTableName + ';';
|
||||
RefetchData;
|
||||
end;
|
||||
|
||||
@ -1356,29 +1355,29 @@ begin
|
||||
FMasterLink.DataSource := Value;
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.ExecSQL(const ASql:String);
|
||||
procedure TCustomSqliteDataset.ExecSQL(const ASQL: String);
|
||||
begin
|
||||
if FSqliteHandle = nil then
|
||||
GetSqliteHandle;
|
||||
ExecuteDirect(ASql);
|
||||
ExecuteDirect(ASQL);
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.ExecSQLList;
|
||||
begin
|
||||
if FSqliteHandle = nil then
|
||||
GetSqliteHandle;
|
||||
SqliteExec(PChar(FSqlList.Text),nil,nil);
|
||||
SqliteExec(PChar(FSQLList.Text), nil, nil);
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.ExecSQL;
|
||||
begin
|
||||
ExecSQL(FSql);
|
||||
ExecSQL(FSQL);
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.ApplyUpdates: Boolean;
|
||||
var
|
||||
iFields, iItems, StatementsCounter, TempReturnCode: Integer;
|
||||
SqlTemp,WhereKeyNameEqual,ASqlLine,TemplateStr:String;
|
||||
SQLTemp, WhereKeyNameEqual, SQLLine, TemplateStr: String;
|
||||
TempItem: PDataRecord;
|
||||
begin
|
||||
CheckBrowseMode;
|
||||
@ -1400,26 +1399,26 @@ begin
|
||||
WriteLn(' PrimaryKey: ', WhereKeyNameEqual);
|
||||
WriteLn(' PrimaryKeyNo: ', FPrimaryKeyNo);
|
||||
{$endif}
|
||||
SqlTemp:='BEGIN;';
|
||||
SQLTemp := 'BEGIN;';
|
||||
// Delete Records
|
||||
if FDeletedItems.Count > 0 then
|
||||
TemplateStr := 'DELETE FROM ' + FTableName + WhereKeyNameEqual;
|
||||
for iItems := 0 to FDeletedItems.Count - 1 do
|
||||
begin
|
||||
TempItem := PDataRecord(FDeletedItems.List^[iItems]);
|
||||
SqlTemp:=SqlTemp+(TemplateStr+
|
||||
SQLTemp := SQLTemp + (TemplateStr +
|
||||
String(TempItem^.Row[FPrimaryKeyNo]) + ';');
|
||||
FreeItem(TempItem);
|
||||
inc(StatementsCounter);
|
||||
//ApplyUpdates each 400 statements
|
||||
if StatementsCounter = 400 then
|
||||
begin
|
||||
SqlTemp:=SqlTemp+'COMMIT;';
|
||||
TempReturnCode := SqliteExec(PChar(SqlTemp),nil,nil);
|
||||
SQLTemp := SQLTemp + 'COMMIT;';
|
||||
TempReturnCode := SqliteExec(PChar(SQLTemp), nil, nil);
|
||||
if TempReturnCode <> SQLITE_OK then
|
||||
FReturnCode := TempReturnCode;
|
||||
StatementsCounter := 0;
|
||||
SqlTemp:='BEGIN;';
|
||||
SQLTemp := 'BEGIN;';
|
||||
end;
|
||||
end;
|
||||
// Update changed records
|
||||
@ -1427,27 +1426,28 @@ begin
|
||||
TemplateStr := 'UPDATE ' + FTableName + ' SET ';
|
||||
for iItems := 0 to FUpdatedItems.Count - 1 do
|
||||
begin
|
||||
ASqlLine:=TemplateStr;
|
||||
SQLLine := TemplateStr;
|
||||
for iFields := 0 to Fields.Count - 2 do
|
||||
begin
|
||||
ASqlLine:=ASqlLine + (Fields[iFields].FieldName +' = '+
|
||||
SQLLine := SQLLine + (Fields[iFields].FieldName + ' = ' +
|
||||
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) + ',');
|
||||
end;
|
||||
iFields := Fields.Count - 1;
|
||||
ASqlLine:=ASqlLine + (Fields[iFields].FieldName +' = '+
|
||||
SQLLine := SQLLine + (Fields[iFields].FieldName + ' = ' +
|
||||
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) +
|
||||
WhereKeyNameEqual+String(PDataRecord(FUpdatedItems[iItems])^.Row[FPrimaryKeyNo])+';');
|
||||
SqlTemp:=SqlTemp + ASqlLine;
|
||||
WhereKeyNameEqual +
|
||||
String(PDataRecord(FUpdatedItems[iItems])^.Row[FPrimaryKeyNo]) + ';');
|
||||
SQLTemp := SQLTemp + SQLLine;
|
||||
inc(StatementsCounter);
|
||||
//ApplyUpdates each 400 statements
|
||||
if StatementsCounter = 400 then
|
||||
begin
|
||||
SqlTemp:=SqlTemp+'COMMIT;';
|
||||
TempReturnCode := SqliteExec(PChar(SqlTemp),nil,nil);
|
||||
SQLTemp := SQLTemp + 'COMMIT;';
|
||||
TempReturnCode := SqliteExec(PChar(SQLTemp), nil, nil);
|
||||
if TempReturnCode <> SQLITE_OK then
|
||||
FReturnCode := TempReturnCode;
|
||||
StatementsCounter := 0;
|
||||
SqlTemp:='BEGIN;';
|
||||
SQLTemp := 'BEGIN;';
|
||||
end;
|
||||
end;
|
||||
// Add new records
|
||||
@ -1461,41 +1461,38 @@ begin
|
||||
end;
|
||||
for iItems := 0 to FAddedItems.Count - 1 do
|
||||
begin
|
||||
ASqlLine:=TemplateStr;
|
||||
SQLLine := TemplateStr;
|
||||
for iFields := 0 to Fields.Count - 2 do
|
||||
begin
|
||||
ASqlLine:=ASqlLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields])+',');
|
||||
end;
|
||||
//todo: see if i can assume iFields = Fields.Count-2 safely
|
||||
SQLLine := SQLLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields]) + ',');
|
||||
iFields := Fields.Count - 1;
|
||||
ASqlLine:=ASqlLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields])+');');
|
||||
SqlTemp:=SqlTemp + ASqlLine;
|
||||
inc(StatementsCounter);
|
||||
SQLLine := SQLLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields]) + ');' );
|
||||
SQLTemp := SQLTemp + SQLLine;
|
||||
Inc(StatementsCounter);
|
||||
//ApplyUpdates each 400 statements
|
||||
if StatementsCounter = 400 then
|
||||
begin
|
||||
SqlTemp:=SqlTemp+'COMMIT;';
|
||||
TempReturnCode := SqliteExec(PChar(SqlTemp),nil,nil);
|
||||
SQLTemp := SQLTemp + 'COMMIT;';
|
||||
TempReturnCode := SqliteExec(PChar(SQLTemp), nil, nil);
|
||||
if TempReturnCode <> SQLITE_OK then
|
||||
FReturnCode := TempReturnCode;
|
||||
StatementsCounter := 0;
|
||||
SqlTemp:='BEGIN;';
|
||||
SQLTemp := 'BEGIN;';
|
||||
end;
|
||||
end;
|
||||
SqlTemp:=SqlTemp+'COMMIT;';
|
||||
SQLTemp := SQLTemp + 'COMMIT;';
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
writeln(' SQL: ',SqlTemp);
|
||||
WriteLn(' SQL: ',SqlTemp);
|
||||
{$endif}
|
||||
FAddedItems.Clear;
|
||||
FUpdatedItems.Clear;
|
||||
FDeletedItems.Clear;
|
||||
TempReturnCode := SqliteExec(PChar(SqlTemp),nil,nil);
|
||||
TempReturnCode := SqliteExec(PChar(SQLTemp), nil, nil);
|
||||
if TempReturnCode <> SQLITE_OK then
|
||||
FReturnCode := TempReturnCode;
|
||||
Result := FReturnCode = SQLITE_OK;
|
||||
end;
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
writeln(' Result: ',Result);
|
||||
WriteLn(' Result: ', Result);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
@ -1506,11 +1503,11 @@ end;
|
||||
|
||||
function TCustomSqliteDataset.CreateTable(const ATableName: String): Boolean;
|
||||
var
|
||||
SqlTemp:String;
|
||||
SQLTemp: String;
|
||||
i: Integer;
|
||||
begin
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
writeln('##TCustomSqliteDataset.CreateTable##');
|
||||
WriteLn('##TCustomSqliteDataset.CreateTable##');
|
||||
if ATableName = '' then
|
||||
WriteLn(' TableName Not Set');
|
||||
if FieldDefs.Count = 0 then
|
||||
@ -1518,56 +1515,57 @@ begin
|
||||
{$endif}
|
||||
if (ATableName <> '') and (FieldDefs.Count > 0) then
|
||||
begin
|
||||
SqlTemp:='CREATE TABLE '+ATableName+' (';
|
||||
SQLTemp := 'CREATE TABLE ' + ATableName + ' (';
|
||||
for i := 0 to FieldDefs.Count - 1 do
|
||||
begin
|
||||
//todo: add index to autoinc field
|
||||
SqlTemp:=SqlTemp + FieldDefs[i].Name;
|
||||
SQLTemp := SQLTemp + FieldDefs[i].Name;
|
||||
case FieldDefs[i].DataType of
|
||||
ftInteger:
|
||||
SqlTemp:=SqlTemp + ' INTEGER';
|
||||
SQLTemp := SQLTemp + ' INTEGER';
|
||||
ftString:
|
||||
SqlTemp:=SqlTemp + ' VARCHAR';
|
||||
SQLTemp := SQLTemp + ' VARCHAR';
|
||||
ftBoolean:
|
||||
SqlTemp:=SqlTemp + ' BOOL_INT';
|
||||
SQLTemp := SQLTemp + ' BOOL_INT';
|
||||
ftFloat:
|
||||
SqlTemp:=SqlTemp + ' FLOAT';
|
||||
SQLTemp := SQLTemp + ' FLOAT';
|
||||
ftWord:
|
||||
SqlTemp:=SqlTemp + ' WORD';
|
||||
SQLTemp := SQLTemp + ' WORD';
|
||||
ftDateTime:
|
||||
SqlTemp:=SqlTemp + ' DATETIME';
|
||||
SQLTemp := SQLTemp + ' DATETIME';
|
||||
ftDate:
|
||||
SqlTemp:=SqlTemp + ' DATE';
|
||||
SQLTemp := SQLTemp + ' DATE';
|
||||
ftTime:
|
||||
SqlTemp:=SqlTemp + ' TIME';
|
||||
SQLTemp := SQLTemp + ' TIME';
|
||||
ftLargeInt:
|
||||
SqlTemp:=SqlTemp + ' LARGEINT';
|
||||
SQLTemp := SQLTemp + ' LARGEINT';
|
||||
ftCurrency:
|
||||
SqlTemp:=SqlTemp + ' CURRENCY';
|
||||
SQLTemp := SQLTemp + ' CURRENCY';
|
||||
ftAutoInc:
|
||||
SqlTemp:=SqlTemp + ' AUTOINC_INT';
|
||||
SQLTemp := SQLTemp + ' AUTOINC_INT';
|
||||
ftMemo:
|
||||
SqlTemp:=SqlTemp + ' TEXT';
|
||||
SQLTemp := SQLTemp + ' TEXT';
|
||||
else
|
||||
DatabaseError('Field type "'+FieldTypeNames[FieldDefs[i].DataType]+'" not supported',Self);
|
||||
DatabaseError('Field type "' + FieldTypeNames[FieldDefs[i].DataType] +
|
||||
'" not supported', Self);
|
||||
end;
|
||||
if UpperCase(FieldDefs[i].Name) = UpperCase(FPrimaryKey) then
|
||||
SqlTemp:=SqlTemp + ' PRIMARY KEY';
|
||||
SQLTemp := SQLTemp + ' PRIMARY KEY';
|
||||
if i <> FieldDefs.Count - 1 then
|
||||
SqlTemp:=SqlTemp+ ' , ';
|
||||
SQLTemp := SQLTemp + ' , ';
|
||||
end;
|
||||
SqlTemp:=SqlTemp+');';
|
||||
SQLTemp := SQLTemp + ');';
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
writeln(' SQL: ',SqlTemp);
|
||||
WriteLn(' SQL: ',SqlTemp);
|
||||
{$endif}
|
||||
ExecSQL(SqlTemp);
|
||||
ExecSQL(SQLTemp);
|
||||
Result := FReturnCode = SQLITE_OK;
|
||||
end
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.ExecCallback(const ASql: String; UserData: Pointer = nil);
|
||||
procedure TCustomSqliteDataset.ExecCallback(const ASQL: String; UserData: Pointer = nil);
|
||||
var
|
||||
CallbackInfo: TCallbackInfo;
|
||||
begin
|
||||
@ -1577,7 +1575,7 @@ begin
|
||||
GetSqliteHandle;
|
||||
CallbackInfo.Data := UserData;
|
||||
CallbackInfo.Proc := FOnCallback;
|
||||
SqliteExec(PChar(ASql),@CallbackDispatcher,@CallbackInfo);
|
||||
SqliteExec(PChar(ASQL), @CallbackDispatcher, @CallbackInfo);
|
||||
end;
|
||||
|
||||
|
||||
@ -1649,14 +1647,14 @@ begin
|
||||
(FAddedItems.Count > 0) or (FDeletedItems.Count > 0);
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.QuickQuery(const ASql:String):String;
|
||||
function TCustomSqliteDataset.QuickQuery(const ASQL: String): String;
|
||||
begin
|
||||
Result:=QuickQuery(ASql,nil,False);
|
||||
Result := QuickQuery(ASQL, nil, False);
|
||||
end;
|
||||
|
||||
function TCustomSqliteDataset.QuickQuery(const ASql:String;const AStrList: TStrings):String;
|
||||
function TCustomSqliteDataset.QuickQuery(const ASQL: String; const AStrList: TStrings): String;
|
||||
begin
|
||||
Result:=QuickQuery(ASql,AStrList,False)
|
||||
Result := QuickQuery(ASQL, AStrList, False)
|
||||
end;
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
unit sqlite3ds;
|
||||
unit Sqlite3DS;
|
||||
|
||||
{
|
||||
This is TSqlite3Dataset, a TDataset descendant class for use with fpc compiler
|
||||
@ -33,19 +33,19 @@ unit sqlite3ds;
|
||||
|
||||
{$mode objfpc}
|
||||
{$H+}
|
||||
{ $Define DEBUG}
|
||||
{.$Define DEBUG_SQLITEDS}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, customsqliteds;
|
||||
Classes, SysUtils, CustomSqliteDS;
|
||||
|
||||
type
|
||||
{ TSqlite3Dataset }
|
||||
|
||||
TSqlite3Dataset = class(TCustomSqliteDataset)
|
||||
private
|
||||
function SqliteExec(ASql:PChar; ACallback: TSqliteCdeclCallback; Data: Pointer):Integer;override;
|
||||
function SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; override;
|
||||
function InternalGetHandle: Pointer; override;
|
||||
function GetSqliteVersion: String; override;
|
||||
procedure InternalCloseHandle; override;
|
||||
@ -54,9 +54,9 @@ type
|
||||
procedure InternalInitFieldDefs; override;
|
||||
function GetRowsAffected:Integer; override;
|
||||
public
|
||||
procedure ExecuteDirect(const ASql: String);override;
|
||||
procedure ExecuteDirect(const ASQL: String); override;
|
||||
function ReturnString: String; override;
|
||||
function QuickQuery(const ASql:String;const AStrList: TStrings;FillObjects:Boolean):String;override;
|
||||
function QuickQuery(const ASQL: String; const AStrList: TStrings; FillObjects: Boolean): String; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -101,7 +101,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetAutoIncValue(NextValue: Pointer; Columns: Integer; ColumnValues: PPChar; ColumnNames: PPChar): integer; cdecl;
|
||||
function GetAutoIncValue(NextValue: Pointer; Columns: Integer; ColumnValues: PPChar; ColumnNames: PPChar): Integer; cdecl;
|
||||
var
|
||||
CodeError, TempInt: Integer;
|
||||
begin
|
||||
@ -118,9 +118,9 @@ end;
|
||||
|
||||
{ TSqlite3Dataset }
|
||||
|
||||
function TSqlite3Dataset.SqliteExec(ASql: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer;
|
||||
function TSqlite3Dataset.SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer;
|
||||
begin
|
||||
Result:=sqlite3_exec(FSqliteHandle, ASql, ACallback, Data, nil);
|
||||
Result := sqlite3_exec(FSqliteHandle, ASQL, ACallback, Data, nil);
|
||||
end;
|
||||
|
||||
procedure TSqlite3Dataset.InternalCloseHandle;
|
||||
@ -144,7 +144,7 @@ begin
|
||||
FReturnCode := sqlite3_prepare(Result, CheckFileSql, -1, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
begin
|
||||
ErrorStr := SqliteCode2Str(FReturnCode) + ' - ' + sqlite3_errmsg(Result);;
|
||||
ErrorStr := SqliteCode2Str(FReturnCode) + ' - ' + sqlite3_errmsg(Result);
|
||||
sqlite3_close(Result);
|
||||
DatabaseError(ErrorStr, Self);
|
||||
end;
|
||||
@ -160,12 +160,12 @@ var
|
||||
i, ColumnCount: Integer;
|
||||
AType: TFieldType;
|
||||
begin
|
||||
{$ifdef DEBUG}
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
WriteLn('##TSqlite3Dataset.InternalInitFieldDefs##');
|
||||
{$endif}
|
||||
FAutoIncFieldNo := -1;
|
||||
FieldDefs.Clear;
|
||||
FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FSql), -1, @vm, nil);
|
||||
FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FSQL), -1, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString, Self);
|
||||
sqlite3_step(vm);
|
||||
@ -238,17 +238,17 @@ begin
|
||||
FieldDefs.Add(String(sqlite3_column_name(vm, i)), AType, FieldSizeMap[AType = ftString]);
|
||||
//Set the pchar2sql function
|
||||
if AType in [ftString, ftMemo] then
|
||||
FGetSqlStr[i] := @Char2SqlStr
|
||||
FGetSqlStr[i] := @Char2SQLStr
|
||||
else
|
||||
FGetSqlStr[i] := @Num2SqlStr;
|
||||
{$ifdef DEBUG}
|
||||
writeln(' Field[',i,'] Name: ', sqlite3_column_name(vm,i));
|
||||
writeln(' Field[',i,'] Type: ', sqlite3_column_decltype(vm,i));
|
||||
FGetSqlStr[i] := @Num2SQLStr;
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
WriteLn(' Field[', i, '] Name: ', sqlite3_column_name(vm, i));
|
||||
WriteLn(' Field[', i, '] Type: ', sqlite3_column_decltype(vm, i));
|
||||
{$endif}
|
||||
end;
|
||||
sqlite3_finalize(vm);
|
||||
{$ifdef DEBUG}
|
||||
writeln(' FieldDefs.Count: ', FieldDefs.Count);
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
WriteLn(' FieldDefs.Count: ', FieldDefs.Count);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
@ -257,11 +257,11 @@ begin
|
||||
Result := sqlite3_changes(FSqliteHandle);
|
||||
end;
|
||||
|
||||
procedure TSqlite3Dataset.ExecuteDirect(const ASql: String);
|
||||
procedure TSqlite3Dataset.ExecuteDirect(const ASQL: String);
|
||||
var
|
||||
vm: Pointer;
|
||||
begin
|
||||
FReturnCode:=sqlite3_prepare(FSqliteHandle,Pchar(ASql),-1,@vm,nil);
|
||||
FReturnCode := sqlite3_prepare(FSqliteHandle, Pchar(ASQL), -1, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString, Self);
|
||||
FReturnCode := sqlite3_step(vm);
|
||||
@ -276,10 +276,10 @@ var
|
||||
begin
|
||||
//Get AutoInc Field initial value
|
||||
if FAutoIncFieldNo <> -1 then
|
||||
sqlite3_exec(FSqliteHandle,PChar('Select Max('+Fields[FAutoIncFieldNo].FieldName+') from ' + FTableName),
|
||||
@GetAutoIncValue,@FNextAutoInc,nil);
|
||||
sqlite3_exec(FSqliteHandle, PChar('Select Max(' + Fields[FAutoIncFieldNo].FieldName +
|
||||
') from ' + FTableName), @GetAutoIncValue, @FNextAutoInc, nil);
|
||||
|
||||
FReturnCode:=sqlite3_prepare(FSqliteHandle,Pchar(FSql),-1,@vm,nil);
|
||||
FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FSQL), -1, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString, Self);
|
||||
|
||||
@ -327,7 +327,7 @@ begin
|
||||
Result := String(sqlite3_version());
|
||||
end;
|
||||
|
||||
function TSqlite3Dataset.QuickQuery(const ASql:String;const AStrList: TStrings;FillObjects:Boolean):String;
|
||||
function TSqlite3Dataset.QuickQuery(const ASQL: String; const AStrList: TStrings; FillObjects:Boolean): String;
|
||||
var
|
||||
vm: Pointer;
|
||||
|
||||
@ -343,7 +343,8 @@ var
|
||||
begin
|
||||
while FReturnCode = SQLITE_ROW do
|
||||
begin
|
||||
AStrList.AddObject(String(sqlite3_column_text(vm,0)), TObject(PtrInt(sqlite3_column_int(vm,1))));
|
||||
AStrList.AddObject(String(sqlite3_column_text(vm, 0)),
|
||||
TObject(PtrInt(sqlite3_column_int(vm, 1))));
|
||||
FReturnCode := sqlite3_step(vm);
|
||||
end;
|
||||
end;
|
||||
@ -351,7 +352,7 @@ begin
|
||||
if FSqliteHandle = nil then
|
||||
GetSqliteHandle;
|
||||
Result := '';
|
||||
FReturnCode := sqlite3_prepare(FSqliteHandle,Pchar(ASql), -1, @vm, nil);
|
||||
FReturnCode := sqlite3_prepare(FSqliteHandle,Pchar(ASQL), -1, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString, Self);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
unit sqliteds;
|
||||
unit SqliteDS;
|
||||
|
||||
{
|
||||
This is TSqliteDataset, a TDataset descendant class for use with fpc compiler
|
||||
@ -33,19 +33,19 @@ unit sqliteds;
|
||||
|
||||
{$mode objfpc}
|
||||
{$H+}
|
||||
{ $Define DEBUG}
|
||||
{.$Define DEBUG_SQLITEDS}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, customsqliteds;
|
||||
Classes, SysUtils, CustomSqliteDS;
|
||||
|
||||
type
|
||||
{ TSqliteDataset }
|
||||
|
||||
TSqliteDataset = class(TCustomSqliteDataset)
|
||||
private
|
||||
function SqliteExec(ASql:PChar; ACallback: TSqliteCdeclCallback; Data: Pointer):Integer;override;
|
||||
function SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; override;
|
||||
function InternalGetHandle: Pointer; override;
|
||||
function GetSqliteEncoding: String;
|
||||
function GetSqliteVersion: String; override;
|
||||
@ -55,9 +55,9 @@ type
|
||||
procedure InternalInitFieldDefs; override;
|
||||
function GetRowsAffected:Integer; override;
|
||||
public
|
||||
procedure ExecuteDirect(const ASql: String);override;
|
||||
procedure ExecuteDirect(const ASQL: String); override;
|
||||
function ReturnString: String; override;
|
||||
function QuickQuery(const ASql:String;const AStrList: TStrings;FillObjects:Boolean):String;override;
|
||||
function QuickQuery(const ASQL: String; const AStrList: TStrings; FillObjects: Boolean): String; override;
|
||||
property SqliteEncoding: String read GetSqliteEncoding;
|
||||
end;
|
||||
|
||||
@ -68,7 +68,7 @@ uses
|
||||
|
||||
//function sqlite_last_statement_changes(dbhandle:Pointer):longint;cdecl;external 'sqlite' name 'sqlite_last_statement_changes';
|
||||
|
||||
function GetAutoIncValue(NextValue: Pointer; Columns: Integer; ColumnValues: PPChar; ColumnNames: PPChar): integer; cdecl;
|
||||
function GetAutoIncValue(NextValue: Pointer; Columns: Integer; ColumnValues: PPChar; ColumnNames: PPChar): Integer; cdecl;
|
||||
var
|
||||
CodeError, TempInt: Integer;
|
||||
begin
|
||||
@ -85,9 +85,9 @@ end;
|
||||
|
||||
{ TSqliteDataset }
|
||||
|
||||
function TSqliteDataset.SqliteExec(ASql: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer;
|
||||
function TSqliteDataset.SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer;
|
||||
begin
|
||||
Result:=sqlite_exec(FSqliteHandle, ASql, ACallback, Data, nil);
|
||||
Result := sqlite_exec(FSqliteHandle, ASQL, ACallback, Data, nil);
|
||||
end;
|
||||
|
||||
procedure TSqliteDataset.InternalCloseHandle;
|
||||
@ -118,7 +118,7 @@ var
|
||||
begin
|
||||
FieldDefs.Clear;
|
||||
FAutoIncFieldNo := -1;
|
||||
FReturnCode := sqlite_compile(FSqliteHandle,PChar(FSql),nil,@vm,nil);
|
||||
FReturnCode := sqlite_compile(FSqliteHandle, PChar(FSQL), nil, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString, Self);
|
||||
sqlite_step(vm, @ColumnCount, @ColumnValues, @ColumnNames);
|
||||
@ -189,9 +189,9 @@ begin
|
||||
FieldDefs.Add(String(ColumnNames[i]), AType);
|
||||
//Set the pchar2sql function
|
||||
if AType in [ftString, ftMemo] then
|
||||
FGetSqlStr[i]:=@Char2SqlStr
|
||||
FGetSqlStr[i] := @Char2SQLStr
|
||||
else
|
||||
FGetSqlStr[i]:=@Num2SqlStr;
|
||||
FGetSqlStr[i] := @Num2SQLStr;
|
||||
end;
|
||||
sqlite_finalize(vm, nil);
|
||||
{
|
||||
@ -206,13 +206,13 @@ begin
|
||||
//Result := sqlite_last_statement_changes(FSqliteHandle);
|
||||
end;
|
||||
|
||||
procedure TSqliteDataset.ExecuteDirect(const ASql: String);
|
||||
procedure TSqliteDataset.ExecuteDirect(const ASQL: String);
|
||||
var
|
||||
vm: Pointer;
|
||||
ColumnNames, ColumnValues: PPChar;
|
||||
ColCount: Integer;
|
||||
begin
|
||||
FReturnCode:=sqlite_compile(FSqliteHandle,Pchar(ASql),nil,@vm,nil);
|
||||
FReturnCode := sqlite_compile(FSqliteHandle, Pchar(ASQL), nil, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString,Self);
|
||||
|
||||
@ -233,7 +233,7 @@ begin
|
||||
sqlite_exec(FSqliteHandle, PChar('Select Max(' + Fields[FAutoIncFieldNo].FieldName + ') from ' + FTableName),
|
||||
@GetAutoIncValue, @FNextAutoInc, nil);
|
||||
|
||||
FReturnCode:=sqlite_compile(FSqliteHandle,Pchar(FSql),nil,@vm,nil);
|
||||
FReturnCode := sqlite_compile(FSqliteHandle, PChar(FSQL), nil, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString, Self);
|
||||
|
||||
@ -298,8 +298,16 @@ begin
|
||||
SQLITE_AUTH : Result := 'SQLITE_AUTH';
|
||||
SQLITE_FORMAT : Result := 'SQLITE_FORMAT';
|
||||
SQLITE_RANGE : Result := 'SQLITE_RANGE';
|
||||
SQLITE_ROW : begin Result := 'SQLITE_ROW - not an error'; Exit; end;
|
||||
SQLITE_DONE : begin Result := 'SQLITE_DONE - not an error'; Exit; end;
|
||||
SQLITE_ROW :
|
||||
begin
|
||||
Result := 'SQLITE_ROW - not an error';
|
||||
Exit;
|
||||
end;
|
||||
SQLITE_DONE :
|
||||
begin
|
||||
Result := 'SQLITE_DONE - not an error';
|
||||
Exit;
|
||||
end;
|
||||
else
|
||||
Result := 'Unknow Return Value';
|
||||
end;
|
||||
@ -316,7 +324,7 @@ begin
|
||||
Result := String(sqlite_version);
|
||||
end;
|
||||
|
||||
function TSqliteDataset.QuickQuery(const ASql:String;const AStrList: TStrings;FillObjects:Boolean):String;
|
||||
function TSqliteDataset.QuickQuery(const ASQL: String; const AStrList: TStrings; FillObjects: Boolean): String;
|
||||
var
|
||||
vm: Pointer;
|
||||
ColumnNames, ColumnValues: PPChar;
|
||||
@ -335,7 +343,8 @@ var
|
||||
while FReturnCode = SQLITE_ROW do
|
||||
begin
|
||||
// I know, this code is really dirty!!
|
||||
AStrList.AddObject(String(ColumnValues[0]), TObject(PtrInt(StrToInt(String(ColumnValues[1])))));
|
||||
AStrList.AddObject(String(ColumnValues[0]),
|
||||
TObject(PtrInt(StrToInt(String(ColumnValues[1])))));
|
||||
FReturnCode := sqlite_step(vm, @ColCount, @ColumnValues, @ColumnNames);
|
||||
end;
|
||||
end;
|
||||
@ -343,7 +352,7 @@ begin
|
||||
if FSqliteHandle = nil then
|
||||
GetSqliteHandle;
|
||||
Result := '';
|
||||
FReturnCode := sqlite_compile(FSqliteHandle, PChar(ASql), nil, @vm, nil);
|
||||
FReturnCode := sqlite_compile(FSqliteHandle, PChar(ASQL), nil, @vm, nil);
|
||||
if FReturnCode <> SQLITE_OK then
|
||||
DatabaseError(ReturnString,Self);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user