[delphi]
view plain copy
//ATableName-表名, AKeyField-主键,多个主键用;隔开,如 ;pid;times; from:unit HlsImplBase;
[delphi] view plain copy
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 := to LDataSet.FieldCount - do
begin
if (LowerCase(LDataSet.Fields[I].FieldName) = AKeyField) or
(Pos(';' + LowerCase(LDataSet.Fields[I].FieldName) + ';', AKeyField) > ) then
LDataSet.Fields[I].ProviderFlags := LDataSet.Fields[I].ProviderFlags + [pfInKey]
else
LDataSet.Fields[I].ProviderFlags := [];
end;
try
try
LProvider.ApplyUpdates(AData, -, LErrCount);
except
end;
Result := LErrCount = ;
finally
LDataSet.Free;
LProvider.Free;
end;
end;