mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 05:49:12 +02:00
fcl-db: Introduce TArrayField. Only essential parts (added new object properties according to Delphi documentation). Some code taken from FreeCLX project (https://sourceforge.net/projects/freeclx/)
git-svn-id: trunk@49085 -
This commit is contained in:
parent
8ec71bc810
commit
89fc5b7f8d
@ -881,6 +881,12 @@ begin
|
|||||||
FFieldDefs.Assign(AFieldDefs);
|
FFieldDefs.Assign(AFieldDefs);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TDataSet.SetSparseArrays(AValue: Boolean);
|
||||||
|
begin
|
||||||
|
CheckInactive;
|
||||||
|
FSparseArrays := AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TDataSet.DoInsertAppendRecord(const Values: array of const; DoAppend : boolean);
|
procedure TDataSet.DoInsertAppendRecord(const Values: array of const; DoAppend : boolean);
|
||||||
var i : integer;
|
var i : integer;
|
||||||
ValuesSize : integer;
|
ValuesSize : integer;
|
||||||
|
@ -1131,6 +1131,14 @@ type
|
|||||||
property ObjectType: string read FObjectType write FObjectType;
|
property ObjectType: string read FObjectType write FObjectType;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TArrayField }
|
||||||
|
|
||||||
|
TArrayField = class(TObjectField)
|
||||||
|
private
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TIndexDef }
|
{ TIndexDef }
|
||||||
|
|
||||||
TIndexDefs = class;
|
TIndexDefs = class;
|
||||||
@ -1599,6 +1607,7 @@ type
|
|||||||
FOnPostError: TDataSetErrorEvent;
|
FOnPostError: TDataSetErrorEvent;
|
||||||
FRecordCount: Longint;
|
FRecordCount: Longint;
|
||||||
FIsUniDirectional: Boolean;
|
FIsUniDirectional: Boolean;
|
||||||
|
FSparseArrays: Boolean;
|
||||||
FState : TDataSetState;
|
FState : TDataSetState;
|
||||||
FInternalOpenComplete: Boolean;
|
FInternalOpenComplete: Boolean;
|
||||||
Procedure DoInsertAppend(DoAppend : Boolean);
|
Procedure DoInsertAppend(DoAppend : Boolean);
|
||||||
@ -1619,6 +1628,7 @@ type
|
|||||||
Procedure UpdateFieldDefs;
|
Procedure UpdateFieldDefs;
|
||||||
procedure SetBlockReadSize(AValue: Integer); virtual;
|
procedure SetBlockReadSize(AValue: Integer); virtual;
|
||||||
Procedure SetFieldDefs(AFieldDefs: TFieldDefs);
|
Procedure SetFieldDefs(AFieldDefs: TFieldDefs);
|
||||||
|
procedure SetSparseArrays(AValue: Boolean);
|
||||||
procedure DoInsertAppendRecord(const Values: array of const; DoAppend : boolean);
|
procedure DoInsertAppendRecord(const Values: array of const; DoAppend : boolean);
|
||||||
protected
|
protected
|
||||||
procedure RecalcBufListSize;
|
procedure RecalcBufListSize;
|
||||||
@ -1843,6 +1853,7 @@ type
|
|||||||
property RecordCount: Longint read GetRecordCount;
|
property RecordCount: Longint read GetRecordCount;
|
||||||
property RecNo: Longint read GetRecNo write SetRecNo;
|
property RecNo: Longint read GetRecNo write SetRecNo;
|
||||||
property RecordSize: Word read GetRecordSize;
|
property RecordSize: Word read GetRecordSize;
|
||||||
|
property SparseArrays: Boolean read FSparseArrays write SetSparseArrays;
|
||||||
property State: TDataSetState read FState;
|
property State: TDataSetState read FState;
|
||||||
property Fields : TFields read FFieldList;
|
property Fields : TFields read FFieldList;
|
||||||
property FieldValues[FieldName : string] : Variant read GetFieldValues write SetFieldValues; default;
|
property FieldValues[FieldName : string] : Variant read GetFieldValues write SetFieldValues; default;
|
||||||
@ -2340,7 +2351,7 @@ const
|
|||||||
{ ftWideString} TWideStringField,
|
{ ftWideString} TWideStringField,
|
||||||
{ ftLargeint} TLargeIntField,
|
{ ftLargeint} TLargeIntField,
|
||||||
{ ftADT} Nil,
|
{ ftADT} Nil,
|
||||||
{ ftArray} Nil,
|
{ ftArray} TArrayField,
|
||||||
{ ftReference} Nil,
|
{ ftReference} Nil,
|
||||||
{ ftDataSet} Nil,
|
{ ftDataSet} Nil,
|
||||||
{ ftOraBlob} TBlobField,
|
{ ftOraBlob} TBlobField,
|
||||||
@ -2370,6 +2381,8 @@ const
|
|||||||
ftBlobTypes = [ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle,
|
ftBlobTypes = [ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle,
|
||||||
ftDBaseOle, ftTypedBinary, ftOraBlob, ftOraClob, ftWideMemo];
|
ftDBaseOle, ftTypedBinary, ftOraBlob, ftOraClob, ftWideMemo];
|
||||||
|
|
||||||
|
ObjectFieldTypes = [ftADT, ftArray, ftReference, ftDataSet];
|
||||||
|
|
||||||
var
|
var
|
||||||
LoginDialogExProc: function(const ADatabaseName: string; var AUserName, APassword: string; UserNameReadOnly: Boolean): Boolean = nil;
|
LoginDialogExProc: function(const ADatabaseName: string; var AUserName, APassword: string; UserNameReadOnly: Boolean): Boolean = nil;
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ end;
|
|||||||
function TFieldDef.CreateField(AOwner: TComponent; ParentField: TObjectField = nil; const FieldName: string = ''; CreateChildren: Boolean = True): TField;
|
function TFieldDef.CreateField(AOwner: TComponent; ParentField: TObjectField = nil; const FieldName: string = ''; CreateChildren: Boolean = True): TField;
|
||||||
|
|
||||||
var TheField : TFieldClass;
|
var TheField : TFieldClass;
|
||||||
i: integer;
|
i,n: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{$ifdef dsdebug}
|
{$ifdef dsdebug}
|
||||||
@ -156,10 +156,19 @@ begin
|
|||||||
TFmtBCDField(Result).Precision := FPrecision;
|
TFmtBCDField(Result).Precision := FPrecision;
|
||||||
|
|
||||||
if CreateChildren and HasChildDefs then
|
if CreateChildren and HasChildDefs then
|
||||||
begin
|
if DataType = ftArray then
|
||||||
for i := 0 to ChildDefs.Count - 1 do
|
begin
|
||||||
ChildDefs[i].CreateField(nil, TObjectField(Result), '');
|
if TFieldDefs(Collection).DataSet.SparseArrays then
|
||||||
end;
|
n := 1
|
||||||
|
else
|
||||||
|
n := Size; // created field for each array element
|
||||||
|
for i := 0 to n - 1 do
|
||||||
|
// all array elements are of same type
|
||||||
|
ChildDefs[0].CreateField(nil, TObjectField(Result), Format('%s[%d]', [Result.FieldName, i]));
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for i := 0 to ChildDefs.Count - 1 do
|
||||||
|
ChildDefs[i].CreateField(nil, TObjectField(Result), '');
|
||||||
except
|
except
|
||||||
Result.Free;
|
Result.Free;
|
||||||
Raise;
|
Raise;
|
||||||
@ -3783,6 +3792,15 @@ begin
|
|||||||
SetFieldValue(I, AValue[I]);
|
SetFieldValue(I, AValue[I]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TArrayField }
|
||||||
|
|
||||||
|
constructor TArrayField.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
SetDataType(ftArray);
|
||||||
|
Size := 10;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TFieldsEnumerator }
|
{ TFieldsEnumerator }
|
||||||
|
|
||||||
function TFieldsEnumerator.GetCurrent: TField;
|
function TFieldsEnumerator.GetCurrent: TField;
|
||||||
|
Loading…
Reference in New Issue
Block a user