From 00f42cbdf18ba4b80a10d517ecb843b9360fea0d Mon Sep 17 00:00:00 2001 From: joost Date: Sat, 23 Jan 2010 23:21:47 +0000 Subject: [PATCH] * 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 - --- packages/fcl-db/src/base/bufdataset.pas | 4 ++-- packages/fcl-db/src/base/bufdataset_parser.pp | 4 ++-- packages/fcl-db/src/base/dbconst.pas | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/fcl-db/src/base/bufdataset.pas b/packages/fcl-db/src/base/bufdataset.pas index 5c719a82d5..a6a8c0e39a 100644 --- a/packages/fcl-db/src/base/bufdataset.pas +++ b/packages/fcl-db/src/base/bufdataset.pas @@ -1323,7 +1323,7 @@ end; procedure TBufDataset.ProcessFieldCompareStruct(AField: TField; var ACompareRec : TDBCompareRec); begin case AField.DataType of - ftString : ACompareRec.Comparefunc := @DBCompareText; + ftString, ftFixedChar : ACompareRec.Comparefunc := @DBCompareText; ftSmallint : ACompareRec.Comparefunc := @DBCompareSmallInt; ftInteger, ftBCD : ACompareRec.Comparefunc := @DBCompareInt; @@ -1334,7 +1334,7 @@ begin @DBCompareDouble; ftLargeint : ACompareRec.Comparefunc := @DBCompareLargeInt; else - DatabaseErrorFmt(SErrIndexBasedOnInvField, [Fieldtypenames[AField.DataType]]); + DatabaseErrorFmt(SErrIndexBasedOnInvField, [AField.FieldName,Fieldtypenames[AField.DataType]]); end; ACompareRec.Off1:=sizeof(TBufRecLinkItem)*FMaxIndexesCount+ diff --git a/packages/fcl-db/src/base/bufdataset_parser.pp b/packages/fcl-db/src/base/bufdataset_parser.pp index 27564b508f..c11a484ab6 100644 --- a/packages/fcl-db/src/base/bufdataset_parser.pp +++ b/packages/fcl-db/src/base/bufdataset_parser.pp @@ -373,7 +373,7 @@ begin // define field in parser case FieldInfo.DataType of - ftString: + ftString, ftFixedChar: begin TempFieldVar := TStringFieldVar.Create(FieldInfo); TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal); @@ -405,7 +405,7 @@ begin TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal); end; else - raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName]); + raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName,Fieldtypenames[FieldInfo.DataType]]); end; // add to our own list diff --git a/packages/fcl-db/src/base/dbconst.pas b/packages/fcl-db/src/base/dbconst.pas index dca2213107..5a46e235a2 100644 --- a/packages/fcl-db/src/base/dbconst.pas +++ b/packages/fcl-db/src/base/dbconst.pas @@ -36,7 +36,7 @@ Resourcestring SErrTransAlreadyActive = 'Transaction already active'; SErrTransactionnSet = 'Transaction not set'; 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".'; SErrConnTransactionnSet = 'Transaction of connection not set'; SErrNotASQLConnection = '"%s" is not a TSQLConnection';