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;