delphi存储过程
Ⅰ delphi 调用存储过程
用sql数据库为例子 代码如下:
ADOStoredProc1.Close;
DataSource2.DataSet:=ADOStoredProc1;
ADOStoredProc1.ProcereName:='存储过程名称';
ADOStoredProc1.Parameters.Refresh; //必须有该条刷新语句
ADOStoredProc1.Parameters[1].Value:=2; //在存储过程组件里参数从1 开始
ADOStoredProc1.ExecProc;
ADOStoredProc1.open;
Ⅱ delphi客户端调用存储过程返回参数,请问怎么解决
开发环境:Delphi XE 10.1 Update 2
服务器:FDConnection1-->FDQuery1-->DataSetProvider1
客户端:SQLConnection1-->DSProviderConnection1-->ClientDataSet5
procere TFrame01_Frame.Button3Click(Sender: TObject);
begin
ClientDataSet5.Close;
// FormID、Opid是传入值,doccode是传出值 注意参数不能带@,传出值不要加output,传入、传出类型已在CreateParam时指定了
ClientDataSet5.CommandText := ' Execute _sysP_NewDocCode :FormID,:Opid,:doccode ';
ClientDataSet5.Params.Clear;
ClientDataSet5.Params.CreateParam(ftString,'FormID',ptInput);
ClientDataSet5.Params.CreateParam(ftString,'Opid',ptInput);
ClientDataSet5.Params.CreateParam(ftString,'doccode',ptOutput);
ClientDataSet5.Params.ParamByName('FormID').Size := 30;
ClientDataSet5.Params.ParamByName('FormID').Value :='Sale2002';
ClientDataSet5.Params.ParamByName('Opid').Size := 20;
ClientDataSet5.Params.ParamByName('Opid').Value :='191025';
ClientDataSet5.Params.ParamByName('doccode').Size := 20;
ClientDataSet5.Execute;//如果不返回结果集,执行此语句
//ClientDataSet5.Open;
Edit2.Text := ClientDataSet5.Params.ParamByName('doccode').Value;
end;
特别注意:参数不能带@,传出值不要加output,传入、传出类型已在CreateParam时指定了,这两坑有点深耗费多天时间查询资料以及摸索。
希望能够对大家有用,少走些弯路,同大家结菩提缘
Ⅲ Delphi怎样使用存储过程参数
调用存储过程推荐使用Query,Adoquery组件
query.close;
query.sql.clear;
query.sql.add('exec db.prtemp(@id=:id)');
query.parambyname('id').asinteger:=1;
query.open;
----------------------------------------------------------------------------------------------------
也可用Tstoredproc
storedproc1.active=false;
storedproc1.databasename="dbname";
storedproc1.storedprocname="strdprcname";
storedproc1.params.clear;
storedproc1.params.createparam(ftstring,"p1",ptinput);
storedproc1.params.createparam(ftstring,"p2",ptinput);
storedproc1.params.parambyname("p1").asstring:=varstring1;
storedproc1.params.parambyname("p2").asstring:=varstring2;
storedproc1.active=true;
----------------------------------------------------------------------------------------------------
调用存储过程最好使用Query组件,本人就是用Tstoredproc组件而屡屡出错!这一段痛心疾首的错误老是涉及到ISAPI32.dll,让我这个丈二和尚模不到屁股。使用Query控件调用存储过程如下:
加入你的存储过程有两个参数:
CREATE PROCEDURE Procere_Name @proc1 int,@proc2 char(8)
AS
……
则你的Query1控件的代码如下:
With Query1 do
Begin
Close;
SQL.Clear;
SQL.Add(' Exec Procere_Name :proc1,:proc2 ');
ParamByName('proc1').Value:=4;
ParamByName('proc2').Value:='Hello';
Try
ExecSQL;
Except
raise;
End
End
Ⅳ 用delphi编写进销存软件需要用存储过程吗
1、用delphi编写进销存软件,与是否需要使用存储过程,关键点在于软件的开发过程中,是否必需要用到存储过程。
通常来说,存储过程是在数据库中,为了完成特定功能所编写的SQL 语句集,存储在数据库中,供用户调用的。而如果可以直接通过 SQL 来完成的,就不必要用存储过程。
2、由于存储过程是存储在数据库中的,所以与 delphi 关系不大。
Ⅳ delphi 中如何调用sql 存储过程
使用TADOStoredProc组件,可以,给你举个例子好了
with ADOStoredProc1 do
begin
Close;
Parameters.Clear;
ProcereName:='SaveDate_dbzsm'; //存储过程名称
Parameters.CreateParameter('v_wlid', ftString, pdInput, 20, fgUnassigned);//传入参数(数字代表长度)
Parameters.CreateParameter('v_ddid', ftString, pdInput, 20,fgUnassigned); //传入参数
Parameters.CreateParameter('v_tm', ftString, pdInput, 500,fgUnassigned); //传入参数
Parameters.CreateParameter('v_returnstr', ftString, pdoutput, 30,fgUnassigned); //返回值
//为参数赋值
Parameters[0].Value :=trim(edit1.text);
Parameters[1].Value := trim(edit2.text);
Parameters[2].Value := trim(edit2.text);
Parameters[3].Value := ' ';
ExecProc;
reuturn:= Trim(Parameters.ParamByName('v_returnstr').Value);
end;
reuturn就是返回值,你可以放到stringgrid 里面。
也可以用adoquery 连接存储过程。
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('exec SaveDate_dbzsm :wlid,:ddid,:tm,:returnstr output');
Parameters.ParamByName('wlid').Value :=trim(edit1.text);
Parameters.ParamByName('ddid').Value :=trim(edit2.text);
Parameters.ParamByName('tm').Value := trim(edit3.text);
Parameters.ParamByName('returnstr').Value := ' ';
Open;
reuturn:= Parameters.ParamByName('returnstr').Value;
end;
http://..com/question/316727588.html
Ⅵ 怎样在Delphi中实现在运行中实现带参数的存储过程
我在法度榜样中需应用带参数的存储过程。我发明若存储过程不带参数,可在代码中写:
ProcereName
:=
存储过程名;
Open;open;即可。但若是我在代码中直接写带参数的存储过程如下:Parameters[1].Value
:=
值;ProcereName
:=
存储过程名;prepared;open;即可。但若存储过程带参数,就必须在设计中事先设好存储过程名,再在代码中写:
Parameters[1].Value
:=
值;Delphi始终显示一个缺点说袈浣界。参数部分若是改成如下:Parameters.ParamByName['参数名'].Value
:=
值;Delphi始终显示一个缺点说没此参数名。各位高手,请指教一下,难道Delphi功能这么差,连这么件小事都实现不了?
Ⅶ Delphi怎么使用SQL SERVER的存储过程,参数问题
以存储过程名sp_output为例,条件为where,返回结果为某最大单号(字符型),返回列名为output。具体按以下步骤实现:
1、创建ADO,输入执行存储过程的SQL命令:EXEC
sp_output
‘’(注:引号内为条件);
2、初使化ADO,即:
ADO.close;
ADO.open;
3、调用存储过程的返回值:ADO.fieldbyname('output').asstring。
Ⅷ delphi客户端调用存储过程返回参数,请问怎么解决
有位同伙告诉我一种办法,但答复我不太明白,我的目标是如许的,三层构造下客户端给存储过程几个参数,返回几个参数答复如下:我有一个经验,后台数据库是SqlServer2000:
1.存储过程不返回记录集,只返回参数。
TClientDataSet.CommandText:=
'
Declare
@OutputData
int
Excute
StoredProc1
@OutputData
Output
如许就可以返回输出的参数了。
以上调用输出可能有错,但语句是对的,你式一下。
2.存储过程要返回记录集,也要返回参数。
你只好再中心层写办法调用了。
返回参数值:=
clientdataset.fieldbyname('outputdata').asstring;
在delphi中该怎么定义参数,怎么处理,还请明示1。
这个commandtext到底该怎么写?Excute
StoredProc1
@OutputData
Output
中的outputdate在存储过程中是否应当定义?2。Select
@OutputData
起什么感化?3。多参数怎么解决,参数名称是否和存储过程中应当一样?4。open打开到底返回的是记载照样参数?分别怎么处理?
Select
@OutputData
'
你要用open打开,返回是一笔记录。如不雅存储过程名称位disp1
传入参数在存储过程平分别为@time1,@time2
传出参数位@get1,@get2均为float