三层中函数返回olevariant数组……####(50分)

  • 主题发起人 主题发起人 AK-47
  • 开始时间 开始时间
A

AK-47

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样从服务器的方法中传回olevariant数组?
例如:
login(uid:BSTR;OUT User_info:olevariant);
bgein
......
olevariant[1]:=adoquery.fieldbyname('name').value;
olevariant[2]:=adoquery.fieldbyname('name').value;
......
end;
我想在参数User_info中反回用户信息,在客户端调用
请问在服务端怎么返回这种数组,在客房端又怎么样调用反回的参数???
 
在中间层定义一个函数用来更新数据
function Tgetdataup.updatetb(t: OleVariant): Integer;
var i:integer;
begin
result:=0;
try
cn.begin
Trans;
if (varisarray(t)) then
for i:=VarArrayLowBound(t,1) to VarArrayHighBound(t,1)do
begin
proc.Parameters.ParamByName('@tempym').Value:=trim(t[0]);
proc.Parameters.ParamByName('@tempsl').value:=t[1];
proc.ExecProc;
end;
cn.CommitTrans;
result:=1;
except
cn.RollbackTrans;
result:=0;
end;

end;

在客户端传递表中获取的数据信息
procedure TForm1.Button1Click(Sender: TObject);
var tempt:olevariant;
i:integer;
tempym:widestring;
tempsl:integer;
begin
cds.First;
i:=0;
tempt:=vararraycreate([0,cds.RecordCount-1],varvariant);//注意这儿应该是recordcount-1
while not cds.Eofdo
begin
tempym:=cds['ym'];
tempsl:=cds['ypsl'];
tempt:=vararrayof([tempym,tempsl]);
i:=i+1;
cds.Next;
end;
if (skt.AppServer.updatetb(tempt))=1 then
showmessage('更新成功!!')
else
showmessage('更新失败!!');
end;
 
楼上的兄弟好像没有理解我的意思,我是说从服务器上返回olevariant数组
login(uid:BSTR;OUT User_info:olevariant);//服务器上的方法,User_info是要返回给客户端的数组
bgein
......
olevariant[1]:=adoquery.fieldbyname('name').value;//给数组付值
olevariant[2]:=adoquery.fieldbyname('name').value;
......
end;
在客户端调用
v:olevariant;
sckconn.appserver.get_user_info('123',v);
edit1.text:=v[1];
edit2.text:=v[2];
 
//服务端
procedure TEasyDCOMserver.GetAllTables(var vTables: OleVariant);
var
tbList: TStringList;
iCount: Integer;
begin
tbList := TStringList.Create;
try
conn.GetTableNames(tbList);
vTables := VarArrayCreate([0, tbList.Count - 1], varVariant);
for iCount := 0 to tbList.Count - 1do
vTables[iCount] := tbList[iCount];
finally
tbList.Free;
end;
end;

//客户端
procedure TForm1.btn_connClick(Sender: TObject);
var
vtbList: Variant;
iCount: Integer;
begin
DCOMConnection1.Connected := True;
ADOQuery1.Open;
DCOMConnection1.AppServer.GetAllTables(vtbList);
if VarIsArray(vtbList) then
begin
for iCount := VarArrayLowBound(vtbList, 1) to VarArrayHighBound(vtbList, 1)do
lbtables.Items.Add(vtbList[iCount]);
end
end;
 
急…!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
现在有个新的问题请大家指教:
我在中间层的RDM中放了个adoquery设它的SQL为:
select t1.yhmc,t1.kl,t2.smc
from sys_xt002 t1,sys_xt012 t2
where t1.zcm =:ZCM
在客户端调用时老是返回0条记录,实际应该返回<>0的记录数
问这种查询支持多表连结吗?
 
客户端的参数没有设置,记录当然是0
 
后退
顶部