版权声明:本文为博主原创文章,未经博主允许不得转载。
- //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;