Browse Source

* Allow searching and filtering on ftFixedWidth fields
* Improved error message for fieldtypes for which searching and filtering are not available

git-svn-id: trunk@14787 -

joost 15 years ago
parent
commit
00f42cbdf1

+ 2 - 2
packages/fcl-db/src/base/bufdataset.pas

@@ -1323,7 +1323,7 @@ end;
 procedure TBufDataset.ProcessFieldCompareStruct(AField: TField; var ACompareRec : TDBCompareRec);
 procedure TBufDataset.ProcessFieldCompareStruct(AField: TField; var ACompareRec : TDBCompareRec);
 begin
 begin
   case AField.DataType of
   case AField.DataType of
-    ftString : ACompareRec.Comparefunc := @DBCompareText;
+    ftString, ftFixedChar : ACompareRec.Comparefunc := @DBCompareText;
     ftSmallint : ACompareRec.Comparefunc := @DBCompareSmallInt;
     ftSmallint : ACompareRec.Comparefunc := @DBCompareSmallInt;
     ftInteger, ftBCD : ACompareRec.Comparefunc :=
     ftInteger, ftBCD : ACompareRec.Comparefunc :=
       @DBCompareInt;
       @DBCompareInt;
@@ -1334,7 +1334,7 @@ begin
       @DBCompareDouble;
       @DBCompareDouble;
     ftLargeint : ACompareRec.Comparefunc := @DBCompareLargeInt;
     ftLargeint : ACompareRec.Comparefunc := @DBCompareLargeInt;
   else
   else
-    DatabaseErrorFmt(SErrIndexBasedOnInvField, [Fieldtypenames[AField.DataType]]);
+    DatabaseErrorFmt(SErrIndexBasedOnInvField, [AField.FieldName,Fieldtypenames[AField.DataType]]);
   end;
   end;
 
 
   ACompareRec.Off1:=sizeof(TBufRecLinkItem)*FMaxIndexesCount+
   ACompareRec.Off1:=sizeof(TBufRecLinkItem)*FMaxIndexesCount+

+ 2 - 2
packages/fcl-db/src/base/bufdataset_parser.pp

@@ -373,7 +373,7 @@ begin
 
 
   // define field in parser
   // define field in parser
   case FieldInfo.DataType of
   case FieldInfo.DataType of
-    ftString:
+    ftString, ftFixedChar:
       begin
       begin
       TempFieldVar := TStringFieldVar.Create(FieldInfo);
       TempFieldVar := TStringFieldVar.Create(FieldInfo);
       TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
       TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
@@ -405,7 +405,7 @@ begin
         TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
         TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
       end;
       end;
   else
   else
-    raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName]);
+    raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName,Fieldtypenames[FieldInfo.DataType]]);
   end;
   end;
 
 
   // add to our own list
   // add to our own list

+ 1 - 1
packages/fcl-db/src/base/dbconst.pas

@@ -36,7 +36,7 @@ Resourcestring
   SErrTransAlreadyActive   = 'Transaction already active';
   SErrTransAlreadyActive   = 'Transaction already active';
   SErrTransactionnSet      = 'Transaction not set';
   SErrTransactionnSet      = 'Transaction not set';
   SErrIndexResultTooLong   = 'Index result for "%s" too long, >100 characters (%d).';
   SErrIndexResultTooLong   = 'Index result for "%s" too long, >100 characters (%d).';
-  SErrIndexBasedOnInvField = 'Field "%s" is an invalid field type to base index on.';
+  SErrIndexBasedOnInvField = 'Field "%s" has an invalid field type (%s) to base index on.';
   SErrIndexBasedOnUnkField = 'Index based on unknown field "%s".';
   SErrIndexBasedOnUnkField = 'Index based on unknown field "%s".';
   SErrConnTransactionnSet  = 'Transaction of connection not set';
   SErrConnTransactionnSet  = 'Transaction of connection not set';
   SErrNotASQLConnection    = '"%s" is not a TSQLConnection';
   SErrNotASQLConnection    = '"%s" is not a TSQLConnection';