diff options
author | joost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-11-27 19:33:42 +0000 |
---|---|---|
committer | joost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-11-27 19:33:42 +0000 |
commit | 1a3d1e68641c5a8d2d9fc2fd2eba292701f60d63 (patch) | |
tree | 67f9660d7df0024806072c581417136c01cbc70d | |
parent | c81b929ae888a237c76e51be913bdf0beb3a5404 (diff) | |
download | fpc-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.inc | 30 | ||||
-rw-r--r-- | packages/fcl-db/src/base/fields.inc | 4 |
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; |