查询不成功时怎样返回一逻辑值(200分)

  • 主题发起人 阿豆豆
  • 开始时间

阿豆豆

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI+ORACLE
我想在表A的字段B中查询含有字符串为Edit1.text的记录,如若没有查到这样的记录,
ORACLE就会报错。有什么办法可以将这条报错信息转化为一个什么变量的逻辑值,比如说
若没有查到这样的记录,那么变量R:=NIL什么的。
有朋友帮我的忙在下面的代码中修改一下,达到上述的目的吗?
begin
ADOQuery1.close;
ADOQuery1.SQL.clear;
mykey1:='%'+Edit1.text+'%';
mysql1:='select*from A where B like'+quotedstr(mykey1);
ADOQuery1.SQL.add(mysql1);
ADOQuery1.Open;
end;
谢谢!送200分
 
begin
try
ADOQuery1.close;
ADOQuery1.SQL.clear;
mykey1:='%'+Edit1.text+'%';
mysql1:='select*from A where B like'+quotedstr(mykey1);
ADOQuery1.SQL.add(mysql1);
ADOQuery1.Open;
except
R:=false:
end;
end;
 
begin
ADOQuery1.close;
ADOQuery1.SQL.clear;
mykey1:='%'+Edit1.text+'%';
mysql1:='select*from A where B like'+quotedstr(mykey1);
ADOQuery1.SQL.add(mysql1);
ADOQuery1.Open;

if ADOQuery1.IsEmpty then
ShowMessage('没有相关记录'); //------>>>此处你可以进行其他相关处理。
end;

>>如若没有查到这样的记录,
没有查到,ORACLE就会报错吗???? 奇怪了。
不知你本意是否是想在中间层捕获错误异常然后传给客户端????
 
if ADOQuery1.locate('字段名','字段值',[[loCaseInsensitive]]) then
如果沒有就會返回一個邏輯值為假,否則就會返回一個邏輯值為真,
 
如果没有查到记录,系统并不会报异常啊。根据数据集是否为空判断就行了,我曾做了一
个函数,与楼上两位的颇为相似:
function F_Exist(B_com:String):boolean; //根据Sql语句字符串B_Com判断是否有记录
var B_result:boolean;
begin
With Set_Exist do //Set_Exist函数是ADODataset控件
begin
CommandText :=B_Com;
Open;
B_Result:=not isEmpty;
close;
end;
Result:=B_Result;
end;

 
直接select * from table是不会报错的
除非你用的是 select x into y from table
此时没有找到记录则会报错
你可以在PL/SQL块中处理异常:
begin
select x into y from table where...;
exception
when NO_DATA_FOUND then
y := -1; -- 暂且设置y=-1为没有找到记录
end;
 
请确认字段类型为字符而不是数值型。字符型我认为不会报错。
 
谢谢各位,是我搞错了。
像上面的查询是不会报错的。
我是将查询到的记录赋给一个变量时才产生的错误:Invalid variant type conversion.
ADOQuery2.close;
ADOQuery2.SQL.clear;
mysql0:='select ID as MYID from A where B='+quotedstr(mykey1);
ADOQuery2.SQL.add(mysql0);
ADOQuery2.ExecSQL;
ADOQuery2.open;
StaID1:=adoQUERY2.FIELDBYNAME('MYID').VALUE;
 
没有记录会报错吗??

我用TQuery来查询即使返回空记录集也没问题的,,不会错

if TQuery11.Eof then
//处理
 
多人接受答案了。
 
顶部