200分真诚请教关于DELPHI调用MS SQL SERVER的有参数存储过程(200分)

  • 主题发起人 主题发起人 yangjing
  • 开始时间 开始时间
Y

yangjing

Unregistered / Unconfirmed
GUEST, unregistred user!
我用MS SQL SERVER做了一个存储过程,源码如下:
Create Procedure dbo.sp_Test
@MeterID varchar(10)='%'
With Recompile
As
Select * From meter_dianliang
Where MeterID=@MeterID
在用DELPHI调用时,在DatabaseName,StoredprocName中
正确设置了别名和找到了相应的存储过程:dbo.sp_Test;1
在参数设置中看到了:
0-Result
1-@MeterID;
下一步,设置参数@MeterID:
Type:Input/String类型;
调用时:
StoredProc1.ParamByName('@MeterID').AsString:='11%';
//or StoredProc1.Params[1].AsString:='11%';
StoredProc1.Prepare;
StoredProc1.Open;
执行到 StoredProc1.Open;时,产生异常:
Not Found dbo.sp_Test;1, Process stop!
我曾用过没有参数的SQL SERVER 的存储过程,没有问题,
但现在必须用一个有参数的存储过程。
真诚向大家请教。
 
真接用Query控件写肯定没问题
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('sp_test '+' 11%');
Query1.ExecSQL;
另外自己定义的存储过程最好不用sp作前缀,这样会减慢执行速度
 
>正确设置了别名和找到了相应的存储过程:dbo.sp_Test;1
好象应该设置dbo.sp_Test
 
用的Delphi 4吗?
升级BDE
D4的BDE和SQL Server 7不兼容
 
最近升级为SQL 7了吧.把存储过程后的那个;1去掉就一切正常了.
SQL7不再支持DB-Library,而BDE正是使用DB-Lib访问SQL的.
如果不考虑移植的话,建议用ADOExpress.
 
没想到第一次在大富翁上提出问题,就解决的这样快,给人鼓舞和温暖,
就象在浩瀚沙漠中看到了同路人。
感谢xiecc的提醒,你的方法很独特,不过我还没有时间尝试,
but i'll try it soon.
wrench,我用的是DELPHI5,今后我的问题会提的更清晰;
沈前卫,DELPHI,你们的回答解决了我的问题,同时感谢DELPHI关于
问题出现原因的解释。
不过,我用你们的方法再次尝试时,发现虽然存储过程可以执行
我的输入参数,但是无法输出输出参数(均为0)
Create Procedure dbo.sp_Test3
@MeterID varchar(10)='%',
@MaxDL Numeric OUTPUT,
@Average Numeric OUTPUT
(此过程用SQL SERVER QUERY ANALYSIS 执行没有问题,返回输出参数正确
结果。9380;3675;)
在DELPHI中执行结束后在DBGRID中看到了正确的结果,但是输出参数都是0,
显然未被改变。
DELPHI中源码如下:
DM.StoredProcSPTest.ParamByName('@MeterID').AsString:='11%';
DM.StoredProcSPTest.Prepare;
DM.StoredProcSPTest.Open;
EditMax.Text:=FloatToStr(
DM.StoredProcSPTest.Params[2].AsFloat);
EditAvg.Text:=FloatToStr(
DM.StoredProcSPTest.ParamByName('@Average').AsFloat);
我还是想将这个问题研究清楚。
再次感谢大家的热心帮助。
 
后退
顶部