* Refactor InternalInitFieldDefs to allow retrieve the FieldDefs without opening the dataset (Fix InitFieldDefs)

git-svn-id: trunk@12750 -
This commit is contained in:
blikblum 2009-02-19 13:32:54 +00:00
parent 9039afdead
commit d69d875d2a
3 changed files with 25 additions and 18 deletions

View File

@ -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 ';

View File

@ -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

View File

@ -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;