往数据库保存数据更新日志

 

function TNSHTLinkPrjServer.UpdateData(const delta: Binary;
  const sTableName: UnicodeString; const sAppId: UnicodeString): Variant;
{ =============================================================================
  用来更新数据包日志的更新过程,不被外面调用
  =============================================================================
}
var
  errcnt: Integer;
  RdataRec: TRdataRec;
  source: TROBinaryMemoryStream;
  decstream: TDecompressionStream;
  comStream: TCompressionStream;
  sAccount: string;
begin

  // 判断版本
  if Copy(After('_', UncrypStr(sAppId, strkey)), 1, 4) <> 'sage' then
  begin
    try
      StrToInt('y')
    except
      on e: Exception do
        raise Exception.Create('非授权客户端程序(含图片更新)!');
    end;
  end;

  if not JugeUsered(UncrypStr(sAppId, strkey)) then
    Exit; // 非法用户不能进入

  sAccount := Trim(GetAccount(UncrypStr(sAppId, strkey)));

  if (not ADOConnection1.Connected) or (not SQLConnection1.Connected) then

    Connect2DataBase(sAccount);

  try

    RdataRec.deltas.Add(delta);
    RdataRec.sTableName.Add(sTableName);
    // cds 的命名规则为ProviderName:中文名称_表名
    RdataRec.bChecked := True;
    RdataRec.iiCount := 0;

    result := 0;

    ADOQuery1.Close;

    ADOQuery1.SQL.Text := 'select * from ' + sTableName + '  where 1=0';

    ADOQuery1.Open;

    dsSetWhere(ADOQuery1, ADOQuery2, sTableName);

    decstream := TDecompressionStream.Create(delta);

    decstream.Position := 0;

    cdsdataset.LoadFromStream(decstream);

    DataSetProvider.ApplyUpdates(cdsdataset.Data, 0, errcnt);
    // 保存操作日志
    SaveLogRecord(RdataRec, sTableName, sAppId);
    //
    if (errcnt > 0) then
    begin
      result := 1;
      raise Exception.CreateFmt('There were %d errors', [errcnt]);
    end;
  finally
    ADOQuery1.Close;
    decstream.Free;
  end;

end;

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值