4

我有一个 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”字段。

据我所知,问题在于单元中的方法TExprParser.SetExprParams无法DBCommon正确解析过滤器文本。

除了重命名列之外,我还能做些什么吗?

4

1 回答 1

3

对于非 ansi 字符,您应该使用带引号的标识符,每个数据库都有其默认值,在 MSSQL 中,它是大括号[ ],例如:[ PLACÓWKA ]

如果您不使用 MSSQL,您应该检查您的数据库文档以获取适当的引号字符。

于 2012-07-13T13:11:52.607 回答