AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kundenliste

Ein Thema von EdAdvokat · begonnen am 14. Apr 2017 · letzter Beitrag vom 22. Apr 2017
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#1

AW: Kundenliste

  Alt 20. Apr 2017, 06:26
Beim Einfügen machst Du ein INSERT, beim Ändern ein UPDATE. Wie kommst Du jetzt darauf, dass ein Datensatz ohne DELETE aus der DB verschwinden sollte?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Kundenliste

  Alt 20. Apr 2017, 07:58
Blätter mal ein zwei Seiten zurück. Da haben Hobbycoder (meine ich) und ich dich schon mehrfach darauf hingewiesen, dass genau das passieren wird mit dem Löschen und auch warum. Darüberhinaus haben wir auch Lösungsansätze genannt. Fasse aber nochmal zusammen:

Hintergrund. Du löschst das aus der CustomerList. Dann rufst du SaveToDB auf, dabei werden alle Einträge der CustomerList entweder neu "Inserted" (wenn ID=-1) oder "Upgedated". Aber was passiert mit Einträgen die nicht mehr in der CustomerList sind, da gelöscht? Natürlich nix.

Mögliche Lösungsmöglichkeiten (s.o.):
a) Beim Delete der CutomerList den Datensatz gleich in der DB mit löschen

b) Bei SaveToDB erstmal einen Teil einbauen, der alle Datensätze in der Db löscht, bevor SaveToDB dann wie gehabt ausgeführt wird.

c) Eine zweite Liste ala DeletedCustomers führen (innerhalb der CustmerList Klasse?) und beim Deleten eines Customers diesen (oder seine ID) da eintragen, bevor er aus der eigentlichen CustomerList gelöscht wird. Bei SaveToDB zunächst wie gehabt vorgehen, dann für alle Elemente in DeletedCustomers ein Delete-Statement an die DB schicken.

d) Dem CustomerObjekt eine neue Eigenschaft "Status" oder so mitgeben, die (nur als Beispiel) beim Laden erst mal auf 0 gesetzt wird. Wird der Cutomer bearbeitet (oder neu angelegt) auf 1 setzen, wird er gelöscht auf -1 setzen. Dann in SaveToDG erst gucken ist Status 0 - nichts machen. Ist Status -1 - Delete Statement absetzen, ist Status 1 - schauen ist ID-1 - Insert Statement, sonst Update Statement.
Das heißt natürlich auch, dass ein Custumer in der CustomerList nicht mehr gelöscht wird, sondern nur sein Status auf -1 gesetzt wird.


a) b) und c) sind am einfachsten umzusetzen, b) ist aber mMn am Besten, weil beim speichern nicht immer alle Datensätze in die DB geschrieben werden, nur die, wo sich was ändert. Das macht SavToDB viel schneller. (Warnung: Dabei sind als Folge aber die CustomerList und die ListView ggf. nicht mehr synchron!!!).
Ralph

Geändert von Jumpy (20. Apr 2017 um 08:04 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.017 Beiträge
 
#3

AW: Kundenliste

  Alt 20. Apr 2017, 09:23
Also mal so generell:
Ein Programm folgt immer der Logik des erstellten Sourcecode, und das peinlich genau. Es berücksichtigt nur die Funktionen, die du ihm mitgibst.
Das heißt im Umkehrschluss, dass es deine Aufgabe als Entwickler ist, alle benötigten Funktionen bereitzustellen und alle Eventualitäten zu berücksichtigen.
Also musst du als allerersten einmal dir alle Funktionen, die dein Programm erfüllen soll, definieren (auf Papier, oder im Kopf). Dann jede Funktion in kleineren Einzelschritte zerlegt, deren Aufgabe möglich klein und unabhängig vom Gesamtergebnis sind.
Das so wie bei einem Architkten. Als erstes legt er erst eine Gundsätzlichen Grundriss fest, auf Basis der Anforderungen an das Gebäuse. Erst danach werden die Detail der einzelnen Räume festgelegt. Anschließend werden für die Gewerke die Anforderungen z.B. die Art und Maße der Fenster festgelegt, die an den Glaser übergeben wird, damit er die Fenster fertigen kann, ohne aber das Gebäude zu kennen.

Wird jetzt aber vom Architekten etwas vergessen, z.b keine Türen, dann hat das Haus hinterher halt keine Türen. Das ist aber dem Glaser, Elektriker und Maler total egal.

Soll unterm Strich heißen, mach dir einen Plan. Denk über alles in Ruhe nach, und gehe jeden Schritt einzeln durch, und prüfe, ob er unabhängig vom Rest das macht, was er soll, und ob du dabei nicht irgendwas vergessen hast.
Nimm dir die Zeit zu verstehen wie alles funktioniert und auch warum jetzt das eine oder andere nicht funktioniert. Wenn du die Funktionsweise von etwas nicht verstehst oder du unsicher bist, dann mach die dir erst mal klar. Es gibt Unmengen Tutorials im Internet zu SQL, Objektlisten und Datenverwaltung.
Und die Hinweise, die du hier erhältst, solltest du auch nicht blind reinkopieren, sondern deren Sinn verstehen und dann selbst umsetzten.
Auch der Umgang mit dem Debugger sollte dir geläufig sein, den er ist das beste Hilsmittel bei deiner Suche nach deinen Fehlern.
Das kann die keiner abnehmen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz