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