三层数据库中如何调用存储过程!!!救救小弟!100分!!(100分)

  • 主题发起人 主题发起人 liudz
  • 开始时间 开始时间
L

liudz

Unregistered / Unconfirmed
GUEST, unregistred user!
我的存储过程有两个三个参数,两个输入(@flag,@RemoveId),一个输出(@billid)。
当我用 ADOConnection1---》ADOStoredProc1---》DataSetProvider1
----》ClientDataSet1 连接
执行如下代码
clientdataset1.Close;
ClientDataSet1.Params.ParamByName('@flag').asstring := '1' ;
ClientDataSet1.Params.ParamByName('@RemoveId').asstring := '1111';
clientdataset1.Execute;
a := ClientDataSet2.Params.ParamByName('@billid').asstring;

报如下错误,‘Parameter对象被不正确地定义。提供了不一致或不完整的信息’
这是为什么,请高人指点呀!!!
 
你看看你的参数信息的数据类型是不是正确,或者匹配。两边的类型因该是一致的。
 
两边地数据是一样地呀!!
高手,在那里呀,救救我呀!
 
请参见:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1315012
应该能解决!
 
这样:要注意与你定义的参数顺序对应上。
clientdataset1.Close;
clientdataset1.CommandText := '存出过程名;1';//如果有输出的话要有参数1
clientdataset1.Params.Clear;
ClientDataSet1.Params.ParamByName('@billid').asstring:=1;//回调参数也应先付值,具体在存出过程中改变
ClientDataSet1.Params.ParamByName('@flag').asstring := '1' ;//@flag 是string?
ClientDataSet1.Params.ParamByName('@RemoveId').asstring := '1111';
clientdataset1.Execute;
a := ClientDataSet1.Params.ParamByName('@billid').asstring;
或者直接在query Analyzer 中调试。过程名 参数1,参数2,...
 
to 9861
谢谢,我跟输出参数赋值后的确可以用了,但我还想问问
clientdataset1.CommandText := '存出过程名;1';//如果有输出的话要有参数1
这条语句有什么作用,能讲地详细一点吗?
我地开发环境,delphi6。0 ,sql2000
存储过程是一点问题都没有的
 
每次加上
clientdataset1.FetchParams
 
这好象是TClientDataSet调用存出过程的规则。具体可以查查资料:)
如果只用TClientDataSet调用存出过程的话,则只需指定其的RomatServer就行了。然后在
commandtext属性中复值。写一些SQL之类的,如果是存出过程这写名称。只是存出过程有
输出参数的话要在后面加上这个,没有输出参数就只写名称就可以了。
 
在我跟输出参数赋值 后,错误是不报了,但每次执行后,输出参数地值没有变,还是我赋
地值,这是为什么?
 
你的存储过程返回值正确吗?
 
用的什么数据库?直接利用数据库执行存储过程的语法.
比如
clientdataset1.Close;
clientdataset1.CommandText := 'Execute 存储过程命带你参数;//
clientdataset1.Execute;//或OPEN
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部