2012-04-04 4 views
0

私はボタンを押すと、特定のJob_IDを持つものと、プライベート '。 私は次のコードを持っている:オペレータはこのオペランドタイプには当てはまりません

if CBSearchType.Text = 'Private' then 
begin 
DBTravel.DataSource.DataSet.DisableControls; 
      DBTravel.DataSource.DataSet.Filtered := False; 
      DBTravel.DataSource.DataSet.Filter := ('Job_ID = '+edtAddJobID.Text) AND  ('Type = '+QuotedStr('Private')); 
      DBTravel.DataSource.DataSet.Filtered := True; 
      DBTravel.DataSource.DataSet.First; 
      DBTravel.DataSource.DataSet.EnableControls; 
end; 

をしかし、私が表示され、任意の提案、エラーメッセージ「このオペランドのタイプには適用されません演算子」をコンパイルしようとすると? ありがとう

答えて

3

フィルタプロパティは、文字列

DBTravel.DataSource.DataSet.Filter := Format('(Job_ID =%s) AND (Type=%s)',[edtAddJobID.Text,QuotedStr('Private')]); 
+0

JOB_IDでなければならない数値であるように思われるとedtAddJobIDは、編集フィールドのようです。型の安全性とユーザー入力のエラー処理を改善するには、文字列から整数への変換を使用し、%d: '(Job_ID =%d)AND ... 'を使用してFormat関数のInteger値を使用してください。 – mjn

+0

次のように変更します。 DBTravel.DataSource.DataSet.Filter:=フォーマット( '(ジョブID =%s)AND(モード=%s)'、[edtAddJobID.Text、edtSe​​archMode.Text]);モードエントリは文字列(例: 'Car'、 'Train')です。しかし、私はプログラムを実行し、モードを入力し、ボタンがそれは引数が間違ったタイプのことを言う、何が違うのですか? – Alexjjsmith

+0

文字列フィールドを比較するときは、比較する文字列を引用符で囲む必要があります。 'DBTravel.DataSource.DataSet.Filter:= Format( '(Job_ID =%s)AND(Mode =%s)'、[edtAddJobID.Text、 QuotedStr(edtSe​​archMode.Text)]); ' – RRUZ

2

Filterは文字列です。したがって、あなたはそれに文字列を与えなければなりません。

'(Job_ID = ' + edtAddJobID.Text + ') AND (Type = ' + QuotedStr('Private') + ')'; 
関連する問題