Delphi-PRAXiS
Seite 1 von 10  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Kundenliste (https://www.delphipraxis.net/192392-kundenliste.html)

EdAdvokat 14. Apr 2017 16:55

Datenbank: SQLite-3 • Version: 3 • Zugriff über: ZeosLib

Kundenliste
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, Ich taste mich so langsam an Datenbankanwendungen heran und habe nach vorangegangenen Übungen nun eine Erweiterung des Programms Warenverkauf geschrieben. Ich bedanke mich hiermit nochmals für die Hilfe im Forum,vor allem bei Hobbycoder, p80286 und Haentschmann, sowie weiteren usern die mir viele Tipps und Hinweise gegeben haben. Hoffentlich enttäusche ich Euch nicht mit dem jetzigen Versuch. Ich habe eine Objectlist erstellt und will mit deren Hilfe Daten in eine SQLite-3 Tabelle speichern und natürlich auch wieder auslesen.
Das hat soweit erst einmal geklappt. Die Daten wurden erstellt und in einem Listview dargestellt. Auch die Speicherung in die Datenbank klappt soweit ganz gut. Nach dem Neustart des Programms sind die automatisch erstellten Daten wieder vorhanden.
1. Frage: ich habe eine TCustomer.create erstellt. Muss ich das irgendwo auch wieder freigeben? Die Customerlist gebe ich in Destroy frei.
2. Frage: Die Datensätze werden nicht in den gesondert erstellten TEdit-Feldern angezeigt, ausgenommen die 2 am Ende der Tabelle(mit der KDNR 67). Ich kann mir nicht erklären warum und habe keinen Ansatz, um die Ursache zu ergründen. Komischerweise wird in den TEdit's nicht der entsprechende Datensatz des ListView sondern ein ganz anderer Datensatz der Tabelle angezeigt, der tatsächlich auch existiert.
Warum erscheinen die Daten nicht in den Edit-Feldern?
Also vermutlich werden nur die "fehlerhaften Datensätze" (KDNR 67) in den TEdits angezeigt. Was mache ich falsch, oder wie muss ich vorgehen?
Es handelt sich nur um ein Übungsprogramm ohne tiefen Sinn nur für mein Verständnis, um in der Sache weiter zu kommen.
Bin ich damit auf dem richtigen Weg?
Ich wünsche allen Forumnutzern ein frohes Osterfest.:thumb:

mkinzler 14. Apr 2017 17:11

AW: Kundenliste
 
Zitat:

Muss ich das irgendwo auch wieder freigeben?
Wenn die Liste der Eigentümer ist, nicht.
Zitat:

Die Customerlist gebe ich in Destroy frei.
Besser Free aufrufen.

EdAdvokat 14. Apr 2017 17:23

AW: Kundenliste
 
Create und Destroy:
Delphi-Quellcode:
procedure TFRMMainCustomer.FormCreate(Sender: TObject);
begin
  CustomerList:=TCustomerList.Create;
  connect;
end;

procedure TFRMMainCustomer.FormDestroy(Sender: TOBject);
begin
  CustomerList.Free;
end;
reicht das so?

DeddyH 14. Apr 2017 18:42

AW: Kundenliste
 
Sieht in Ordnung aus, sofern Du nicht explizit die OwnsObjects-Eigenschaft der Liste auf false gesetzt hast.

EdAdvokat 14. Apr 2017 19:08

AW: Kundenliste
 
ich frag mal ganz naiv: im listview die OwnerData-Eigenschaft im ObjectInspector steht auf false. Bei true sehe ich gar nichts.
Bin ich da an dem richtigen Punkt, oder wäre das eine andere Stellschraube? Was erreiche ich damit?

DeddyH 14. Apr 2017 19:50

AW: Kundenliste
 
Das OwnerData einer ListView besagt, ob diese im virtuellen Modus sein soll, der sehr effektiv bei großen Eintragszahlen ist. Ich meinte aber die OwnsObjects-Eigenschaft Deiner Objektliste, die festlegt, ob die enthaltenen Objekte automatisch freigegeben werden sollen, sobald sie aus der Liste entfernt werden.

EdAdvokat 14. Apr 2017 19:58

AW: Kundenliste
 
Zitat:

Das OwnerData einer ListView besagt, ob diese im virtuellen Modus sein soll, der sehr effektiv bei großen Eintragszahlen ist. Ich meinte aber die OwnsObjects-Eigenschaft Deiner Objektliste, die festlegt, ob die enthaltenen Objekte automatisch freigegeben werden sollen, sobald sie aus der Liste entfernt werden.
Da ich eher ein Greenhorn bin frage ich nochmals naiv, wo finde ich diese Einstellung OwnersObjects-Eigenschaften der Objectlist. Ich habe die Objectlist in einer gesonderten Unit (Daten-Unit gesondert erstellen, wie ich gelernt habe) erstellt und da läßt sich schwerlich was einstellen, oder sehe ich das falsch?

DeddyH 15. Apr 2017 06:00

AW: Kundenliste
 
Der Konstruktor der TObjectList hat einen Parameter, mit dem das eingestellt wird.

EdAdvokat 15. Apr 2017 07:36

AW: Kundenliste
 
Ich habe die objectlist lediglich im Hauptformular mit den Methoden erzeugt/wieder freigegeben:
Zitat:

procedure TFRMMainCustomer.FormCreate(Sender: TObject);
begin
CustomerList:=TCustomerList.Create;
connect;
end;

procedure TFRMMainCustomer.FormDestroy(Sender: TOBject);
begin
CustomerList.Free;
end;
reicht das oder muß man direkt in der Objectlist auch ein constructor create aufrufen?
Erkenntlich habe ich also überhaupt keine Schalter gesetzt. Wie und wo müßte man das tun?
Entschulige, es ist für mich Neuland.

SProske 15. Apr 2017 07:43

AW: Kundenliste
 
Beide (sowohl die nicht generische als auch die generische) TObjectList nutzen beim Aufruf
Delphi-Quellcode:
.Create
den internen Constructor

Delphi-Quellcode:
constructor Create(AOwnsObjects: Boolean = True); overload;

D.h. in diesem Falle wird der Defaultwert gezogen und der ist True. Wenn du also nirgendwo OwnsObjects der Liste setzt, steht es auf True.

In der Starter ist afaik leider kein Sourcecode enthalten, aber die Hilfe sollte das trotzdem ausspucken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Seite 1 von 10  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz