SQL存储问题 ( 积分: 100 )

  • 主题发起人 主题发起人 dbj
  • 开始时间 开始时间
D

dbj

Unregistered / Unconfirmed
GUEST, unregistred user!
create procedure pro_1
@mc varchar(20)
as
begin
select * from a where mc=@mc
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ADOStoredProc1.Close;
ADOStoredProc1.Parameters.parambyname('@mc').value := edit1.Text;
ADOStoredProc1.ProcedureName := 'rsgl.dbo.pro_1;1';
ADOStoredProc1.Prepared;
ADOStoredProc1.Open;
end;

出错信息:1. 过程'pro_1'需要参数'@mc',但未提供该参数
或 2. ADOStoredProc1:Parameter'@mc' not found

请各位高手帮忙解决,谢谢!!
 
create procedure pro_1
@mc varchar(20)
as
begin
select * from a where mc=@mc
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ADOStoredProc1.Close;
ADOStoredProc1.Parameters.parambyname('@mc').value := edit1.Text;
ADOStoredProc1.ProcedureName := 'rsgl.dbo.pro_1;1';
ADOStoredProc1.Prepared;
ADOStoredProc1.Open;
end;

出错信息:1. 过程'pro_1'需要参数'@mc',但未提供该参数
或 2. ADOStoredProc1:Parameter'@mc' not found

请各位高手帮忙解决,谢谢!!
 
对调一下应可以.
ADOStoredProc1.ProcedureName := 'rsgl.dbo.pro_1;1';
ADOStoredProc1.Parameters.parambyname('@mc').value := edit1.Text;
 
试试这样:
procedure TForm1.Button3Click(Sender: TObject);
begin
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName := 'rsgl.dbo.pro_1;1';
ADOStoredProc1.Parameters.parambyname('@mc').value := edit1.Text;
ADOStoredProc1.Prepared;
ADOStoredProc1.Open;
end;
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=14396
 
LinSM,wzwcn:
还是不行,出现第二种错误。
 
在Delphi中使用存储过程的方法
在Delphi中使用存储过程有以下几个步骤:
1、把TADOStoredProc或TStoredProc放到窗体上。
2、设置参数连接到MS SQL Server数据库。
3、设置ProcedureName参数,指定存储过程名,也可以在程序运行期设置。
4、单击TParameters边上的省略号按钮,如果设置正确,则可看到所有的输入输出参数。
5、在代码中设置存储过程的输入参数、执行存储过程并获取返回的数据。
通过调用TADOStoredProc控件的parambyname方法,设置好所有的输入参数,再调用open方法执行存储过程。如果存储过程返回参数,同样用parambyname方法获取参数值,如果返回数据集,则用访问数据集的TFields的方法获取各记录。如以下代码所示:
ADOStoredProc1.close;
ADOStoredProc1.parameters.parambyname('@dwmc').value:='某某单位';
ADOStoredProc1.prepared:=true;
ADOStoredProc1.open;
label1.caption:= ADOStoredProc1.fields[0].asstring
 
我也觉得wzwcn的方法保险,呵呵。
 
在赋存储过程名后,调用一下参数的刷新事件,就可以用参数了。
比prepared, 自行创建参数等都要好
ADOStoredProc1.parameters.refresh
 
用QUery就可以
with ADOQuery1do
begin
close;
sql.Clear;
sql.Add('execute pro_1 '''+edit1.Text+'''');
open;
end;

用ADOStoredProc1就出错:ADOStoredProc1:Parameter'@mc' not found
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName := 'rsgl.dbo.pro_1;1';
ADOStoredProc1.Parameters.ParamByName('@mc').Value := edit1.text;
ADOStoredProc1.Prepared := true;
ADOStoredProc1.Open;

请问用ADOStoredProc1有什么特殊要求吗?
 
procedure TForm1.Button3Click(Sender: TObject);
begin
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName := 'rsgl.dbo.pro_1';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ADOStoredProc1.parameters.refresh;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ADOStoredProc1.Parameters.parambyname('@mc').value := edit1.Text;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ADOStoredProc1.Prepared;
ADOStoredProc1.Open;
end;
 
To zyycc:
还是不能解决问题,出现同样的错误!
 
用ADOStoredProc还是没解决问题,还是谢谢大家的帮忙!!
 
后退
顶部