Einzelnen Beitrag anzeigen

ggscholz

Registriert seit: 20. Nov 2013
59 Beiträge
 
Delphi 11 Alexandria
 
#1

Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren

  Alt 27. Dez 2022, 14:38
Datenbank: Mariedb • Version: 10 • Zugriff über: UniDac
Hallo in die Runde,

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.

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.

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.

Hat jemand eine Idee, Beispiel oder Lösung, wie ich das Umsetzen könnte??

Beste Güße Gerd
Gerd
  Mit Zitat antworten Zitat