mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-14 14:29:14 +02:00
* Refactor InternalInitFieldDefs to allow retrieve the FieldDefs without opening the dataset (Fix InitFieldDefs)
git-svn-id: trunk@12750 -
This commit is contained in:
parent
9039afdead
commit
d69d875d2a
@ -149,6 +149,7 @@ type
|
||||
function GetMasterSource: TDataSource;
|
||||
procedure SetFileName(const Value: String);
|
||||
function GetRowsAffected: Integer; virtual; abstract;
|
||||
procedure RetrieveFieldDefs; virtual; abstract;
|
||||
//TDataSet overrides
|
||||
function AllocRecordBuffer: PChar; override;
|
||||
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
|
||||
@ -169,6 +170,7 @@ type
|
||||
procedure InternalEdit; override;
|
||||
procedure InternalFirst; override;
|
||||
procedure InternalGotoBookmark(ABookmark: Pointer); override;
|
||||
procedure InternalInitFieldDefs; override;
|
||||
procedure InternalInitRecord(Buffer: PChar); override;
|
||||
procedure InternalLast; override;
|
||||
procedure InternalOpen; override;
|
||||
@ -817,6 +819,25 @@ begin
|
||||
FCurrentItem := PDataRecord(ABookmark^);
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.InternalInitFieldDefs;
|
||||
begin
|
||||
//todo: retrieve only necessary fields
|
||||
if FMasterLink.DataSource <> nil then
|
||||
FSQL := 'Select * from ' + FTableName + ';'; //forced to obtain all fields
|
||||
|
||||
if FSQL = '' then
|
||||
begin
|
||||
if FTablename = '' then
|
||||
DatabaseError('Tablename not set', Self);
|
||||
FSQL := 'Select * from ' + FTableName + ';';
|
||||
end;
|
||||
|
||||
if FSqliteHandle = nil then
|
||||
GetSqliteHandle;
|
||||
|
||||
RetrieveFieldDefs;
|
||||
end;
|
||||
|
||||
procedure TCustomSqliteDataset.InternalInitRecord(Buffer: PChar);
|
||||
var
|
||||
TempStr: String;
|
||||
@ -840,20 +861,6 @@ procedure TCustomSqliteDataset.InternalOpen;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
//todo: retrieve only necessary fields
|
||||
if FMasterLink.DataSource <> nil then
|
||||
FSQL := 'Select * from ' + FTableName + ';'; //forced to obtain all fields
|
||||
|
||||
if FSQL = '' then
|
||||
begin
|
||||
if FTablename = '' then
|
||||
DatabaseError('Tablename not set',Self);
|
||||
FSQL := 'Select * from '+FTableName+';';
|
||||
end;
|
||||
|
||||
if FSqliteHandle = nil then
|
||||
GetSqliteHandle;
|
||||
|
||||
InternalInitFieldDefs;
|
||||
//todo: move this to InitFieldDefs
|
||||
FSelectSqlStr := 'SELECT ';
|
||||
|
@ -51,8 +51,8 @@ type
|
||||
procedure InternalCloseHandle; override;
|
||||
procedure BuildLinkedList; override;
|
||||
protected
|
||||
procedure InternalInitFieldDefs; override;
|
||||
function GetRowsAffected:Integer; override;
|
||||
procedure RetrieveFieldDefs; override;
|
||||
public
|
||||
procedure ExecuteDirect(const ASQL: String); override;
|
||||
function ReturnString: String; override;
|
||||
@ -151,7 +151,7 @@ begin
|
||||
sqlite3_finalize(vm);
|
||||
end;
|
||||
|
||||
procedure TSqlite3Dataset.InternalInitFieldDefs;
|
||||
procedure TSqlite3Dataset.RetrieveFieldDefs;
|
||||
const
|
||||
FieldSizeMap: array[Boolean] of Integer = (0, dsMaxStringSize);
|
||||
var
|
||||
|
@ -52,7 +52,7 @@ type
|
||||
procedure InternalCloseHandle; override;
|
||||
procedure BuildLinkedList; override;
|
||||
protected
|
||||
procedure InternalInitFieldDefs; override;
|
||||
procedure RetrieveFieldDefs; override;
|
||||
function GetRowsAffected:Integer; override;
|
||||
public
|
||||
procedure ExecuteDirect(const ASQL: String); override;
|
||||
@ -108,7 +108,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSqliteDataset.InternalInitFieldDefs;
|
||||
procedure TSqliteDataset.RetrieveFieldDefs;
|
||||
var
|
||||
ColumnCount, i:Integer;
|
||||
AType: TFieldType;
|
||||
|
Loading…
Reference in New Issue
Block a user