delphi 如何接住sql 存储过程output传下来的参数
我在sql中写了插入的存储过程,其中要根据output传来的参数1,0,-1三种情况判断给delphi。但我不知道delphi中如何接住这三个参数。另外,如何将sql中s...
我在sql中写了插入的存储过程,其中要根据output传来的参数1,0 ,-1三种情况判断给delphi。但我不知道delphi中如何接住这三个参数。另外,如何将sql中select的查询结果赋值给delphi中的变量。求指教。小弟分不够了。忘见谅哈
展开
3个回答
推荐于2016-09-18 · 知道合伙人数码行家
关注
展开全部
譬如这样一个存储过程
create procedure proc_inserttea(@i int output,@id char(10),@name char(10),@title char(20),@grade char(5))
as
insert into teacher(Tid,Tname,title,Tgrade) values(@id,@name,@title,@grade)
select @i=id from teacher where Tid=@id
传出id这个参数,用ADOStoredProc去接收
storeproc.ProcedureName:='proc_inserttea';
storeproc.Parameters.CreateParameter('i',ftInteger,pdOutput,0,null);
storeproc.Parameters.CreateParameter('id',ftString,pdInput,10,Edit6.Text);
storeproc.Parameters.CreateParameter('name',ftString,pdInput,10,Edit7.Text);
storeproc.Parameters.CreateParameter('title',ftString,pdInput,20,Edit8.Text);
storeproc.Parameters.CreateParameter('grade',ftString,pdInput,10,Edit9.Text);
storeproc.ExecProc;
TeaId:=storeproc.Parameters.ParamByName('i').Value;
这是一种方法
create procedure proc_inserttea(@i int output,@id char(10),@name char(10),@title char(20),@grade char(5))
as
insert into teacher(Tid,Tname,title,Tgrade) values(@id,@name,@title,@grade)
select @i=id from teacher where Tid=@id
传出id这个参数,用ADOStoredProc去接收
storeproc.ProcedureName:='proc_inserttea';
storeproc.Parameters.CreateParameter('i',ftInteger,pdOutput,0,null);
storeproc.Parameters.CreateParameter('id',ftString,pdInput,10,Edit6.Text);
storeproc.Parameters.CreateParameter('name',ftString,pdInput,10,Edit7.Text);
storeproc.Parameters.CreateParameter('title',ftString,pdInput,20,Edit8.Text);
storeproc.Parameters.CreateParameter('grade',ftString,pdInput,10,Edit9.Text);
storeproc.ExecProc;
TeaId:=storeproc.Parameters.ParamByName('i').Value;
这是一种方法
更多追问追答
追问
storeproc.ExecProc就是直接执行proc_inserttea这个存储过程吗?storeproc.Parameters.CreateParameter('i',ftInteger,pdOutput,0,null);这些语句是直接传递参数吗?
还有select @i=id from teacher where Tid=@id 这句可以直接在delphi中写吗?不需要加上sql.add(select @i=id from teacher where Tid=@id)吗?
不是很明白啊。望指点啊
追答
是的,执行前的是输入参数
执行存储过程前先要创存储过程的,我的存储过程已经创了,建存储过程可以用你的方法,也可以直接写在文本里面读
推荐于2018-03-29 · 知道合伙人软件行家
关注
展开全部
以存储过程名sp_output为例,条件为where,返回结果为某最大单号(字符型),返回列名为output。具体按以下步骤实现:
1、创建ADO,输入执行存储过程的SQL命令:EXEC sp_output ‘’(注:引号内为条件);
2、初使化ADO,即:
ADO.close;
ADO.open;
3、调用存储过程的返回值:ADO.fieldbyname('output').asstring。
1、创建ADO,输入执行存储过程的SQL命令:EXEC sp_output ‘’(注:引号内为条件);
2、初使化ADO,即:
ADO.close;
ADO.open;
3、调用存储过程的返回值:ADO.fieldbyname('output').asstring。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用控件ADOStoredProc,
ADOStoredProc.ProcedureName:='you Proc Name';
parameters.refresh;
parameters.paramByname('you Name').value := 'you value';//传入参数,output参数也要传入。
ExecProc;//执行存储过程
Result := ParamValues['you output name']; /接收output 参数
接收select 结果,如果是存储过程,一样用ADOStoredProc,执行改为OPen;读取结果如ADOQUery,如果是delphi程序里写查询语句,可以用ADOQUery,
ADOQUery.SQL.add(Select 'you name' from 'you table name' where .....);
ADOQuery.open;//执行
First;//定位到第一条
While not Eof do//不为空执行
begin
Result := FieldValues['you name'];//读取结果
。。。。。
Next;//吓一跳;
end;
ADOStoredProc.ProcedureName:='you Proc Name';
parameters.refresh;
parameters.paramByname('you Name').value := 'you value';//传入参数,output参数也要传入。
ExecProc;//执行存储过程
Result := ParamValues['you output name']; /接收output 参数
接收select 结果,如果是存储过程,一样用ADOStoredProc,执行改为OPen;读取结果如ADOQUery,如果是delphi程序里写查询语句,可以用ADOQUery,
ADOQUery.SQL.add(Select 'you name' from 'you table name' where .....);
ADOQuery.open;//执行
First;//定位到第一条
While not Eof do//不为空执行
begin
Result := FieldValues['you name'];//读取结果
。。。。。
Next;//吓一跳;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询