我想在客户端动态调用存储过程
在中间层定义了个方法SetProcName(sProcName);
可能传存储过程的名称过去
再在客户端用ClientDataSet.Execute;执行存储过程
可得不到存储过程执行的返回结果 result我在客户端创建reult参数如下:
with cdsProc do
begin
Close;
strSQl := Trim(memProc.Lines.Text);
frmMain.SockConn.AppServer.SetProcName(strSQL);
Params.Clear;
Params.CreateParam( ftString, '@vc_user', ptInput );
Params.CreateParam( ftString, '@vc_login_ip', ptInput );
Params.CreateParam( ftString, '@c_auto_ip', ptInput );
Params.CreateParam( ftInteger, '@i_login_time', ptInput );
Params.CreateParam( ftString, '@vc_host_name', ptInput );
Params.CreateParam( ftString, '@vc_message', ptOutput );
Params.CreateParam( ftInteger, 'result', ptResult); Params.ParamByName('@vc_user').AsString := 'Tyson';
Params.ParamByName('@vc_login_ip').AsString := '127.0.0.0';
Params.ParamByName('@c_auto_ip').AsString := '1';
Params.ParamByName('@i_login_time').AsInteger := 1429;
Params.ParamByName('@vc_host_name').AsString := 'wjg';
Params.ParamByName('@vc_message').AsString := ''; Execute;
sm := Params.ParamByName('@vc_message').AsString;
iErrMsg := Params.ParamByName('result').AsInteger;问题是sm的值都可以得到,可到了最后一句就报错: 'Parameter: 'result' not fount不知什么原因??
在中间层定义了个方法SetProcName(sProcName);
可能传存储过程的名称过去
再在客户端用ClientDataSet.Execute;执行存储过程
可得不到存储过程执行的返回结果 result我在客户端创建reult参数如下:
with cdsProc do
begin
Close;
strSQl := Trim(memProc.Lines.Text);
frmMain.SockConn.AppServer.SetProcName(strSQL);
Params.Clear;
Params.CreateParam( ftString, '@vc_user', ptInput );
Params.CreateParam( ftString, '@vc_login_ip', ptInput );
Params.CreateParam( ftString, '@c_auto_ip', ptInput );
Params.CreateParam( ftInteger, '@i_login_time', ptInput );
Params.CreateParam( ftString, '@vc_host_name', ptInput );
Params.CreateParam( ftString, '@vc_message', ptOutput );
Params.CreateParam( ftInteger, 'result', ptResult); Params.ParamByName('@vc_user').AsString := 'Tyson';
Params.ParamByName('@vc_login_ip').AsString := '127.0.0.0';
Params.ParamByName('@c_auto_ip').AsString := '1';
Params.ParamByName('@i_login_time').AsInteger := 1429;
Params.ParamByName('@vc_host_name').AsString := 'wjg';
Params.ParamByName('@vc_message').AsString := ''; Execute;
sm := Params.ParamByName('@vc_message').AsString;
iErrMsg := Params.ParamByName('result').AsInteger;问题是sm的值都可以得到,可到了最后一句就报错: 'Parameter: 'result' not fount不知什么原因??
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER procedure sp_ztset_userlogins
@vc_user VCUserid,
@vc_login_ip varchar( 16 ),
@c_auto_ip CKind,
@i_login_time ITime,
@vc_host_name varchar( 20 ),
@vc_message varchar( 36 ) output
as
declare @vc_address varchar( 12 )
set @vc_message='OK'
select distinct @vc_address = net_address from master..sysprocesses
where hostprocess = host_id() and hostname = host_name() delete from runbase..userlogins where vc_user = @vc_user and
vc_login_ip = @vc_login_ip insert runbase..userlogins( vc_user,vc_login_ip,c_auto_ip,i_login_time,
vc_host_name,vc_address ) values(
@vc_user,@vc_login_ip,@c_auto_ip,@i_login_time,@vc_host_name,@vc_address ) if ( ( @@error <> 0 ) or ( @@rowcount = 0 ) )
begin
select @vc_message = 'runbase..userlogins'
return 11
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
我的ClientDataSet是连到一个DataSetProvider上,而这个DataSetProvider连接到一个AdoStoreProc上的,我怀疑可能是ADOStoreProc不支持返回值功能?