Einzelnen Beitrag anzeigen

Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren

  Alt 29. Dez 2022, 08:38
in meinem Lagerprogramm werden regelmäßig größere Mengen Kartonware auf festgelegte Plätze eingelagert. Größere Mengen sind 100 Stück, vielleicht werden es auch mal 200 aber eher sind es regelmäßig 20 - 50 Stück. Ich weiß, diese Mengen sind für eine DB eher Kleinstmengen und damit schnell verarbeitet.
Die Notwendigkeit, sich mit der Verarbeitungsgeschwindigkeit zu beschäftigen liegt an einem höheren aufkommen an Arbeitsplätzen, die regelmäßig die DB nutzen und, jetzt neu, ein Außenlager, das per VPN die PC's dort ins lokale Netzt einbindet und/oder ein Remotedesktop als Arbeitsplatz. Das gibt dann doch immer mal wieder Fehler. Eine Möglichkeit sehe ich in der Verarbeitungsgeschwindigkeit des Update-Prozesses per SQL. Auf die Ausgestaltung des Netzwerks habe ich keinen Einfluss und DSL oder eine Standleitung bringt auch keine zuverlässige Geschwindigkeit bei der Verbindung.
Denk mal über einen kleinen Rest-Server nach, mit RTC (RealThinClient, open source) habe ich übers Internet vor Jahren schon tausende von SQLs pro Sekunde abgesetzt.

Bisher lese ich die einzulagernden Produkte per Scanner in eine Liste ein, es werden ein paar Daten aus einer anderen DB ergänzt und für die weitere Verarbeitung in einer MEM Table auf dem PC vorgehalten. Über ein SELECT werden alle freien Plätze im Lager in der entfernten MariaDb gesucht und über weitere Kriterien aus der vorher erstellten Liste wird dann passend zum Produkt diese Abfrage gefiltert und mit einem UPDATE... der erste Datensatz als Lagerplatz für das Produkt bestimmt. Gibt es keine passenden Plätze mehr (kein Datensatz entspricht den Kriterien) bekomme ich das mit und kann darauf reagieren.
Wie gesagt, lieber eine Tabelle, die die einzelnen Bewegungen enthält und dann mit SUM kannst rauskriegen, wieviel Du jeweils von einem Produkt an einer Stelle hast.

Ich habe jetzt mit einigen Varianten testweise mit 1000 Datensätzen herumexperimentiert: Die Update-Befehle in einer StringList gesammelt und dann an Query1.SQL.Text übergeben oder wie hier von Devart beschrieben, mit einem Array für die Parameter gearbeitet. Das Beschleunigt das Update mindestens um den Faktor 10 , ich bekomme aber keine Rückmeldung, wenn ein einzelner Update Befehl nicht richtig ausgeführt wird, bzw, es fehlen mir auch zu einem erfolgreichen Updatevogang jegliche Informationen, was an welchem Datensatz geändert wurde.

Diese Rückmeldung, ob, und wenn ja, wo jetzt das Produkt eingelagert werden soll benötige ich aber.
Da Du ja UniDAC benutzt, schau Dir doch mal UniScript an, die machen Fehlerbehandlung und lassen Dich viele Befehle auf einmal absetzen.
  Mit Zitat antworten Zitat