想拿分?放马过来!三层系统中的远程过程调用的问题!!
nickw 2002-02-21 10:45:48 我在应用服务器的TYPE LIBRARH的IAPPSERVER接口中定义了一个过程GETWORKYEAR供客户端调用!该过程有一个[IN,OUT] VARIANT*类型的参数,用于向客户端返回数据库查寻结果,开始时客户端运行正常,但后来再运行就报错‘THE APPLICATION HAS IMPEOPERLY DEFINED A PARAMETER OBJECT’。我怀疑是客户端调用过程时使用的参数没有赋值造成的,改程序试了一下错误依然,而且我查李维的书上也是这样写的代码,现在我糊涂了请各位帮忙!
服务端程序实现如下:
procedure TRMD_gzms.getworkyear(var vyear1: OleVariant);
var
icount1,icount2:integer;
begin
cds_workyear.close;//CDS_WORKYEAR为CLIENTDATASET组件连接一TQUERY
cds_workyear.CommandText :='select WORKYEAR from WORKYEAR';
cds_workyear.open;
if not cds_workyear.IsEmpty then
begin
icount2:=cds_workyear.RecordCount-1;
vyear1:=vararraycreate([0,icount2],varvariant);
cds_workyear.First ;
for icount1:=0 to icount2 do
begin
vyear1[icount1]:=cds_workyear.fieldbyname('workyear').value;
cds_workyear.Next ;
end;
end
else
vyear1:=0;
end;
客户端是在一个对话框的CREATE事件中调用该过程,如下:
procedure TDLG_Login.FormCreate(Sender: TObject);
var
varyear: variant;//未赋值!!
icount1,icount2:integer;
begin
dtp_logindate.date:=date;
dtp_logindate.time:=time;
dcomc_workyear.connected:=true;
dcomc_workyear.AppServer.getworkyear(varyear);//运行到此报错!!!!!!!!!
if (varisarray(varyear)) then
begin
icount2:=vararrayhighbound(varyear,1);
for icount1:=vararraylowbound(varyear,1) to icount2 do
begin
cb_year.Items.add(varyear[icount1]);
end;
end
else if (varyear=0) then
showmessage('先建立工资年度');
end;