一个关于存贮过程的问题,特急......(200分)

  • 主题发起人 主题发起人 Fins
  • 开始时间 开始时间
F

Fins

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,小弟我最近研究存贮过程,但经看书查资料的结果很不理想。主要是书的例子
无法正常使用。现将例子写出来给各位大侠,检查检查看是什么问题告诉小弟一下,小弟
不胜感激。
小弟用的是DELPHI6和MSSQL2000,以WIN2000做为平台。
存贮过程如下:
Create Procedure AA @Number Char(10) as
Update Table1 Set AA='AAAA' Where AA=@number
Go
DELPHI中有一个Database1控件做为连接服务器数据库和一个TstoredProc做为调用存贮
过程的控件,TStoredProc控件中只设置了Database指向Database1和StoredProcName值设
为AA指向服务器中存贮过程,指定后在Params属性中出现两个参数0-Result和1-@number
两个参数值。我在DELPHI中按照书中的例子进行调用代码如下:
  StoredProc1.ParamByName('@Number).Asstring:='BBB';
或 StoredProc1.Params[1].Asstring:='BBB';
StoredProc1.ExecProc;
出错,提示说无法找到@Number参数,我看调试器发现出错代码在StoredProc1.ExecProc
这句,我查询了一些书籍和资料对存贮过程的参数传递都是上面两种传递方式。但不知什
么原因,始终出错。
  我将存贮过程改为不需要传递参数直接进行调用就OK了。
  但我用存贮过程返回记录集时,无法用TDataSource控件把数据集和DBGrid连接起来,
但又不出错。
  Create Procedure BB As
Select * From Table1
   Result 100
go
可以明显的感觉到数据已经读取但DbGrid控件无法显示数据集,返回数也无法读数。
请各位大侠指数一二,小弟感激万分。
 

  StoredProc1.ParamByName('Number').Asstring:='BBB';
或 StoredProc1.Params[0].Asstring:='BBB';
StoredProc1.ExecProc;
 
在 StoredProc1.ParamByName('Number').Asstring:='BBB';之前加一句
StoredProc1.Parameters.Refresh;
试试,可能你没有刷新。或者直接打开StoredProc1.Parameters属性,删除,再打开即可
 
还有你显示数据之前先返回数据集的记录数试试,看到底你有没有load数据
dbgrid只要相连,并且数据集打开就ok了
 
不要用什么StoredProc,直接使用adoQuery就可以了。
把存储过程当成一堆SQL语句的集合,当作SQL语句执行就可以了。[:)]
 
StoredProc1.ParamByName('Number').Asstring:='BBB';
不带“@”我也试过,不行。
我有点不太清楚ADO控件组和BDE控件组有什么区别,因为以前看别人程序都是用BDE的,
所以我用的也是BDE控件组,能告诉我一下ADO和BDE之间的区别吗,如果分不够可以加。
执行存贮过程时,我明显的感觉到机器运行速度一慢和硬盘的转动声音啦。
 
Create Procedure AA @Number vChar(10) as---改成varchar
Update Table1 Set AA='AAAA' Where AA=@number
Go
存储过程先 close一下,然后再传参数
 
好像还是不行一样的错误。
我用Query控件进行调用成功。
Exec aa @number='AAA'
调用成功。
但不知为什么存贮过程始终不能执行。
 
1.试试这个:
StoredProc1.Params.clear;
StoredProc1.Params.add;
StoredProc1.Params[0].asstring := 'BBB';
StoredProc1.execproc;
2.把"result 100"去掉试试!
 
不行。我想请问一下,难道你们调用存贮过程的时候没有错误吗?[:(]
 
??不会吧,为什么没有人回答我呀??[:(][:(]
 
我前天经过试验,发现使用MSSQL模式进行连接参数无法连接.但使用ODBC就没有问题
但在使用ODBC的过程中,返回值又不能返回,始终是0.
不知什么原因.[:)]
 
.... @Number varchar(10)

StoredProc1.ParamByName('@Number').Asstring:='BBB';
StoredProc1.Active:=true;
注意:在存储过程结束前将数据集select .. 出来
以上一定没问题 [:)]
 
在存贮过程中
我是用return @@rowcount返回一个记录数.
Var
dd:integer;
dd:= StoredProc1.ParamByname('@return_Value').asinteger;
dd值始终是0不知什么原因
 
建议:
1、先老老实实的用静态ADOStoreProce,设置过程名称,参数。没有问题了,再动态创建。
2、char -> varchar
 
使用StoredProc1.open;
 
你在SQL SERVER2000中写一个最简单的存储过程,并且赋值运行成功,然后
在DELPHI中使用ADOStoredPro连接到该存储过程,,可以在params中添加参数
并且赋值,然后可以在设计期打开看看行不行,这样肯定是行的,

你先试试吧,我现在要回家了,如果你还没有成功,我明天把例子给你,
不好意思,我还在公司要回家的,
 
我用的是BDE的StoredProc控件,我想知道如何使用空上控件完成参数的上传和返回值的
赋值,各位大侠帮帮忙啦。十万火急。如果可以的最好给一完整的例子,谢谢啦。[:)]
我用的是DATABASE里面的模式用MSSQL或ODBC。
 
SProc_DanHao.Close;
SProc_DanHao.ProcedureName := 'UpdateHuoPinBH;1';
SProc_DanHao.Prepared := true; //加上这句试试
SProc_DanHao.parameters.Refresh; //再加上这句试试
SProc_DanHao.Parameters.ParamByName('@CodeValue').Value := '0';
SProc_DanHao.ExecProc;
这是我调存储过程的例子!你加上那两句试试!
 
CREATE PROCEDURE AAA
@ReturnValue VarChar(12) Output //返回值
AS
...
Set @ReturnValue = XXX //给返回参数赋值XXX
...
GO
 
后退
顶部