Browse Source

* Implemented TDataset.Dataconvert for WideStrings
* Reverted r11612, see bug #11706
* Raise exception if TDataset.Locate is called for an unidirectional dataset

git-svn-id: trunk@12254 -

joost 16 years ago
parent
commit
e407bb5780
2 changed files with 25 additions and 9 deletions
  1. 23 7
      packages/fcl-db/src/base/dataset.inc
  2. 2 2
      packages/fcl-db/src/base/fields.inc

+ 23 - 7
packages/fcl-db/src/base/dataset.inc

@@ -537,10 +537,27 @@ end;
 
 
 procedure TDataSet.DataConvert(aField: TField; aSource, aDest: Pointer;
 procedure TDataSet.DataConvert(aField: TField; aSource, aDest: Pointer;
   aToNative: Boolean);
   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
 var
   DT : TFieldType;
   DT : TFieldType;
-  
+
 begin
 begin
   DT := aField.DataType;
   DT := aField.DataType;
   if aToNative then
   if aToNative then
@@ -550,11 +567,10 @@ begin
       ftTimeStamp               : TTimeStamp(aDest^) := TTimeStamp(aSource^);
       ftTimeStamp               : TTimeStamp(aDest^) := TTimeStamp(aSource^);
       ftBCD                     : TBCD(aDest^) := CurrToBCD(Currency(aSource^));
       ftBCD                     : TBCD(aDest^) := CurrToBCD(Currency(aSource^));
       ftFMTBCD                  : TBcd(aDest^) := TBcd(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                   : ;
   //    ftBytes                   : ;
   //    ftVarBytes                : ;
   //    ftVarBytes                : ;
-  //    ftWideString              : ;
-
+      ftWideString              : WStrCopy(PWideChar(aDest), PWideChar(aSource));
       end
       end
     end
     end
   else
   else
@@ -566,8 +582,7 @@ begin
       ftFMTBCD                  : TBcd(aDest^) := TBcd(aSource^);
       ftFMTBCD                  : TBcd(aDest^) := TBcd(aSource^);
   //    ftBytes                   : ;
   //    ftBytes                   : ;
   //    ftVarBytes                : ;
   //    ftVarBytes                : ;
-  //    ftWideString              : ;
-
+      ftWideString              : WStrCopy(PWideChar(aDest), PWideChar(aSource));
       end
       end
     end
     end
 end;
 end;
@@ -2292,6 +2307,7 @@ end;
 Function TDataset.Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;
 Function TDataset.Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;
 
 
 begin
 begin
+  CheckBiDirectional;
   Result := False;
   Result := False;
 end;
 end;
 
 

+ 2 - 2
packages/fcl-db/src/base/fields.inc

@@ -1179,12 +1179,12 @@ var
   Buffer    : PWideChar;
   Buffer    : PWideChar;
 begin
 begin
   if DataSize <= dsMaxStringSize then begin
   if DataSize <= dsMaxStringSize then begin
-    Result := GetData(@FixBuffer, True);
+    Result := GetData(@FixBuffer, False);
     aValue := FixBuffer;
     aValue := FixBuffer;
   end else begin
   end else begin
     SetLength(DynBuffer, Succ(Size));
     SetLength(DynBuffer, Succ(Size));
     Buffer := PWideChar(DynBuffer);
     Buffer := PWideChar(DynBuffer);
-    Result := GetData(Buffer, True);
+    Result := GetData(Buffer, False);
     if Result then
     if Result then
       aValue := Buffer;
       aValue := Buffer;
   end;
   end;