* 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;
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;
NativeFormat: Boolean): Boolean;
Var
DT : TFieldType;
DTRBuffer : TDateTimeRec;
AStatBuffer : Array[0..dsMaxStringSize] of Char;
ADynBuffer : pchar;
begin
If NativeFormat then
Result:=GetFieldData(Field, Buffer)
else
begin
DT := Field.DataType;
case DT of
ftDate, ftTime, ftDateTime: begin
Result := GetfieldData(Field, @DTRBuffer);
TDateTime(buffer^) := DateTimeRecToDateTime(DT, DTRBuffer);
end
if Field.DataSize <= dsMaxStringSize then
begin
Result := GetfieldData(Field, @AStatBuffer);
if Result then DataConvert(Field,@AStatBuffer,Buffer,False);
end
else
Result:=GetFieldData(Field, Buffer)
end;
begin
GetMem(ADynBuffer,Field.DataSize);
try
Result := GetfieldData(Field, ADynBuffer);
if Result then DataConvert(Field,ADynBuffer,Buffer,False);
finally
FreeMem(ADynBuffer);
end;
end;
end;
end;

View File

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