1. 程式人生 > 實用技巧 >delphi把Clientdataset的Delta儲存到資料庫

delphi把Clientdataset的Delta儲存到資料庫

 //ATableName-表名, AKeyField-主鍵,多個主鍵用;隔開,如 ;pid;times;  from:unit HlsImplBase;
function THlsImplBase.UpdateTableData(ATableName, AKeyField: AnsiString; var AData: Variant): Boolean;
var
  LSql: string;
  LDataSet: TDataSet;
  LProvider:  TProvider;
  LErrCount: Integer;
  I: Integer;
begin
  Result :
= False; if ATableName = '' then Exit; if AKeyField = '' then Exit; LSql := 'select * from ' + ATableName + ' where 1 = 2'; LDataSet := CreateDataSet(LSql); if not Assigned(LDataSet) then Exit; LProvider := TProvider.Create(nil); LProvider.UpdateMode := upWhereKeyOnly; LProvider.DataSet :
= LDataSet; AKeyField := LowerCase(AKeyField); for I := 0 to LDataSet.FieldCount - 1 do begin if (LowerCase(LDataSet.Fields[I].FieldName) = AKeyField) or (Pos(';' + LowerCase(LDataSet.Fields[I].FieldName) + ';', AKeyField) > 0) then LDataSet.Fields[I].ProviderFlags := LDataSet.Fields[I].ProviderFlags + [pfInKey]
else LDataSet.Fields[I].ProviderFlags := []; end; try try LProvider.ApplyUpdates(AData, -1, LErrCount); except end; Result := LErrCount = 0; finally LDataSet.Free; LProvider.Free; end; end;