搜索问题 大神请进

encozhong 2011-08-22 04:01:13
我在设置搜索的按钮时,使用了以下代码,出现了问题,请大神帮忙:
如果输入的搜索条件存在,比如按照序号搜索,如果序号存在,则没问题;
如果序号不存在,就会报错崩溃。并提示: ''is not a valid integer value.

请问有什么办法可以解决吗?如果找不到可以跳出一个提示,或者搜索结果为空。

代码如下:

void __fastcall Tjpfilem::BtnQueryClick(TObject *Sender)
{
BtnQuery->Enabled=false;
BtnCancel->Enabled=true;

switch(SQLwhich)
{
case FETALNAME:
if(EditName->Text=="*") FetalQuery->Filter="";
else FetalQuery->Filter="name='"+EditName->Text+"'";
break;
case FETALNO:
FetalQuery->Filter="zno='"+EditZNo->Text+"'";
break;
case FETALJNO:
FetalQuery->Filter="jno='"+Editjno->Text+"'";
break;
case FETALOLD:
FetalQuery->Filter="old='"+EditOld->Text+"'";
break;
case FETALYZ:
FetalQuery->Filter="yz='"+EditYz->Text+"'";
break;
default:
break;
}

if ((SQLwhich >= FETALNO) && (SQLwhich <= FETALYZ))
{
FetalQuery->Filtered=true;
}

}
...全文
102 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
encozhong 2011-09-13
  • 打赏
  • 举报
回复
已经解决问题了,我先用SearchOptions搜索一遍,排除掉为空的可能,然后再用SQL搜索。
encozhong 2011-08-26
  • 打赏
  • 举报
回复
先给分大家把~ 谢谢热情回答~
zzbinfo 2011-08-24
  • 打赏
  • 举报
回复
下个断点,单步执行,看看哪里错了就知道了
encozhong 2011-08-24
  • 打赏
  • 举报
回复
数据类型转换应该是没问题的,因为我都是使用c类型的,没有使用n类型
zzbinfo 2011-08-24
  • 打赏
  • 举报
回复
检查你在什么地方进行了数据类型转换,看看转换前的数据是怎么产生的。用TryStrToInt进行转换或转换前判断数据的可靠性[Quote=引用 13 楼 encozhong 的回复:]
搜索的值是没有问题的,输入什么就是什么

恩 我再看看代码~

判断数据集是不是空的,有什么方法可以判断它是不是空的呢?如果使用一次搜索,它也会出现同样问题吧,
如果单单是序号越界搜索这个可以避免,可以加条件限制。
但是搜索方式有好几样,还可以用用户名等,另外就是,删除数据之后,的一个空缺,这个也不好判断。
[/Quote]
encozhong 2011-08-24
  • 打赏
  • 举报
回复
搜索的值是没有问题的,输入什么就是什么

恩 我再看看代码~

判断数据集是不是空的,有什么方法可以判断它是不是空的呢?如果使用一次搜索,它也会出现同样问题吧,
如果单单是序号越界搜索这个可以避免,可以加条件限制。
但是搜索方式有好几样,还可以用用户名等,另外就是,删除数据之后,的一个空缺,这个也不好判断。
zzbinfo 2011-08-24
  • 打赏
  • 举报
回复
如果说是你的数据集为空的时候引起的这个错误,那你就要在对数据集中的数据进行处理的时候判断一下这个数据集是不是空的。[Quote=引用 5 楼 encozhong 的回复:]
输入框不是空的 是因为数据库里面没有这个数据,我是故意输一些错误的搜索条件的,如果存在这个数据,那么是没有问题的
[/Quote]
ccrun.com 2011-08-24
  • 打赏
  • 举报
回复
另外,可曾考虑过SQL注入的问题?
encozhong 2011-08-24
  • 打赏
  • 举报
回复
其实在进入这个显示界面的时候,如果DBF数据文件里面没有数据,它也是会出现同样的错误。
所以,我就一直让它最少保留一条数据在里面。
就算是删除数据,如果只剩下一条数据的话,我也设置了不给删除,以便保证DBF数据文件里面至少有一个数据。
ccrun.com 2011-08-24
  • 打赏
  • 举报
回复
那没道理啊。你试着查询1004,然后在
FetalQuery->Filtered=true;
以前加个断点,看看
FetalQuery->Filter
的值是什么?
encozhong 2011-08-24
  • 打赏
  • 举报
回复
我就是想 做成你后面说的,如果没有,就让他一条都不列出来
encozhong 2011-08-24
  • 打赏
  • 举报
回复
妖哥~输入框不是空的
是DBF数据文件里面没有该条信息
比如:我通过ZNO序号的查询方式 DBF数据文件里面只有1001、1002、1003、1005这四条数据
那么我查询1004或者1006等等,这4个以外的数据时候就会出错
如果查的是1001、1002、1003、1005等这些确实存在的数据,是没有问题的
ccrun.com 2011-08-24
  • 打赏
  • 举报
回复
如果输入框是空的,那么你的筛选条件相应的也要置为空。不过这样会将所有的记录列出。
如果想让数据集一条数据也不列出,FetalQuery->Filter = "1=0"; 即可。
encozhong 2011-08-24
  • 打赏
  • 举报
回复
输入框不是空的 是因为数据库里面没有这个数据,我是故意输一些错误的搜索条件的,如果存在这个数据,那么是没有问题的
encozhong 2011-08-24
  • 打赏
  • 举报
回复
哦 好的 谢谢大家 我再看看
zzbinfo 2011-08-22
  • 打赏
  • 举报
回复
出现这个错误提示,是因为你得输入框是空得,而你要得条件是这个输入得是个整数,你没有进行判断就直接进行了类型转换,所以出错了,在你类型转换得时候进行容错判断。
缘中人 2011-08-22
  • 打赏
  • 举报
回复
跟踪看是哪一句代码引起的异常错误
jone7319 2011-08-22
  • 打赏
  • 举报
回复
错误可能不是这部分代码,而是你执行FetalQuery->Filtered=true;之后的代码

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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