动态使用存储过程控件的问题(100分)

  • 主题发起人 主题发起人 kingfisher
  • 开始时间 开始时间
K

kingfisher

Unregistered / Unconfirmed
GUEST, unregistred user!
下面一段代码问题处在何处? 运行时总报错:

Field ‘@Price‘?is of an unknown type

数据库是sql server 存储过程也没问题 我已经改成最简单的一句了,

在sql server的 aql analyzer中执行没问题

wtstoredproc:=TStoredProc.Create(nil);

wtstoredproc.DatabaseName:=emdbdatabasename;

wtstoredproc.StoredProcName:='wtcheck';

wtstoredproc.params.Clear;

p1:=TParam.Create(wtstoredproc.params,ptInput);

p2:=TParam.Create(wtstoredproc.params,ptOutput);

try

wtstoredproc.params[0].Name:='@orderno';

// wtstoredproc.params[0].DataType:=ftString;

wtstoredproc.params[1].Name:='@price';

// wtstoredproc.params[1].DataType:=ftString;

wtstoredproc.parambyname('@orderno').asstring:=varorderno;

wtstoredproc.Prepare;

wtstoredproc.ExecProc;

varprice:=wtstoredproc.parambyname('@price').asstring;

finally

wtstoredproc.free;

p1.Free;

p2.Free;

end;

困扰多时

将注释中语句加上 出错为:

no parameter type for parameter @orderno
 
该问题出在Delphi,您必须在设计过程中强行为wtstoredproc指定一次储存过程,此时会
重新刷新参数,在象你那样写程序就不会错了。不信试试。
另外可以采用一个Query控件这样写SQL可代替你上面的程序
Query1.sql.text('Exec wtcheck '''+varorderno+'''');
核心意思是:Exec+储存过程名+参数(逗号隔开)
 
怎样才能:“强行为wtstoredproc指定一次储存过程”呢????
 
你所说的“设计过程中强行为wtstoredproc指定一次储存过程”是什么意思,
如果用Query控件,
Query1.sql.text('Exec wtcheck '''+varorderno+'''');
怎么是'''+varorderno+'''?
谢谢你的回答
我会再做一下试验的,
确认后我会加分的,因为分不多,所以只好设为100分
 
varorderno代表参数变量,注意公式:Exec+储存过程名+参数(逗号隔开),
用普通Query及可解决。
 
我想可能是沒有定p1,p2的數據類型.
 
对,hason说的对,虽然p1,p2创建时,指定了参数类型,但使用存储过程时,
还是要指定类型一次,yinxuetao的方法我没好好试,不过还是好好谢谢你
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
844
DelphiTeacher的专栏
D
I
回复
0
查看
811
import
I
后退
顶部