读书人

搜索有关问题 大神请进

发布时间: 2012-02-21 16:26:23 作者: rapoo

搜索问题 大神请进
我在设置搜索的按钮时,使用了以下代码,出现了问题,请大神帮忙:
如果输入的搜索条件存在,比如按照序号搜索,如果序号存在,则没问题;
如果序号不存在,就会报错崩溃。并提示: ''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;
}

}

[解决办法]
错误可能不是这部分代码,而是你执行FetalQuery->Filtered=true;之后的代码

[解决办法]
跟踪看是哪一句代码引起的异常错误
[解决办法]
出现这个错误提示,是因为你得输入框是空得,而你要得条件是这个输入得是个整数,你没有进行判断就直接进行了类型转换,所以出错了,在你类型转换得时候进行容错判断。
[解决办法]
如果输入框是空的,那么你的筛选条件相应的也要置为空。不过这样会将所有的记录列出。
如果想让数据集一条数据也不列出,FetalQuery->Filter = "1=0"; 即可。
[解决办法]
那没道理啊。你试着查询1004,然后在
FetalQuery->Filtered=true;
以前加个断点,看看
FetalQuery->Filter
的值是什么?
[解决办法]
另外,可曾考虑过SQL注入的问题?
[解决办法]
如果说是你的数据集为空的时候引起的这个错误,那你就要在对数据集中的数据进行处理的时候判断一下这个数据集是不是空的。

探讨
输入框不是空的 是因为数据库里面没有这个数据,我是故意输一些错误的搜索条件的,如果存在这个数据,那么是没有问题的

[解决办法]
检查你在什么地方进行了数据类型转换,看看转换前的数据是怎么产生的。用TryStrToInt进行转换或转换前判断数据的可靠性
探讨
搜索的值是没有问题的,输入什么就是什么

恩 我再看看代码~

判断数据集是不是空的,有什么方法可以判断它是不是空的呢?如果使用一次搜索,它也会出现同样问题吧,
如果单单是序号越界搜索这个可以避免,可以加条件限制。
但是搜索方式有好几样,还可以用用户名等,另外就是,删除数据之后,的一个空缺,这个也不好判断。

读书人网 >C++ Builder

热点推荐