在一个存储过程中我用'Err'表示错误码,但在Delphi中调用时用FieldByName('Err').AsInteger发现负数成了正数,如-1成了1,-2成了2,导致程序运行错误,特向各位大侠请教。

解决方案 »

  1.   

    忘了说数据库采用SQL Server2000
      

  2.   

    在Delphi中用语句
    ErrCode:= FieldByName('Err').AsInteger;
    取值,结果ErrCode为正值,
    ErrCode定义为int ,longint, int64都是这样但在查询分析器中执行结果正确为负值
      

  3.   

    Err的字段类型是什么?试试Integer(FieldByName('Err').Value)
      

  4.   

    谢谢各位关心!Err的字段类型为bigint:在查询分析器中执行能得到正确结果说明总是不在数据库方面吧
      

  5.   

    Integer(FieldByName('Err').Value)出来也是正数
      

  6.   

    你看一下你的SQL是否写正确。
      

  7.   

    我在Delphi中设置断点,取出其中的SQL语句,直接在查询分析器中执行,结果正确,说明SQL语句正确。
    继续运行,ErrCode:= FieldByName('Err').AsInteger后,ErrCode就成了正值。
    再在查询分析器中执行语句,结果还是正确,为所设定的负值,不知是怎么回事。
      

  8.   

    我在Delphi中设置断点,取出其中的SQL语句,直接在查询分析器中执行,结果正确,说明SQL语句正确。
    Err
    ------
    -100继续运行,ErrCode:= FieldByName('Err').AsInteger后,ErrCode就成了正值。
    ErrCode = 100再在查询分析器中执行语句,结果还是正确,为所设定的负值:
    Err
    ------
    -100
    不知是怎么回事。
      

  9.   

    好象variant to integer那里出问题了吧
      

  10.   

    不好意思,本人才疏学浅,具体的说不出来,但我知道com接口的数据类型都是variant类型的,从数据库里的数据到应用程序时已经经过了integer to variant=>variant to integer不光是integer就连string经过几次这样的转换还经常出问题呢?方向应该没错,具体的你问以下三星的吧
      

  11.   

    先 AsString ;
    再 StrToInt() 看看 (瞎猜的)
      

  12.   

    我的代码是这样的:
    sSql := 'DECLARE @Err bigint '
      + ' EXECUTE prTest @Err OUTPUT '
      + ' SELECT @Err AS ErrCode' ;
    with query1 do
    begin
      close;
      SQL.Clear;
      SQL.Add(sSql);
      Open;
      ErrCode := FieldByName('ErrCode').AsInteger;
    ...
    end
      

  13.   

    搞定了,多谢大家的关注。
    最后采用 wjlsmail(计算机质子) ( )  的思路用StrToInt()搞定了。