首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Is引发错误在Sybase 12.5客户端库的Unidac组件中无效

Is引发错误在Sybase 12.5客户端库的Unidac组件中无效
EN

Stack Overflow用户
提问于 2011-08-23 14:58:16
回答 2查看 2.1K关注 0票数 1

我们在Delphi 10中使用Unidac存储的Proc组件和Sybase 12.5驱动程序

在Sybase proc中,我们提出了如下错误,我发现它正在重新调整,但它没有显示错误message.Isthis不工作在Unidac或任何其他问题?

代码语言:javascript
复制
if @number <> null
 begin
  select @errmsg = 'Already active for location ' 
  raiserror 20001 @errmsg 
   return 1 
 end 

我正在delphi中执行storedproc,如下所示

代码语言:javascript
复制
try 
  ExecProc; 
  except on E:Exception do 
    begin 
     ErrorMsg(EDatabaseError(ExceptObject).Message,0); 
     Exit; 
   end;

但我们仍然不能抓住例外。

就连我都试过像下面这样。

代码语言:javascript
复制
try 
  UniStoredProc.StoredProcName := 'test'; 
  UniStoredProc.ExecProc; 
except 
  on E:EUniError do 
    ShowMessage(E.Message); 
end

相同的代码在Sybase 15客户端库中运行良好

我们使用Sybase 15服务器和Sybase 12.5客户端库连接到服务器,这会是一个问题吗?之前,我们在Sybase 12.5客户端库中使用BDE,所以我们没有遇到任何问题,现在我们发现了unidac存在的问题

EN

回答 2

Stack Overflow用户

发布于 2011-08-23 15:27:29

为了与null进行比较,您需要使用is操作符,如下所示:

代码语言:javascript
复制
if @number is not null
begin
  select @errmsg = 'Already active for location ' 
  raiserror 20001 @errmsg 
  return 1 
end 

现在,它应该在if-then语句中执行代码。

票数 5
EN

Stack Overflow用户

发布于 2011-08-29 20:45:35

答案似乎是使用Sybase 15客户端而不是12.5重新部署应用程序。由于您已经关闭了"ANSINULL“选项,procs中的代码肯定会产生异常触发。当他们使用Sybase 15的时候,他们就这样做了。

旁白思考: Sybase 12.5是否有任何连接/客户范围内的配置,在该版本中被关闭,并在Sybase 15版本中打开?

如果不是,这是Sybase 12.5版本中的一个bug,它在Sybase 15版本中得到了修正(甚至在13版之前,我不知道)。

你不需要重写任何东西,只需要重新部署。

PS:我从来不喜欢在服务器上部署不匹配版本的客户机库,总是有可能打开一罐蠕虫.很显然,情况就是这样。

PS2:当然,UniDAC比BDE使用更多的功能(BDE是一个具有“小公分母”方法的中间件),后者在12.5客户机库中触及了这个弱点。

另一点是,在Server (它与Sybase有共同的传统)中,raiseerror有一个severity参数。而且只有严重性16+ (AFAIR)消息才被认为是错误--也许BDE决定了一切都是错误,其中UniDAC只遵循文档。

这是非常狂野的猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7163101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档