summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-11-27 19:33:42 +0000
committerjoost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-11-27 19:33:42 +0000
commit1a3d1e68641c5a8d2d9fc2fd2eba292701f60d63 (patch)
tree67f9660d7df0024806072c581417136c01cbc70d
parentc81b929ae888a237c76e51be913bdf0beb3a5404 (diff)
downloadfpc-1a3d1e68641c5a8d2d9fc2fd2eba292701f60d63.tar.gz
* Implemented TDataset.Dataconvert for WideStrings
* Reverted r11612, see bug 11706 * Raise exception if TDataset.Locate is called for an unidirectional dataset git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@12254 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/fcl-db/src/base/dataset.inc30
-rw-r--r--packages/fcl-db/src/base/fields.inc4
2 files changed, 25 insertions, 9 deletions
diff --git a/packages/fcl-db/src/base/dataset.inc b/packages/fcl-db/src/base/dataset.inc
index 6bf2fd8c0e..8bee42e243 100644
--- a/packages/fcl-db/src/base/dataset.inc
+++ b/packages/fcl-db/src/base/dataset.inc
@@ -537,10 +537,27 @@ end;
procedure TDataSet.DataConvert(aField: TField; aSource, aDest: Pointer;
aToNative: Boolean);
-
+
+ // There seems to be no WStrCopy defined, this is a copy of
+ // the generic StrCopy function, adapted for WideChar.
+ Function WStrCopy(Dest, Source:PWideChar): PWideChar;
+ var
+ counter : SizeInt;
+ Begin
+ counter := 0;
+ while Source[counter] <> #0 do
+ begin
+ Dest[counter] := char(Source[counter]);
+ Inc(counter);
+ end;
+ { terminate the string }
+ Dest[counter] := #0;
+ WStrCopy := Dest;
+ end;
+
var
DT : TFieldType;
-
+
begin
DT := aField.DataType;
if aToNative then
@@ -550,11 +567,10 @@ begin
ftTimeStamp : TTimeStamp(aDest^) := TTimeStamp(aSource^);
ftBCD : TBCD(aDest^) := CurrToBCD(Currency(aSource^));
ftFMTBCD : TBcd(aDest^) := TBcd(aSource^);
- // See notes from mantis bug-report 7204 for more information
+ // See notes from mantis bug-report 8204 for more information
// ftBytes : ;
// ftVarBytes : ;
- // ftWideString : ;
-
+ ftWideString : WStrCopy(PWideChar(aDest), PWideChar(aSource));
end
end
else
@@ -566,8 +582,7 @@ begin
ftFMTBCD : TBcd(aDest^) := TBcd(aSource^);
// ftBytes : ;
// ftVarBytes : ;
- // ftWideString : ;
-
+ ftWideString : WStrCopy(PWideChar(aDest), PWideChar(aSource));
end
end
end;
@@ -2292,6 +2307,7 @@ end;
Function TDataset.Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;
begin
+ CheckBiDirectional;
Result := False;
end;
diff --git a/packages/fcl-db/src/base/fields.inc b/packages/fcl-db/src/base/fields.inc
index 44cdfc82a6..b7c458c573 100644
--- a/packages/fcl-db/src/base/fields.inc
+++ b/packages/fcl-db/src/base/fields.inc
@@ -1179,12 +1179,12 @@ var
Buffer : PWideChar;
begin
if DataSize <= dsMaxStringSize then begin
- Result := GetData(@FixBuffer, True);
+ Result := GetData(@FixBuffer, False);
aValue := FixBuffer;
end else begin
SetLength(DynBuffer, Succ(Size));
Buffer := PWideChar(DynBuffer);
- Result := GetData(Buffer, True);
+ Result := GetData(Buffer, False);
if Result then
aValue := Buffer;
end;