我寫了個存儲過程如下,最簡單的:
CREATE proc sf1 (@bookid int, @bookname char)
as
begin tran
update tbtest set bookid=@bookid,bookname=@bookname
commit
GO
然後我在DELPHI中調用
這樣寫 
with StoredProc1  do
   begin
     Close;
     StoredProcName:='sf1';
     StoredProc1.ParamByName('bookid').AsInteger:=2;
     StoredProc1.ParamByName('bookname').AsString:='2';
     ExecProc;
   end;
執行報錯,參數BOOKID找不到。後來我改成:
with StoredProc1  do
   begin
     Close;
     StoredProcName:='sf1';
     Params.Clear;
     Params.CreateParam(ftinteger,'bookid',ptinput);
     Params.CreateParam(ftinteger,'bookname',ptinput);
     ParamByName('bookid').AsInteger:=2;
     ParamByName('bookname').AsString:='2';
     ExecProc;
   end;
執行報錯:GENNAL SQL ERROR。很是困惑,請高手不吝賜教。用BDE,因爲公司要求,沒辦法!
謝謝了。在綫等!

解决方案 »

  1.   

    我测试了没有任何问题,问题肯定处在你的存储过程里面。
    你的存储过程中直接全部update了,都没有where语句。我测试使用的是下面的语句,环境Delphi 7,BDE,MSDE 2000 Release A,因为我的库有实际数据,不能update.
    CREATE proc sf1 (@bookid int, @bookname char)
    as
    begin tran
    INSERT INTO tbtest(bookid,bookname) VALUES(@bookid,@bookname)
    commit
    GO
      

  2.   

    环境  DELPHI+SQLSERVER2000+BDE
    PS:我用ADOStoredProc1控件的话,这样写是可以成功执行的(同个存储过程),有没有其他的可能?
    with ADOStoredProc1  do
      begin
        Close;
        ProcedureName:='sf1';
        Parameters.Clear;
        Parameters.CreateParameter('a',ftinteger,pdinput,0,StrToInt(Edit1.Text));
        Parameters.CreateParameter('bb',ftstring,pdinput,Length(Edit2.Text),Edit2.text);
        ExecProc;
      end; 
    这样是成功的,BDE依然存在同样问题,再求解答!
      

  3.   

    表里字段不会错的,因为存储过程用ADOStoredProc1执行时正常的,用BDE执行才出错。
    我怀疑是我的赋值方法有问题,但是不知道问题在哪!
    希望大家看清我的问题!
      

  4.   

    不要考虑Delphi代码部分,肯定没有问题的。
    CREATE proc sf1 (@book_id int, @book_name char)
    as
    begin tran
    update tbtest set bookname=@book_name where bookid=@book_id//这里先改成这样测试一下。
    commit
    GOwith StoredProc1  do
       begin
         Close;
         StoredProcName:='sf1';
         Params.Clear;
         Params.CreateParam(ftinteger,'book_id',ptinput);
         Params.CreateParam(ftinteger,'book_name',ptinput);
         ParamByName('book_id').AsInteger:=2;
         ParamByName('book_name').AsString:='2';
         ExecProc;
       end;
    这样在试试,不知道是不是参数名和字段名一样的问题。反正我的参数名和字段名一样都没有问题。
      

  5.   

    你试着在查询分析器里面找到sf1,然后右键 打开,将参数付给它之后,点执行。先抛开Delphi,看看执行出错吗?如果这里不出错了再考虑考虑升级BDE.
      

  6.   

    赋值方法帮你测试了,肯定没有问题的。不行去下载一个最新的BDE。
      

  7.   

    十分感謝 foxyy8888!已經解決!應該是我的BDE的問題 我賦值的時候,必須在參數前加@
    參數名也要和sf1中保持一致!
    謝謝了!