使用下面的代码,调用存储过程删除数据,但是只能删除一条记录,再删除记录时,就会出现找不到参数的提示信息,重新启动应用程序又可以删除一条记录了。var
Str_ID:String;begin
Str_ID:=ClientDataSet1.FieldByName('canshu1').AsString;
SQLStoredProc1.Params.Clear;
SQLStoredProc1.StoredProcName:='BIAO_DELETE';
SQLStoredProc1.Params.ParamByName('canshu1').Value:=Str_ID;
SQLStoredProc1.ExecProc;
ClientDataSet1.Refresh;
CREATE OR ALTER procedure BIAO_DELETE (
   canshu1 varchar(100)) 
as
begin
delete from biao where canshu1=:canshu1;
end

解决方案 »

  1.   

    再删除记录时,会出现找不到参数的提示信息:
    SQLStoredProc1:Parameter 'canshu1'not found.
    请问何故?
      

  2.   

    刪除一條記錄之後要刷新一下數據集(即重新刷新<open數據集,也就是select>...
      

  3.   

    直接用數據集刪除呢
    procedure TRES_CQ_JB_F.btnSB_DelClick(Sender: TObject);
    begin
      inherited;
      if MessageDlg('你確定要刪除所選中的加班數據嗎?'+char(13)+char(13)+'注意:刪除後就不能恢復!',mtWarning,[mbYes,mbNo],0)=idyes then
      begin
        if not adoq_JB.IsEmpty then
        begin
          adoq_JB.Delete;
        end;
        ChangeStatus(sBrowse);
      end;
    end;
      

  4.   

    手动写要创建参数,并指定类型等
    还是用Query自己写指令更简单
    若是ADO,则用组件图形化设置更直观
      

  5.   

    应该怎样传递参数,有没有什么afterdelete事件,好在事件处理函数中传递参数。
      

  6.   

    SQLStoredProc1.Parameters.Clear;
    SQLStoredProc1.Parameters.CreateParameter('canshu1',ftString,pdInput,200,Str_ID);
    SQLStoredProc1.ExecProc;这里ftString,200是canshu1字段的类型,长度
    pdInput表示是传入参数
    Str_ID是参数canshu1传入值如果有多个参数,相应有添加就行,如:
    SQLStoredProc1.Parameters.CreateParameter('参数2',ftString,pdInput,20,'参数2值');
    SQLStoredProc1.Parameters.CreateParameter('参数3',ftFloat,pdInput,0,100);
      

  7.   

    在删除了一个记录后,没有返回游标,可能是以下的句子不能再返回正确的数值了。
    Str_ID:=ClientDataSet1.FieldByName('canshu1').AsString;
      

  8.   


    使用后台删除或者更新数据,ClientDataSet1要重新读取数据,Refresh是没用的