2012-04-04 53 views
0

我想用2個不同的過濾器過濾表,以便按下按鈕時顯示的唯一記錄是那些具有某個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 ...' – mjn 2012-04-04 18:31:47

+0

下面的代碼完成相同的代碼以下變化 DBTravel.DataSource.DataSet.Filter:=格式('(Job_ID =%s)AND(Mode =%s)',[edtAddJobID.Text,edtSe​​archMode.Text]);模式條目是字符串,例如'Car','Train'。但是,當我運行該程序並進入模式,然後按下按鈕它說參數是錯誤的類型,有什麼不同? – Alexjjsmith 2012-04-04 20:09:51

+0

當你比較一個字符串字段時,你必須引用字符串進行比較試試這個:'DBTravel.DataSource.DataSet.Filter:= Format('(Job_ID =%s)AND(Mode =%s)',[edtAddJobID.Text, QuotedStr(edtSe​​archMode.Text)]); ' – RRUZ 2012-04-04 20:12:07

2

我想Filter是一個字符串。因此,你必須給它一個字符串。

'(Job_ID = ' + edtAddJobID.Text + ') AND (Type = ' + QuotedStr('Private') + ')'; 
相關問題