关于执行存储过程的问题(100分)

  • 主题发起人 主题发起人 笨笨
  • 开始时间 开始时间

笨笨

Unregistered / Unconfirmed
GUEST, unregistred user!
我写好了一个存储过程,为了减少程序的修改,我必须用TQuery来执行它,但
我直接写它的Sql,然后执行就是不行,有具体的例子让我看看吗?
我的存储过程的需要输入一些参数,如下:
CREATE PROCEDURE sp_Speed
@strShortCut varchar(4),
@intID integer,
@intCtrlQryType integer,
@strCtrlQryStyle varchar(2),
@Directors integer,
@Directore integer,
@MaxCd integer,
@intY integer,
@intMb integer,
@intMe integer,
@intDb integer,
@intDe integer
AS
……
 
这是您要的吗?
CREATE PROCEDURE dbo.WmsHalfUpdate
@dateIn datetime,
@mQty numeric(12,3),
@psCode char(1),
@gPerM2 int
AS
/*declare @wDay int
declare @dateTo datetime
select @wDay=datepart(day,@dateIn)
if @wDay=1
select @dateTo = dateadd(day,14,@dateIn)
else
begin
select @dateTo = dateadd(day,-14,@dateIn)
select @dateTo = dateadd(month,1,@dateTo)
end
*/
update wmsHalfLeft
set halfLeftLast = halfLeftLast + @mQty,
halfLeftToday = halfLeftToday + @mQty
where dateIn >= @dateIn and psCode= @psCode
and gPerM2=@gPerM2 and P_or_J='p'

procedure TFrmStore.BtnClick(Sender: TObject);
var tempStr:string;
begin
tempStr:=copy(datetostr(DptAsk.Date),1,7)+'-'+CBdate.Text;
with DM.SP_UpdateHalfdo
begin
Close;
ParamByName('@dateIn').value:=strtodate(tempStr);
ParamByName('@psCode').value:=Ecode.text;
ParamByName('@gPerM2').value:=strtoint(EgPerM2.text);
ParamByName('@mQty').value:=strtofloat(EhalfChange.text)-strtofloat(EhalfLeftLast.text);
ExecProc;
end;
showmessage('完成!!!');
end;
 
对不起,我是要TQuery来执行存储过程,并不是用TStoreProc来执行,我是这样写
的:
Active := FALSE;
try
Sql.Clear;
Sql.Add('select * from sp_Speed(参数1,参数2……)');
Active := TRUE;
但出错了,书上说是可以用TQuery来执行存储过程的。但我的语法又错在什么地方呢?
 
不能open也不能 Active := TRUE;
要 query.ExcetueSQL
 
query.close;
query.sql.add('exec 存储过程,参数1、2...')
query.execsql
(如果是SQL SERVER的话)
 
在用QUERY时,传回数据的用OPEN;不传回数据的用ExecSql。
(D3资料库应用务实--翁志宏著P8-9)
 
我使用的可以呀
Query1.SQL.clear;
Query1.SQL.add('execute 存储过程,参数1、2...');
Query1.Close;
Query1.open;
 
你先在数据库中建立一个存储过程然后按照
Query1.SQL.clear;
Query1.SQL.add('execute 存储过程,参数1、2...');
Query1.Close;
Query1.open
这个方式执行。
 
非常感谢各位的帮助,我已经解决了问题,不过要提醒您的是,参数之间是用逗号间
隔的,而不是分号,其实就象在Analyzer里执行的语句一样,非常感谢!
不过在《delphi4开发大全》上是说用select来写的哦,不管怎样,问题解决了就要
给分,再次感谢!
 
后退
顶部