江湖救急!!!传输数组(100分)

  • 主题发起人 主题发起人 dzx2004
  • 开始时间 开始时间
D

dzx2004

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟我初学三层开发,遇到了一个难题,客户端打开界面前要在的多个在combobox中添加多个数据表中的某个字段的值,在客户端一个个查询表然后取得要添加的值是不是太慢,我准备在中间的应用层写代码,然后传递,我想用数组,但不知道这样传递,最好能有参考性质的代码,望各位大虾不啬赐教。
 
将数据类型定义为OleVariant类型,可以直接将记录集返回
OleVariant1 : OleVariant;
DataSetProvider1.DataSet := Query1;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text := 'SELECT ...';
Query1.Open;
OleVariant1 := DataSetProvider1.Data;
//将OleVariant1作为参数返回
...
 
传送方,
var
DataVar;
begin
DataVar:=VarArrayCreate([0,100],varVariant);
end;
中间层,把这个DataVar收到后,就可以用如下办法访问了。
DataVar[0],,DataVar[99].
end;
 
下面是一个更新的例子,获取就是逆向操作改改就行了
就是中间层是个procedure gettb(var t:OleVariant);
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);

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;
 
后退
顶部