DataSnap——利用TParams进行多表事务更新
来源:互联网 发布:淘宝 买摩托车 编辑:程序博客网 时间:2024/05/20 11:24
服务端:
function TSVRDM.multUpdatesByPar(UpdateParam: TParams; out ErrMsg: string): OleVariant;const aSQL = 'Select * from %s where 1<>1';var i: Integer; lQuery: TADOQuery; lProvider: TDataSetProvider; conn: TADOConnection; ErrorCount, MaxErrors: Integer;begin Writeln(fguid + ':Mult-Table Update start ...'); conn := ConnPool.Lock(dbConnStr); lQuery := TADOQuery.Create(nil); lProvider := TDataSetProvider.Create(nil); Writeln(fguid + ': Start Transaction... '); conn.BeginTrans; try try lQuery.Connection := conn; lProvider.DataSet := lQuery; for I := 0 to UpdateParam.Count - 1 do begin Writeln(fguid + ': Update Table ' + UpdateParam[i].Name); lQuery.Close; lQuery.SQL.Clear; lQuery.SQL.Text := Format(aSQL, [UpdateParam[i].Name]); result := lProvider.ApplyUpdates(UpdateParam[i].AsBytes, 0, ErrorCount); ErrMsg := FErrMsg; if ErrorCount > 0 then raise Exception.Create(ErrMsg + '; TableName = ' + UpdateParam[i].Name); end; conn.CommitTrans; Writeln(fguid + ': Transaction commited... Update finished!'); except on E: Exception do begin conn.RollbackTrans; Writeln(fguid + ':Transaction rollbacked! Update ERROR :' + E.Message); end; end; finally lProvider.Free; lQuery.Free; ConnPool.Unlock(conn); FErrMsg := ''; end;end;客户端:
procedure TMyClient.btn1Click(Sender: TObject);var aParams: TParams; aPar: TParam; client: TDMClient; ErrMsg: string;begin// TClientDataSet的Data和Delta可用TParam.AsBytes直接传递 aParams := TParams.Create(nil); if ClientDataSet1.ChangeCount > 0 then begin aPar := aParams.CreateParam(ftVarBytes, '订单表', ptInput);//有可能是主表 aPar.AsBytes := ClientDataSet1.Delta; end; if ClientDataSet2.ChangeCount > 0 then begin aPar := aParams.CreateParam(ftVarBytes, '订单明细表', ptInput);//有可能是从表 aPar.AsBytes := ClientDataSet2.Delta; end; if aParams.Count = 0 then exit; client := TDMClient.Create(self.SQLConn.DBXConnection); try try client.multUpdatesByPar(aParams, ErrMsg); if ErrMsg <> '' then raise Exception.Create(ErrMsg) else begin ClientDataSet1.MergeChangeLog; ClientDataSet2.MergeChangeLog; end; except on E: Exception do begin showmessage(E.Message); end; end; finally client.Free; end;end;
转自:http://www.cnblogs.com/hnxxcxg/p/6897116.html
阅读全文
0 0
- DataSnap——利用TParams进行多表事务更新
- DataSnap开发:利用TParams进行多表事务更新
- 利用DataSnap进行数据流(TStream)的传递
- 利用游标循环进行更新插入的SQL事务语句
- 利用游标循环进行更新插入的SQL事务语句
- 利用跨表更新进行数据恢复
- 利用yum进行系统更新
- JobHarvest——利用springAOP进行运行性能测评(更新中)
- 利用双向循环链表进行显示更新
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- iOS 算法 简单的二分法
- java对象的管理
- 关于VS2017编辑C++出现的各种问题
- Markdown 语法
- R-学习记录-数组
- DataSnap——利用TParams进行多表事务更新
- Windows下安装.whl
- [LeetCode]106. Construct Binary Tree from Inorder and Postorder Traversal
- Java正则表达式
- Android基础类之BaseAdapter
- zzuli-2175: GJJ的日常之再游戏
- MySQL修改表的默认字符集和修改表字段的默认字符集
- malloc(),free()与realloc()
- 小项目练手-Day1