关于MS SQL存储过程处理结果(50)

  • 主题发起人 主题发起人 xin92002
  • 开始时间 开始时间
X

xin92002

Unregistered / Unconfirmed
GUEST, unregistred user!
问题描述:利用delphi调用MS SQL存储过程pj_nodel对MS SQL不同表中的相同数据进行批量删除··经测试 可以实现删除 记录的问题··但有如下问题问题一:我用delphi调用该存储过程 ,该存储过程执行成功(对表中的数据成功处理完成)的话 我希 望 在delphi中有数据处理成功的提示,否则则给出"给出的参数不符合要求"但我的不管存储过程是否删掉记录了 都有成功的提示delphi程序procedure TForm2.BitBtn1Click(Sender: TObject);beginADOStoredProc1.ProcedureName:='pj_nodel';/存储过程名pj_nodelcombobox1.Enabled:=true; edit1.Enabled:=true; edit2.Enabled:=true; bitbtn1.Caption:='确定生成';if messagebox(0,'确定输入相关信息','正在输入',mb_yesno or mb_iconquestion)=id_yes then if (edit1.text<>'') and (edit2.Text<>'') then with ADOQuery1 do begin close; sql.Clear; SQL.Add('execute pj_nodel :@pj_noqishi,:@pj_nozhongzhi'); ADOQuery1.Parameters.ParamByName('@pj_noqishi').Value:=edit1.Text;/为存储过程的参数赋值 ADOQuery1.Parameters.ParamByName('@pj_nozhongzhi').Value:=edit2.Text; try ExecSQL; messagebox(0,'票据记录删除成功!~','恭喜',mb_ok);/ 不管edit1和edit2我输入任何东西 都会出现 票据记录删除成功的提示,我希望是数据不符合要求处理应该不会成功 应该给予失败的提示 form2.Close; form2.Show; except messagebox(0,'票据记录删除失败','对不起',MB_ICONINFORMATION); exit; end; end else begin messagebox(0,'没有输入相关信息','提示',mb_yesno or mb_iconquestion); end;end;2:MS SQL存储过程 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pj_nodel]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[pj_nodel]GOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GOCREATE procedure pro_del @pj_noqishi int, @pj_nozhongzhi int as begin delete from tb_pj0 where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi delete from tb_pj9 where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi delete from tb_pj_mx where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi delete from tb_pj_mx0 where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi endGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO请问该问题应该如何解决
 
不管是否删除成功,存储过程执行完成就是成功了,没有删除数据可能是SQL语句的WHERE条件有问题造成的。
 
那样就不是想要的结果了··给edit1,edit2里输入 0001 和0004 这样删除了 表中0001到0004之间的记录安我的程序执行就会有执行成功的提示·如果我给edit1,edit2里输入abcde 和512522这样也会有成功的提示啊·那就不对了啊~~能不能根据存储过程 运行成功影响的行数 来判断·输入到edit1,edit2里的数据是否符合要求? 还望能与解答·!~谢谢!~!
 
如果你在编写存储过程时设计一返回变量,调用存储过程后再检测该变量值不就达到目的了吗?
 
小弟 初学能举一个例子吗·在我的小程序里修改下也行 ·谢谢
 
你这么简单的东西不用写存储过程一类的,直接写个DELPHI过程就行了。
 
CREATE function pro_del (@pj_noqishi int, @pj_nozhongzhi int)returns int as begin delete from tb_pj0 where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi delete from tb_pj9 where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi delete from tb_pj_mx where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi delete from tb_pj_mx0 where pj_no>=@pj_noqishi and pj_no<=@pj_nozhongzhi if @@rowcount >0 --判断最后一句是否删除了数据,但以上三句是否删除数据不知道,你设计的有问题 return 1 --删除数据时返回1 else return 2 --没有删除数据时返回2 end
 
[:(] 我的数据库 里的数据 处理 因情况而不同 有可能非常大 我看过相关的 都说使用 存储过程执行效率会比较高点 还请高手给予指点··
 
多人接受答案了。
 
后退
顶部