TDataViewSourceEDBUpdateAdd - Exemples

TDataViewSourceEDBUpdateAdd = class (TDataViewSourceExternalDB)Interface de TDataViewSourceEDBUpdateAddExemples de TDataViewSourceEDBUpdateAdd

Nous prendrons dans notre exemple le cas d'une base de données externe avec une table DATA défini comme suit :

Nom du champType du champ
TheDateDate
yearentier
monthentier
dayentier
hourentier
minuteentier
secondeentier
unit MyExternalDB;

interface

uses QubesDataViewsSources.ExternalDB, QubesDataViews;

type
   TDataViewSourceExternalDBTime = class(TDataViewSourceEDBUpdateAdd)
      public
         constructor Create(driver: String; parameters: array of string);
         function Restart(dataView: TDataView): string; override;
         function Update(dataView: TDataView; checkpoint: string): string; override;
   end;

implementation

uses SysUtils;

constructor TDataViewSourceExternalDBTime.Create(driver: String; parameters: array of string);
begin
   inherited Create(driver, parameters);
   FFieldsDef.Add('TheDate=TheDate');
   FFieldsDef.Add('year=year');
   FFieldsDef.Add('month=month');
   FFieldsDef.Add('day=day');
   FFieldsDef.Add('hour=hour');
   FFieldsDef.Add('minute=minute');
   FFieldsDef.Add('seconde=seconde');
   FFieldsType.Add(ftFloat, ftInteger, ftInteger, ftInteger, ftInteger, ftInteger, ftInteger);
end;

function TDataViewSourceExternalDBTime.Restart(dataView: TDataView): string;
var
   select : array of String;
begin
   for var i:=0 to dataView.Fields.Count-1 do begin
      select.Add(FFieldsDef.Values[dataView.FieldsSource[i]]);
   end;

   var q := 'select '+select.Join(',')+' from DATA order by '+dataView.PKFieldFormula;
   var dataSet := FDataBase.Query(q);
   Result := RestartDataView(dataView, dataSet);
end;

function TDataViewSourceExternalDBTime.Update(dataView: TDataView; checkpoint: string): string;
var
   select : array of String;
begin
   for var i:=0 to dataView.Fields.Count-1 do
      select.Add(FFieldsDef.Values[dataView.FieldsSource[i]]);
   var dataSet := FDataBase.Query('select '+select.Join(',')+' from DATA where '+dataView.PKFieldFormula+'>:checkpoint order by '+dataView.PKFieldFormula,[StrToFloat(checkpoint)]);
   Result := UpdateDataView(dataView, dataSet);
   if Result ='' then Result := checkpoint;
end;