2012-04-04 33 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') + ')'; 
相关问题