Hallo,
ich arbeite noch nicht lange in Delphi. Habe zu meinem Thema viel gegoogelt und seh den Wald vor lauter Bäumen nicht mehr.
Folgendes:
Ich habe eine
SQL-Lite Datenbank in Delphi erstellt, welche Aufträge enthält (ID, ServicePartnerID, Auftragsart,..., SentToServer).
Habe verschiedene Queries erstellt, um den Auftrag zu erstellen, zu befüllen und zu laden.
Diese Vorgänge geschiehen alle in der App, wenn jemand die Aufträge bearbeitet etc.
Änderungen werden also bei mir in Delphi in die
SQL-Lite Datenbank in eine neue Tabelle (AuftraegeCache) gespeichert.
Nun möchte ich die bearbeiteten Aufträge auch, wenn Serververbindung besteht, ans Backend schicken.
Mein Plan:
- In einer
Unit eine MemTable mit den geänderten Aufträgen der AuftraegeCache-Tabelle laden
- Die Memtable durchgehen und auf den Boolean (SentToServer = false) prüfen
- Ist der Eintrag der Memtable auf false, geh in eine Warteschlange und warte dort so lange bis Verbindung zum Server besteht
- Wurde Verbindung zum Server hergestellt, versende den Auftrag an den Server
- Kommt eine Antwort vom Server, dass das Senden erfolgreich war, setzte das Feld SentToService auf True
- nächsten Eintrag der Memtable und alles von vorne-
Die Memtable zu befüllen, in einer
durch die Memtable gehen und auf
Code:
if FDMTAuftragCache.FieldByName('SentToServer') = false then
prüfen habe ich bereits gemacht..
Wie ich allerdings in der if-Anweisung eine Queue erstelle und den Auftrag dann an den Server schicke weiß ich allerdings überhaupt garnicht ...
Es wäre so lieb, wenn mir jemand hilft.
Ich weiß ihr braucht immer Code-Beispiele aber mehr als das was ich erklärt habe, habe ich derzeit nicht.
Delphi-Quellcode:
unit SendeCacheUnit;
interface
uses FireDAC.Comp.Client, FireDAC.Comp.DataSet, Data.DB,
Data.FireDACJSONReflect, DBHelperUnit;
procedure SendeCache(Sender: TObject);
implementation
procedure SendeCache(Sender: TObject);
Var
FDMTAuftragCache: TFDMemTable;
LDataSetList: TFDJsonDataSets;
begin
FDMTAuftragCache := TFDMemTable.Create(
nil);
//erstelle die Tabelle und füge Felder hinzu
FDMTAuftragCache.FieldDefs.Add('
id', ftInteger, 0, false);
FDMTAuftragCache.FieldDefs.Add('
ServicePartnerID', ftInteger, 0, false);
FDMTAuftragCache.FieldDefs.Add('
BenutzerID', ftInteger, 0, false);
FDMTAuftragCache.FieldDefs.Add('
Auftragsart', ftString, 0, false);
FDMTAuftragCache.FieldDefs.Add('
Status', ftString, 0, false);
FDMTAuftragCache.FieldDefs.Add('
Zeitstempel', ftString, 0, false);
FDMTAuftragCache.FieldDefs.Add('
ZeitstempelUpdate', ftInteger, 0, false);
FDMTAuftragCache.FieldDefs.Add('
SentToServer', ftBoolean, 0, false);
LDataSetList := DBHelperUnit.DBHelper.ladeAuftraegeCache;
//befülle die Tabelle durch die Datenbankabfrage
FDMTAuftragCache.AppendData(TFDJSONDataSetsReader.GetListValue
(LDataSetList, 0));
FDMTAuftragCache.Open;
while not FDMTAuftragCache.Eof
do //solange nicht am Ende Der Tabelle, geh durch die Tabelle
begin
if FDMTAuftragCache.FieldByName('
SentToServer') = false
then //wenn noch nicht an den Server gesendet wurde, geh in die Anweisung
begin
//hier soll der Eintrag in einer Queue warten, bis Serververbindung besteht und dann mittels HTTPs den Eintrag an den Server schicken..
//wenn dann Antwort vom Server kommt, wird der Boolean SentToServer auf true gesetzt und man beginnt mit dem nächsten Auftrag
end;
end;
end;
end.
Viele Grüße