起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 160|回复: 3

[分享]更新服务端数据的几种方式**

[复制链接]
发表于 2007-11-30 09:40:24 | 显示全部楼层 |阅读模式
平台上跟服务端交互有三层类:
事务TTransaction
  +--数据连接 TConnection
        +- 数据集 TDataSet

于是更新服务端数据就可以从这三个层次着手来处理了
回复

使用道具 举报

 楼主| 发表于 2007-11-30 14:17:27 | 显示全部楼层
数据集可以有:
  标准数据集、透视数据集  请参考 http://wiki.justep.cn/%E6%95%B0%E6%8D%AE%E9%9B%86
  存储过程数据集、存储过程  请参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=15936
  TQuery

TQuery举例:
var
  lConn: TConnection;
  lTrans: TTransaction;
  lDataSet: TDataSet;
  lHandle: TTransactionHandle;
  lQry: TQuery;
begin
  lQry := TQuery.Create(nil);
  lConn := TConnection.Create(nil);
  lTrans := TTransaction.Create(nil);
  try
    lConn.ConnectionString := 'DATABASEURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
    lConn.Transaction := lTrans;
    lQry.Connection := lConn;
    lQry.CommandText := 'Update CRM_PRODUCT set UOM=''2'' where PRODUCTID=:id';
    lDataSet := InfoBrokerXGSJXX.Info.DataSetByID('BZSJJ1');

    lHandle := lConn.Transaction.Start(True);
    try
      lDataSet.First;
      while not lDataSet.Eof do
      begin
        lQry.Params.ParamByName('id').AsString := lDataSet.Fields[0].AsString;
        lQry.Execute;
        lDataSet.Next;
      end;
      lConn.Transaction.Commit(lHandle);
    except
      lConn.Transaction.Rollback(lHandle);
      raise;
    end;
  finally
    lQry.Free;
    lConn.Free;
    lTrans.Free;
  end;
  Dialogs.Showmessage('ok');
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-30 14:19:01 | 显示全部楼层
数据连接TConnection
  function ExecuteSQL(SQLText: string; Params: TObject): Longint; overload;
  procedure ExecuteSQL(SQLText: string; Params: TParams; CheckRowsAffected: Longint; CheckRowsAffectedFailMessage: string); overload;
  function ExecuteSQL(SQLText: string): Longint; overload;

举例:
var
  lConn: TConnection;
  lParams: TParams;
  lParam: TDataParam;
  lSQL: String;
  lDataSet: TDataSet;
  lHandle: TTransactionHandle;
begin
  lParams := TParams.Create;
  lConn := TConnection.Create(nil);
  try
    lConn.ConnectionString := 'DATABASEURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
    lConn.Transaction := InfoBrokerXGSJXX.Info.Transaction;
    lParam := lParams.CreateParam(TFieldType.ftString, 'id', TParamType.ptInput);
    lSQL := 'Update CRM_PRODUCT set UOM=''2'' where PRODUCTID=:id';
    lDataSet := InfoBrokerXGSJXX.Info.DataSetByID('BZSJJ1');

    lHandle := lConn.Transaction.Start(True);
    try
      lDataSet.First;
      while not lDataSet.Eof do
      begin
        lParam.AsString := lDataSet.Fields[0].AsString;
        lConn.ExecuteSQL(lSQL, lParams, 1, '数据已被更改!');
        lDataSet.Next;
      end;
      lConn.Transaction.Commit(lHandle);
    except
      lConn.Transaction.Rollback(lHandle);
    end;
  finally
    lParam.Free;
    lParams.Free;
    lConn.Free;
  end;
  Dialogs.Showmessage('ok');
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-30 14:21:06 | 显示全部楼层
事务TTransaction
  procedure Execute(ServerCommandItem: TServerCommandItem);

举例:
var
  CMDExecuteSQL: TCMDExecuteSQL;
  lParam: TDataParam;
  lTransaction: TTransaction;
  lHandle: TTransactionHandle;
  lDataSet: TDataSet;
begin
  CMDExecuteSQL := TCMDExecuteSQL.Create;
  try
    CMDExecuteSQL.ConnectionString := 'DATABASEURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
    CMDExecuteSQL.CommandText := 'Update CRM_PRODUCT set UOM=''2'' where PRODUCTID=:id';
    lParam := CMDExecuteSQL.Params.CreateParam(TFieldType.ftString, 'id', TParamType.ptInput);
    CMDExecuteSQL.CheckRowsAffected := 1;
    CMDExecuteSQL.CheckRowsAffectedFailMessage := 'error';
    lTransaction := InfoBrokerXGSJXX.Info.Transaction;
    lDataSet := InfoBrokerXGSJXX.Info.DataSetByID('BZSJJ1');

    lHandle := lTransaction.Start(True);
    try
      lDataSet.First;
      while not lDataSet.Eof do
      begin
        lParam.AsString := lDataSet.Fields[0].AsString;
        lTransaction.Execute(CMDExecuteSQL);
        lDataSet.Next;
      end;
      lTransaction.Commit(lHandle);
    except
      lTransaction.Rollback(lHandle);
      raise;
    end;
  finally
    CMDExecuteSQL.Free;
  end;
end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-1 03:29 , Processed in 0.039448 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表