BCB中TADODataSet过滤中多个条件的问题

wangwei88888888 2010-09-06 04:17:46
adoTmp->Filtered = false;
adoTmp->Filter = " CODE LIKE '%1001%' AND STATE = 1";
adoTmp->Filtered = true;
我这样过滤出来的数据不对,应该会出来STATE = 1的数据,但是没有一条数据。单个条件是没问题的,多个条件就有问题了。
...全文
201 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
问题解决了,我犯了一个低级的错误,上面代码过滤条件中的AND我写成了ADN,然后在代码中没进行异常捕获,其实已经发生异常了,报了个"参数类型不正确,或不在可以接受的范围之内",把AND改过来就好了。
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
void __fastcall TfmCust_Supp_List::cbxEnabledClick(TObject *Sender)
{
adoTmp->Filtered = false;
adoTmp->Filter = GetStateFilter();
adoTmp->Filtered = true;

int iCount = adoTmp->RecordCount;
lvw->Items->BeginUpdate();
lvw->Items->Count = 0;
lvw->Items->Clear();
lvw->Items->EndUpdate();
lvw->OwnerData = true;
lvw->Items->Count = iCount;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfmCust_Supp_List::GetStateFilter()
{
TReplaceFlags rf;
rf << rfReplaceAll;
AnsiString strFilter = "";
AnsiString adoFilter = adoTmp->Filter;
if(adoFilter != "")strFilter = " ADN";
if(cbxEnabled->Checked){
strFilter += " STATE = 1";
strFilter = adoFilter + strFilter;
}
else{
if(adoFilter.AnsiPos("ADN STATE = 1") > 0)
adoFilter = StringReplace( adoFilter, "AND STATE = 1", "", rf);
if(adoFilter.AnsiPos("STATE = 1") > 0)
adoFilter = StringReplace( adoFilter, "STATE = 1", "", rf);
strFilter = adoFilter;
}
return Trim(strFilter);
}
//---------------------------------------------------------------------------

我代码是这么写的
科多兽 2010-09-06
  • 打赏
  • 举报
回复
使用这样adoTmp->Filter = " [CODE] LIKE '%1001%' OR STATE = 1"来测试下
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
你这个和我的不一样哦,我的是TADODataSet,数据是从WebService里面查出来的,然后在客户端进行过滤的
ccrun.com 2010-09-06
  • 打赏
  • 举报
回复
难道是关键字惹的祸?把字段名用[]括起来试试:
adoTmp->Filtered = false;
adoTmp->Filter = "[CODE] LIKE '%1001%' AND [STATE] = 1";
adoTmp->Filtered = true;
zzbinfo 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangwei88888888 的回复:]
引用 9 楼 zzbinfo 的回复:
你如果不相信你的数据有问题的话,建议写个sql语句检查一下。


adoTmp->Filtered = false;
adoTmp->Filter = " CODE = '1001' AND STATE = 1";
adoTmp->Filtered = true;

这个条件你那边能行吗,我现在的程序里面没有LIKE
[/Quote]我真的是测试过的,不过数据字段跟你的都不一样,但是过滤条件肯定是两个的
ADOTable1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password = root;Data Source = " + ExtractFileDir(Application->ExeName) + "\\User.mdb";
ADOTable1->TableName = "BackUpType";
ADOTable1->Filter = "BackUpID =0 and Custem = 0";
ADOTable1->Filtered = true;
ADOTable1->Active = true;
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zzbinfo 的回复:]
你如果不相信你的数据有问题的话,建议写个sql语句检查一下。
[/Quote]

adoTmp->Filtered = false;
adoTmp->Filter = " CODE = '1001' AND STATE = 1";
adoTmp->Filtered = true;

这个条件你那边能行吗,我现在的程序里面没有LIKE
zzbinfo 2010-09-06
  • 打赏
  • 举报
回复
你如果不相信你的数据有问题的话,建议写个sql语句检查一下。
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzbinfo 的回复:]
我测试了一下是没有问题的,看你的数据是不是就没有STATE = 1的数据
[/Quote]

有的啊,我所有的数据只有几条不是STATE = 1的,其余的全部是STATE = 1的
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 samchoy 的回复:]
如果你希望随便符合一个条件的都显示,那就用OR
adoTmp->Filter = " CODE LIKE '%1001%' OR STATE = 1";
[/Quote]
不行的,要2个条件同时符合
samchoy 2010-09-06
  • 打赏
  • 举报
回复
如果你希望随便符合一个条件的都显示,那就用OR
adoTmp->Filter = " CODE LIKE '%1001%' OR STATE = 1";
zzbinfo 2010-09-06
  • 打赏
  • 举报
回复
应该时没有两个条件同时成立的数据
zzbinfo 2010-09-06
  • 打赏
  • 举报
回复
我测试了一下是没有问题的,看你的数据是不是就没有STATE = 1的数据
samchoy 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangwei88888888 的回复:]
引用 1 楼 samchoy 的回复:
是不是没有符合两个条件同时成立的纪录?

条件是没问题的,这2个条件都能查询出很多数据
[/Quote]
两个条件同时成立的呢?
wangwei88888888 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 samchoy 的回复:]
是不是没有符合两个条件同时成立的纪录?
[/Quote]
条件是没问题的,这2个条件都能查询出很多数据
samchoy 2010-09-06
  • 打赏
  • 举报
回复
是不是没有符合两个条件同时成立的纪录?

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧