* Implemented DataConvert, bug #8204

git-svn-id: trunk@6354 -
This commit is contained in:
joost 2007-02-07 11:13:10 +00:00
parent 99b15e95a1
commit 370f7737b6
2 changed files with 38 additions and 10 deletions

View File

@ -497,26 +497,53 @@ begin
Result := False; Result := False;
end; end;
procedure TDataSet.DataConvert(aField: TField; aSource, aDest: Pointer;
aToNative: Boolean);
var
DT : TFieldType;
begin
DT := aField.DataType;
case DT of
ftDate, ftTime, ftDateTime: TDateTime(aDest^) := DateTimeRecToDateTime(DT, TDateTimeRec(aSource^));
ftTimeStamp : TTimeStamp(aDest^) := TTimeStamp(aSource^);
// ftBCD : ;
// ftFMTBCD : ;
// ftBytes : ;
// ftVarBytes : ;
// ftWideString : ;
end;
end;
function TDataSet.GetFieldData(Field: TField; Buffer: Pointer; function TDataSet.GetFieldData(Field: TField; Buffer: Pointer;
NativeFormat: Boolean): Boolean; NativeFormat: Boolean): Boolean;
Var Var
DT : TFieldType; AStatBuffer : Array[0..dsMaxStringSize] of Char;
DTRBuffer : TDateTimeRec; ADynBuffer : pchar;
begin begin
If NativeFormat then If NativeFormat then
Result:=GetFieldData(Field, Buffer) Result:=GetFieldData(Field, Buffer)
else else
begin begin
DT := Field.DataType; if Field.DataSize <= dsMaxStringSize then
case DT of begin
ftDate, ftTime, ftDateTime: begin Result := GetfieldData(Field, @AStatBuffer);
Result := GetfieldData(Field, @DTRBuffer); if Result then DataConvert(Field,@AStatBuffer,Buffer,False);
TDateTime(buffer^) := DateTimeRecToDateTime(DT, DTRBuffer); end
end
else else
Result:=GetFieldData(Field, Buffer) begin
end; GetMem(ADynBuffer,Field.DataSize);
try
Result := GetfieldData(Field, ADynBuffer);
if Result then DataConvert(Field,ADynBuffer,Buffer,False);
finally
FreeMem(ADynBuffer);
end;
end;
end; end;
end; end;

View File

@ -1150,6 +1150,7 @@ type
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint; virtual; function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint; virtual;
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual; function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual;
procedure CursorPosChanged; procedure CursorPosChanged;
procedure DataConvert(aField: TField; aSource, aDest: Pointer; aToNative: Boolean); virtual;
procedure Delete; procedure Delete;
procedure DisableControls; procedure DisableControls;
procedure Edit; procedure Edit;