我有一个 TClientDataset,它可能包含带有非 ASCII 字符的列名。看来我无法过滤此类列。下面是一个示例代码:
uses
DB, DBClient;
{$R *.dfm}
procedure TForm34.FormActivate(Sender: TObject);
var
MyDataset: TClientDataSet;
begin
MyDataset := TClientDataSet.Create(nil);
with MyDataset.FieldDefs.AddFieldDef do
begin
Name := 'PLACÓWKA';
DataType := ftString;
end;
MyDataset.CreateDataSet;
MyDataset.Open;
MyDataset.Append;
MyDataset.Fields[0].Value := 'Value_1';
MyDataset.Post;
MyDataset.Append;
MyDataset.Fields[0].Value := 'Value_2';
MyDataset.Post;
MyDataset.Filter := 'PLACÓWKA LIKE ''%Value_1%''';
MyDataset.Filtered := True; //Exception here: Field 'PLAC' not found
end;
设置后 MyDataset.Filtered := True
我收到异常,表示尚未找到字段“PLAC”。
据我所知,问题出在 DBCommon
单元中的方法 TExprParser.SetExprParams
中,该方法无法正确解析过滤器文本。
除了重命名列之外,我还能做些什么吗?
最佳答案
对于非 ansi 字符,您应该使用带引号的标识符,每个数据库都有其默认值,在 MSSQL 中它是大括号 [ ],例如:[ PLACÓWKA ]。
如果您不使用 MSSQL,您应该检查数据库文档以获取适当的引号字符。
关于delphi - TClientDataset - 是否可以按 unicode 列名称进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11451580/