CREATE  procedure sp_GetRoomNum(
@Status int output,
@Errmsg VARCHAR(255) output,
@HouseNum varchar(10),
@RoomNum varchar(10)
)
AS SET NOCOUNT ON DECLARE @TmpSQL VARCHAR(2000)
SET @Status=0
SET @Errmsg=''
  SET @TmpSQL='select 房号 from ['+@HouseNum+'] where 房号 ='''+@RoomNum+''''
EXECUTE(@TmpSQL)
PRINT @TmpSQL If @@ROWCOUNT<>0 Begin
   Set @Status=-2
   SET @Errmsg='Room existed!'
END IF @@Error<>0 BEGIN
SET @Status=-1
SET @ErrMsg='数据库异常错误,请稍后再试'
ENDGO
这一段是我的sqlserver存储过程,在sqlserver里面执行通过
这是通过后的消息代码
select 房号 from [A] where 房号 ='A101'
存储过程: XQ.dbo.sp_GetRoomNum
返回代码 = 0
输出参数: 
@Status = 0
@Errmsg = 
下面这一段是我在delphi里面调用他的代码
但是一执行程序就提示  对象名'A101'无效  这个A101就是Edit6.text的值  哪位大哥可以帮我一下
看看是怎么回事 
begin
ASQL:='Execute sp_GetRoomNum  :@status output,:@ErrMsg output,:@RoomNum,:@HouseNum';
        with bcADOQuery do
          begin
            sql.Clear;
            sql.Add(ASQL);
            parameters.ParamValues['@RoomNum']:=Edit6.Text;
            parameters.ParamValues['@HouseNum']:=Edit5.Text;
            open;
           
            if FieldValues['@status'] = -2 then
              begin
                Messagedlg('房号<'+Edit6.Text+'>已有住户',mterror,[mbok],0);
                Exit;
              end
            else

解决方案 »

  1.   

    可能是在存储过程中没有这两个参数:'@RoomNum'和'@HouseNum'.....
     parameters.ParamValues['@RoomNum']:=Edit6.Text;
     parameters.ParamValues['@HouseNum']:=Edit5.Text;
      

  2.   

    CREATE  procedure sp_GetRoomNum(
    @Status int output,
    @Errmsg VARCHAR(255) output,
    @HouseNum varchar(10),
    @RoomNum varchar(10)
    )
    AS你看上面  我定义了阿
      

  3.   

    存储过程里面定义的顺序是
    @HouseNum varchar(10),@RoomNum varchar(10)而你程序里面定义的顺序是
    :@RoomNum,:@HouseNum结果你中心SQL 语句的时候变成了select 房号 from [A101] where 房号 ='A'
    没有表A101当然就出错了,参数与存储过程里没对上,当然出错了,换了就好了。
    parameters.ParamValues['@RoomNum']:=Edit5.Text;
    parameters.ParamValues['@HouseNum']:=Edit6.Text;
      

  4.   

    另外,你这个存储过程没有返回结果集的,你后面 if FieldValues['@status'] = -2 then 还是会出错的,应该在存储过程中将FieldValues Select出来
      

  5.   

    @Status int output,
    @Errmsg VARCHAR(255) output,
    这两个是返回的阿  为什么你说没有返回集阿?
      

  6.   

    请问这个输出参数要怎么select出来阿  表里面没有这个字段  他只是个输出参数
      

  7.   

    那两个是存储过程的返回值,不能这样取的要这样 
    if parameters.ParamValues['@status'] = -2 then