为什么delphi中执行存储过程遇到错误就不能返回数据呢?而在查询分析器就可以
举例说明:table:t_test,只有一个字段,并做了唯一索引sql的存储过程是:insertintot_testvalues('adfadf')select@@err...
举例说明:
table: t_test, 只有一个字段,并做了唯一索引
sql的存储过程是:
insert into t_test values('adfadf')
select @@error
执行第一次没有问题,返回了0,执行第二次时出错,关键索引冲突,但如果这个过程在查询分析器中执行,出错后能返回@@error值,而delphi中执行出错后adoquery.active就始终是false,也就是不能取得@@error,因为存储过程中出错是在预料中的,所以出错的语句本身不存在问题,这应该怎么处理呢?
我直接怀疑是什么人推荐的或者是有什么功能推荐的,明白答案和我的问题都不相干,居然也推荐了,不只这一个,其它很多问题都是这样 展开
table: t_test, 只有一个字段,并做了唯一索引
sql的存储过程是:
insert into t_test values('adfadf')
select @@error
执行第一次没有问题,返回了0,执行第二次时出错,关键索引冲突,但如果这个过程在查询分析器中执行,出错后能返回@@error值,而delphi中执行出错后adoquery.active就始终是false,也就是不能取得@@error,因为存储过程中出错是在预料中的,所以出错的语句本身不存在问题,这应该怎么处理呢?
我直接怀疑是什么人推荐的或者是有什么功能推荐的,明白答案和我的问题都不相干,居然也推荐了,不只这一个,其它很多问题都是这样 展开
3个回答
展开全部
你是不是设置了主键啊 主键重复了吧,你可以SELECT 看下你插入的数据是不是有重复,而且插入的值为主键
追问
麻烦你看清楚,是我故意出错的,我要的是在出错后能以select的方式返回我要的数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法1
在存储过程里使用Try语句。
方法2
用TADOStoredProc,SQL语句使用Out参数返回错误代码 如:RETURN @@error
Delphi绝对能解决你的问题,不明白的hi我。
在存储过程里使用Try语句。
方法2
用TADOStoredProc,SQL语句使用Out参数返回错误代码 如:RETURN @@error
Delphi绝对能解决你的问题,不明白的hi我。
追问
sql2000 里我试了try,好像不认begin try end try begin catch end catch
我这里的问题是返回@@error,但这只是我举的一个例子,实际上我是要返回一个表,所以我认为必需要用select返回,不知道在存储过程里是不是可以不理会出错的信息,也就是在delphi里看不到这个过程的错误,最多是没有返回记录
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用异常处理。
Try
......
except
on 错误类型
do 返回错误时,你想进行的操作,比如返回数据、异常信息等。
end;
Try
......
except
on 错误类型
do 返回错误时,你想进行的操作,比如返回数据、异常信息等。
end;
更多追问追答
追问
不对,这是adoquery.active是false,没办法做任何处理,我需要在存储过程中一次完成这些操作
追答
那就简单了。
先是你的语句
ADOQuery1.Open;
然后再测试ADOQuery1.Active:
if not ADOQuery1.Active then ......你需要的操作在这儿写
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询