尽管有一些关于数据集过滤的文档,但仅概述了语法细节。在我的应用程序中,我想使用数据集过滤器过滤人名。通常这工作得非常快,但我偶然发现了一个小问题过滤,例如TClientDataset
. 如何为变音符号添加类似过滤器?表达方式
[X] LIKE 'Ö%'
(对于给定的字段X
)不起作用(与表达式相反[X] LIKE 'A%'
)。这只是一个错误还是我需要在某处设置字符集/编码?
最小的例子:
procedure TForm1.FormCreate(Sender: TObject);
var
LField: TFieldDef;
LCDs: TClientDataSet;
const
SAMPLE_CHAR: string = 'Ö';
begin
LCds := TClientDataSet.Create(Self);
LField := LCds.FieldDefs.AddFieldDef();
LField.DataType := ftString;
LField.Size := 10;
LField.Name := 'X';
LCDs.CreateDataSet;
LCDs.Append;
LCDs.FieldByName('X').AsString := SAMPLE_CHAR;
LCDs.Post;
ShowMessage(LCds.FieldByName('X').AsString);
LCds.Filter := '[X] LIKE ' + QuotedStr(SAMPLE_CHAR + '%');
LCds.Filtered := true;
ShowMessage(LCds.FieldByName('X').AsString);
end;
第一个消息框显示Ö
,而第二个消息框为空。如果您SAMPLE_CHAR
从更改Ö
为A
,两个消息框都会显示A
。