下面是一段存储过程的代码,实现修改功能:
CREATE PROCEDURE [update_data]
(@num_1  [int],
 @name_2  [char],
 @num_3  [int],
 @name_4  [char](10))
AS UPDATE [a].[dbo].[data] 
SET      [num]  = @num_3,
 [name]  = @name_4 
WHERE 
( [num]  = @num_1 AND
 [name]  = @name_2)前台delphi代码如下:
ADOStoredProc1.Parameters.ParamByName('@num_1').Value:=i;
ADOStoredProc1.Parameters.ParamByName('@name_2').Value:=s;
ADOStoredProc1.Parameters.ParamByName('@num_3').Value:=strtoint(trim(edit1.Text));
ADOStoredProc1.Parameters.ParamByName('@name_4').Value:=trim(edit2.Text);
ADOStoredProc1.ExecProc;
其中:i,s 是变量,用于存储修改前的值;edit1和edit2中是修改后的。
现在,点击按钮后无任何变化。
请问:是哪里出错了?请各位帮助!

解决方案 »

  1.   

    创建存储过程
    if exists(select * from sysobjects where name='update_data')
    drop procedure update_data
    go
    create procedure update_data 
    @num_1 int, 
    @name_2 char, 
    @num_3 int, 
    @name_4 char(10)
    as  set nocount on begin
    begin tran
    UPDATE tablename SET num = @num_3,name = @name_4 
    WHERE 
    num = @num_1 AND name = @name_2
    if @@error<>0
    begin
    select 'error'
    rollback tran
    return
    end
    commit tran 
    select 'success'
    end
    return
    end
    前台调用
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         ADOStoredProc1.Parameters.ParamByName('@num_1').Value:=i; 
        ADOStoredProc1.Parameters.ParamByName('@name_2').Value:=s; 
        ADOStoredProc1.Parameters.ParamByName('@num_3').Value:=strtoint(trim(edit1.Text)); 
        ADOStoredProc1.Parameters.ParamByName('@name_4').Value:=trim(edit2.Text); 
        ADOStoredProc1.ExecProc(update_data);
    end;
    试一下
      

  2.   

    ADOStoredProc1.ExecProc(update_data); 
    这样用啊LZ的代码都没有知名存储过程名,你点击程序怎么知道执行哪个存储过程呢?