有一个关于用delphi6中的ado存储过程控件操作sqlserver中的数据库存储过程的问题(100分)

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

yuzhantao

Unregistered / Unconfirmed
GUEST, unregistred user!
我在用delphi6中ado栏自带的一个存储过程控件(名字忘记了),进行附加数据库时,总是
告诉我使用参数不对。

我手头没有delphi6的执行存储过程的书,只有delphi5的,我照做,失败

谁能告诉我,怎么可以对delphi6中的存储过程控件赋予参数?要求在运行时赋予。


还有一个问题,sqlserver2000附加数据库返回的值应该怎样得到?

谢谢
 
adostoredproc1.Parameters[0].Value:='123456789';
adostoredproc1.ExecProc;
 
另外一点比较重要的东西是,要注意parameter的类型是output,还是input等等,默认属性是
unknown,这个不好,最好自己设置一下,最后就是当你重写了存储过程后,要重新刷新,因为
delphi在载入的时候已经将存储过程读到了本地,必须刷新,否则会有问题,这好像是bug,
不知道,但是存储过程真的是很好用,建议使用
 
楼上的楼上,我的程序和你的一样
但一运行就出错啊
 
我估计可能就kevin8093说的类型问题,但应该怎么设定呢?
 
会不会是你原来存储的过程有问题
 
不会的,因为我调用的是mssql自带的存储过程

而且我在mssqld 企业管理器中,可以用该过程实现附加。
 
with DataModule1.adostoredproc1 do
begin
Close;
FetchParams;
Params.ParamByName('arg_CHANNEL_ID').AsString := EditModify_CHANNEL_ID.Text;
Params.ParamByName('ARG_CHANNEL_NAME').AsString := EditModify_CHANNEL_NAME.Text;
Params.ParamByName('ARG_CATEGORY_ID').AsString := EditModify_CHANNEL_CATEGORY_ID.Text;
Params.ParamByName('ARG_TYPE').AsString := ComboBoxModify_CHANNEL_TYPE.Text;
Params.ParamByName('ARG_MULTICAST_IP').AsString := EditModify_CHANNEL_MULTICAST_IP.Text;
Params.ParamByName('ARG_PORT').AsString := SpinEditModify_CHANNEL_PORT.Text;
Params.ParamByName('arg_FLUX_UNIT').AsString := ComboBoxModify_FLUX_UNIT.Text;
Params.ParamByName('arg_FLUX').AsString := EditModify_FLUX.Text;
Params.ParamByName('arg_SERVICE_ID').AsString := EditModify_Service_ID.Text;
Params.ParamByName('arg_PRICE').AsString := EditModify_Service_Price.Text;
Params.ParamByName('ARG_DESCRIPTION').AsString := EditModify_CHANNEL_DESCRIPTION.Text;
Execute;
end;

我还是不太明白你的问题
 
报的什么错,贴出来看看
 
我用的是Oracle,Sql server不太了解,不过这方面应该差不多的
 
var AdoProc1:TAdoStoredProc;
begin
try
AdoProc1:=TAdoStoredProc.Create(self);
With AdoProc1 do
begin
close;
connection:=dm.SDS;
ProcedureName:='U_Insert_splx_SPG;1';
Parameters.Refresh;/这句很重要没有下面的语名会出错
parameters.ParamByName('@SWJG_DM').value:=dm.SWJG_DM;
parameters.ParamByName('@WSZL_DM').value:=Copy(TreeView1.Selected.Text,2,5);
parameters.ParamByName('@SPG_DM').value:=SPG['SPG_DM'];
parameters.ParamByName('@next_SPG_DM').value:=next_spg['spg_dm'];
if CheckBox1.checked then parameters.ParamByName('@next_zsbz').value:='Y'
else parameters.ParamByName('@next_zsbz').value:='N';
parameters.ParamByName('@gzn').value:=next_spg['gzn'];
parameters.ParamByName('@lrr_dm').value:=dm.CZRY_DM;
parameters.ParamByName('@success').value:=false;
try
execProc;
except
ShowMessage('操作失败,可能下级岗位有重号');
end;
 
谢谢各位,我估计可以了。
我用的是
adostor1.parameters[1].value:=

我估计错的就是这里

还有个问题,各位没有解答啊

就是怎么判断附加是否成功啊,是用
if parameters.ParamByName('return').value=true;么?

明天结帖
 
多人接受答案了。
 
顶部