4

ASCII 以外の文字を含む列名を含む可能性のある TClientDataset があります。そのような列でフィルタリングできないようです。コード例を次に示します。

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 に答える