一关于ADOStoredProc的问题(50分)

  • 主题发起人 主题发起人 动力汽车
  • 开始时间 开始时间

动力汽车

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟想使用ADOStoredProc调用存储过程,数据库为Oracle,本机安装了Oracle客户端,存储过程大体为:<br>create or replace function TheProc<br>(<br> &nbsp;action &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int,<br> &nbsp;object_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; varchar2(255), &nbsp; &nbsp; &nbsp; <br> &nbsp;error_info &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out &nbsp;varchar2(255), &nbsp; &nbsp; &nbsp; &nbsp;-- 错误提示<br> &nbsp;error_id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out &nbsp;int &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- 错误序号<br>)<br>前台代码为:<br> &nbsp;if not AdoConnection.Connected then<br> &nbsp;begin<br> &nbsp; &nbsp;AdoCommand.Connection := AdoConnection;<br> &nbsp; &nbsp;ADOConnectServer(AdoConnection, Param.FUser, Param.FPassword, Param.FAlias);<br> &nbsp;end;<br> &nbsp;ADOStoredProc := TADOStoredProc.Create(Application);<br> &nbsp;with ADOStoredProc do<br> &nbsp;try<br> &nbsp; &nbsp;prepared := True;<br> &nbsp; &nbsp;Close;<br> &nbsp; &nbsp;Parameters.ParamByName('action').Value:=3;<br> &nbsp; &nbsp;Parameters.ParamByName('object_name').Value:=test';<br>// &nbsp; &nbsp;execproc;<br> &nbsp; &nbsp;Open;<br> &nbsp; &nbsp;Parameters.Refresh;<br> &nbsp; &nbsp;prepared := False;<br> &nbsp;except<br> &nbsp; &nbsp;On E:Exception do<br> &nbsp; &nbsp; &nbsp;ShowMessage(E.message + chr(13) + '执行失败!');<br> &nbsp;end;<br>现调试的时候一直报parameter 'action' not found<br>但是我在parameters里已经设置了这两个参数了,是不是ADO的Connection及ConnectionString还需要设置?我的Connection中只能选取ADOConnection,ConnectionString里很多东西不知道选哪一个好啊,最重要的是我的ProcedureName中的过程名称是我手工输入进去的,而不是选取的,这是不是问题所在?请各位大虾指导指导。
 
过程名称是手工输入的??? 是在程序中手工输入的吗?如果是那就要createparameters ,,然后赋值.
 
存储过程控件他自动会添加一个参数,你把它给去掉,如果你用的是动态创建,<br>则这样做试试:<br>with ADOStoredProc do<br> &nbsp;try<br> &nbsp; &nbsp;Parameters.Refresh;<br> &nbsp; &nbsp; Parameters[1].Value :=3;<br> &nbsp; &nbsp; Parameters[2].Value:=test';<br> &nbsp; &nbsp; prepared:=true;<br> &nbsp; &nbsp; ExecProc;
 
to sefeng1982:<br>将程序重新改写了一下:<br> &nbsp;ADOStoredProc := TADOStoredProc.Create(Application);<br> &nbsp;with ADOStoredProc do<br> &nbsp;try<br> &nbsp; &nbsp;Close;<br> &nbsp; &nbsp;ProcedureName := 'TheProc';<br> &nbsp; &nbsp;Parameters.Clear;<br> &nbsp; &nbsp;Parameters.CreateParameter('action',ftInteger,pdInput,20,'');//运行到此处即报错<br> &nbsp; &nbsp;Parameters.CreateParameter('object_name',ftString,pdInput,20,'');<br> &nbsp; &nbsp;Parameters.CreateParameter('error_info',ftString,pdOutput,SizeOf(String),0);<br> &nbsp; &nbsp;Parameters.CreateParameter('error_id',ftinteger,pdOutput,SizeOf(Integer),0);<br> &nbsp; &nbsp;Parameters.ParamByName('action').Value:=3;<br> &nbsp; &nbsp;Parameters.ParamByName('object_name').Value:='upin_test';<br> &nbsp; &nbsp;Prepared:=true;<br> &nbsp; &nbsp;Open;<br> &nbsp; &nbsp;ErrorInfo := Parameters.ParamByName('error_info').Value;<br> &nbsp; &nbsp;ErrorNo := Parameters.ParamByName('error_id').Value;<br> &nbsp;except<br> &nbsp; &nbsp;On E:Exception do<br> &nbsp; &nbsp; &nbsp;ShowMessage(E.message + chr(13) + '执行失败!');<br> &nbsp;end;<br>将程序重新修改了一下,运行时却报‘应用程序在当前的操作中使用了错误的类型值’,难道我CreateParameter的时候使用的类型不正确?
 
必须手动创建参数。
 
我以前也会出这种错,每次用ADOStoredProc 时,设置好connection和ProcedureName 后<br>都得打开Parameters属性,去掉一个自动增加的参数,才能运行!!!
 
to gisdy:<br> &nbsp;看看四楼,我是手动创建参数了啊,不过依然有问题,请指点一下。
 
to xjsypp兄:<br> &nbsp;如何去掉一个自动增加的参数?按道理说我的参数都改为手动创建了,怎么又会出现类型不匹配呢?快崩溃了,实在不行就得使用其它方法了。
 
你可以试一下我前面说的方法,不要去查询参数,而用它的序号代替试试.<br>我试过了是可以的.
 
Parameters.CreateParameter('action',ftInteger,pdInput,20,'');//运行到此处即报错<br>原来是这句的问题,改为<br>Parameters.CreateParameter('action',ftInteger,pdInput,20,0);//运行到此处即报错<br>就好了<br>但是Open的时候却报了'Missing Connection or ConnectionString'错误,Connection或者ConnectionString需要怎么设置?我用的Oracle数据库
 
顶一下...<br>最重要的问题出现了,请问各位大虾,ADO可以调用Oracle函数吗?我这边定义的是函数而不是过程,所以使用ADO的Open的时候总是报过程不存在或没有注册的错误,请问如果用ADO调用函数该如何调用?<br><br>UP...
 
多人接受答案了。
 
后退
顶部