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
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: Kundenliste

  Alt 15. Apr 2017, 09:05
Da du ja ein modernes Delphi hast - wieso verwendest du keine generische TObjectList. Damit würdest du dir das redeklarieren der ganzen TObjectList-Funktionalitäten sparen und deine TCustomerList sähe nur noch so aus (ohne IDE heruntergetippt kopiert und ungetestet):

Delphi-Quellcode:
  TCustomerList=class(TObjectList<TCustomer>)
    procedure LoadFromDB(con: TZConnection);
    procedure SavetoDB(con: TZConnection);
  public
    function AddCustomer(KDNR: integer; Name: string; Vorname: string; Firma: string; Produkt: string; Anzahl: Integer; Preis: Currency):integer;
  end;
Und ja, da du das Create nicht überschreibst, rufst du das Create der Vorgängerklasse (TObjectList) auf.

Und ja, der Sourcecode könnte ebenfalls erleuchtend wirken. Ein Strg+Click auf TCustomerList.Create sollte dich an die richtige Stelle führen.
Sebastian
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Kundenliste

  Alt 15. Apr 2017, 11:57
Leider erhellt sich bei mir wenig. Sicher fehlen mir noch immer einige Grundlagen.
1.Könnte ich also die gepostete unit so verwenden, wie sie ist ohne expliziten Aufruf des constructors?
2.Das Thema generische Listen ist mir völlig neu und muss ich erst einmal recherchieren. Habe mir zwischenzeitlich die unit contnrs angesehen.
Wenn ich nun den Vorschlag von SProske aufgreife scheitere ich bereits bei den < und > bei <TCustomer>. Da meckert ganz Tokyo.
Nehme ich den Passus raus will er doch einiges Gedöns aus der unit contnrs.
So lasse ich es erst einmal mit meinem redundanten Code, bis ich mich schlauer gemacht habe.
3. gibt es ein Tutorial zum Thema generischen Listen?
Norbert
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Kundenliste

  Alt 15. Apr 2017, 12:09
1. Ja, entscheidend ist der Aufruf von TCustomerList.Create , wo auch immer das dann tatsächlich geschieht.
2. Du musst die unit System.Generics.Collections einbinden.
Sebastian
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Kundenliste

  Alt 15. Apr 2017, 16:38
Hallo,
Zitat:
Da du ja ein modernes Delphi hast - wieso verwendest du keine generische TObjectList. Damit würdest du dir das redeklarieren der ganzen TObjectList-Funktionalitäten sparen und deine TCustomerList sähe nur noch so aus
Das hat nun geklappt und in der Tat ist der Quelltext erheblich kürzer und es funktioniert sogar
Doch wenn ich die Daten lade rödelt meine Maschine und teilt mir dann schlussendlich mit, "zuwenig Arbeitspeicher" obwohl ich 16 MB habe und nichts speicherfressendes läuft. Da ist doch was faul? Wo könnte ich da suchen?
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kundenliste

  Alt 15. Apr 2017, 17:53
Du liest immer denselben Datensatz ein, da Du nie auf den nächsten wechselst. Soll heißen, da fehlt ein Next in Deiner Schleife.
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
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Kundenliste

  Alt 15. Apr 2017, 21:05
Danke erst einmal für die Hilfe. Die Anzeige in den Edit-Feldern klappt nunmehr. Will ich jedoch einen Datensatz löschen oder bearbeiten erhalte ich die Fehlermeldung "Argument außerhalb des Bereiches". Also in beiden Fällen die gleiche Meldung. Wo sollte ich nun nach welchem Problem suchen. Blöd ist nur, dass ein F1 nicht weiterhilft und der Fehler nur beim Click auf die jeweiligen Button, also beim Aufruf der Methoden erscheint. Was möge denn gemeint sein mit "...außerhalb des Bereiches.."?
Dann habe ich mir die Methode LoadfromDB angesehen, die dazu führt, dass nicht genügend Arbeitsspeicher vorhanden sei. Da kann ich jedoch nichts feststellen.
Delphi-Quellcode:
procedure TCustomerList.LoadFromDB(con: TZConnection);
var
  zqyMain: TZQuery;
  Customer: TCustomer;
begin
  zqyMain:=TZQuery.Create(nil);
  Try
    self.Clear; //Dank TObjectlist werden auch alle bereits vorhandenen Objecte automatisch freigegeben
    zqyMain.connection:=con;
    zqyMain.sql.text:='SELECT * FROM WARENVERKAUF1';
zqyMain.active:=True;
while not zqyMain.eof do
begin
  Customer:=TCustomer.Create;
  Customer.KDNR:=zqyMain.fieldbyname('KDNR').AsInteger;
  Customer.Name:=zqyMain.fieldbyname('Name').AsString;
  Customer.Vorname:=zqyMain.fieldbyname('Vorname').AsString;
  Customer.Firma:=zqyMain.fieldByName('Firma').AsString;
  Customer.Produkt:=zqyMain.fieldbyname('Produkt').AsString;
  Customer.Anzahl:=zqyMain.FieldByName('Anzahl').AsInteger;
  Customer.Preis:=zqyMain.fieldbyname('Preis').AsCurrency;
  self.Add(Customer);
end;
  zqyMain.active:=False;
Finally
  zqyMain.free;
End;
end;
Da hänge ich also fest.
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kundenliste

  Alt 16. Apr 2017, 06:47
Ich hatte es doch geschrieben: sobald auch nur ein Datensatz enthalten ist, wird Eof nie eintreten, solange Du Deine Datenmenge nicht mit Next auf den nächsten Datensatz positionierst.
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
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 01:10 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