delphi - TClientDataset - 是否可以按 unicode 列名称进行过滤?

标签 delphi filter delphi-2009 tclientdataset

我有一个 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/

相关文章:

delphi - 为什么 TestComplete 这么慢?

以模态形式创建时,Delphi 父窗口保持在其他窗口的顶部

delphi - 使用 Indy 9 发送带有嵌入图片的电子邮件

delphi - 为什么这个 PAnsiChar 在转换为 AnsiString 时会被截断?

excel - PowerPivot 筛选功能

delphi - 在 Delphi 2009 中将 TMemoryStream 转换为 'String'

delphi - 如何使用 Delphi 2009 和 Unicode 字符串正确调用 GetLongPathName?

spring - Spring Security Filter Chain 如何工作

arrays - 如何在 iOS Swift 中的嵌套数组(对多关系)中根据条件过滤对象数组

delphi - 停止 kernell32 事件