想在中间层中定义一个过程更新客户端传来的数据集
但不知用什么类型的参数来传递这个数据集
打个比方
如果是在客户端做这个更新过程的话可以这么定义过程
procedure updatethisdata(thistable:TADOTable);
begin
thistable.first;
try
ADOConnection1.BeginTrans;
while not thistable.eof do
begin
ADOStoredProc1.Parameters.ParamByName('字段1').value:=thistable['字段1'];
ADOStoredProc1.Parameters.ParamByName('字段2').value:=thistable['字段2'];
ADOStoredProc1.ExecProc;
end;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
end;
end;ADOStoredProc1是一个更新数据的存储过程
但现在要把上面的过程放在中间层中,这个过程应该怎么写
但不知用什么类型的参数来传递这个数据集
打个比方
如果是在客户端做这个更新过程的话可以这么定义过程
procedure updatethisdata(thistable:TADOTable);
begin
thistable.first;
try
ADOConnection1.BeginTrans;
while not thistable.eof do
begin
ADOStoredProc1.Parameters.ParamByName('字段1').value:=thistable['字段1'];
ADOStoredProc1.Parameters.ParamByName('字段2').value:=thistable['字段2'];
ADOStoredProc1.ExecProc;
end;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
end;
end;ADOStoredProc1是一个更新数据的存储过程
但现在要把上面的过程放在中间层中,这个过程应该怎么写
解决方案 »
- Could not compile used unit 'BlDBEdit.pas'
- 如何删除Listview中重复的Items.Caption?
- 把图片放入xml文件中
- 程序启动问题
- 分割窗体的问题,分不够可以加
- Delphi调用DLL的问题,请大家帮忙!
- 这句C++语句用pascal怎么表达呢??
- 救火:CoolControls for D6 在什么地方有?谢谢
- 请想找工作的关注,我学了VC,VB,DELPHI,BCB,可到人才市场转一转,却发现许多看不懂的名词,请各位高手和过来人指点指点(虽然没有分但请大家多帮忙)..
- 真奇怪,为何pagecontrol不执行onchange事件,谁能救救我
- 关于一个一个控件的疑惑
- 要面试了,请大家给小弟点意见?
里头的参数DeltaDS就是客户端传过来的ClientDataSet;不过
你要注意只有ClientDataSet被修改过的数据才会传过来。
最后你的存储过程执行完了之后,还要继续更新ClientDataSet
的呼,记得:Applied:=false;
实现一个方法,参数就用OleVariant。在客户端更新数据的时候调用这个
服务器方法。
var i:integer;
begin
result:=0;
try
cn.BeginTrans;
if (varisarray(t)) then
for i:=VarArrayLowBound(t,1) to VarArrayHighBound(t,1) do
begin
proc.Parameters.ParamByName('@tempym').Value:=trim(t[i][0]);
proc.Parameters.ParamByName('@tempsl').value:=t[i][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.Eof do
begin
tempym:=cds['ym'];
tempsl:=cds['ypsl'];
tempt[i]:=vararrayof([tempym,tempsl]);
i:=i+1;
cds.Next;
end;
if (skt.AppServer.updatetb(tempt))=1 then
showmessage('更新成功!!') else
showmessage('更新失败!!');
end;