2

sI には、「 Controled 」という名前の clientdataset ブール フィールドがあります。

管理されていないレコードをフィルタリングしたい。

Delphi XE (VCL) では、これらのコードを使用していて、機能していました。

ClientDataSet1.Filter := 'Controled = 0';  
ClientDataSet1.Filtered := True;

Delphi XE2 (FMX) では、このコードは機能しませんが、制御されたレコード ( ) をフィルター処理でき、機能しますが、制御されていないControled =1レコードが必要です。

何かアイデアはありますか、それとも新しいバージョンですか?

4

2 に答える 2

1

Boolean フィールドである限り、「not Controled」はどうでしょうか。ブール型フィールドがフィルター文字列インタープリターによって適切に評価されない場合、機能する場合は、 または のいずれかControlled = trueで問題ないはずです。あなたの例を挙げると、それは単に writeの代わりに意味します。not (Controled = true)Controled <> trueControled = 1Controled <> 1

于 2012-11-03T21:01:26.370 に答える
1

XE3 での簡単なテストでは、実際に and を使用するTrueと、フィルターが正常に機能することが示されFalseます (これは、最初から実行する必要があったことです)。

ClientDataSet1.Filter := 'Controled = False';
ClientDataSet1.Filtered := True;

私が作成したテストテーブルには、 というフィールドと というintegerフィールドIDBoolean含まれていますControlled(あなたのものと同じですが、2 つの L で綴られています)。

ボタン クリック コードのテスト:

procedure TForm3.Button1Click(Sender: TObject);
begin
  ClientDataSet1.Filtered := False;
  if Edit1.Text <> '' then
  begin
    ClientDataSet1.Filter := Edit1.Text;
    ClientDataSet1.Filtered := True;
  end
  else
    ClientDataSet1.Filter := '';
end;

フィルタが設定されていません (Filtered = FalseおよびFilter = ''):

フィルタが設定されていません

フィルタ =Controlled = False

フィルター = 偽

フィルタ =Controlled = True

フィルタ = 真

于 2012-11-03T21:28:45.427 に答える