Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tlist wird nicht richtig gefüllt (https://www.delphipraxis.net/119574-tlist-wird-nicht-richtig-gefuellt.html)

XXcD 28. Aug 2008 15:24


Tlist wird nicht richtig gefüllt
 
Hallo,
ich schreibe an einem NonVCL Programm und möchte eine TList mit meinen Accountdaten füllen.
Die Daten werden auch richtig in die Liste eingetragen, aber sobald ich die Daten aus der Liste auslesen möchte zeigt der mir von den zwei Accounts zweimal den zweiten an.

Hier mal der Code:
Delphi-Quellcode:
  type
  TAccounts = class(TObject)
    ID   : Integer;
    Name : String;
    Passwort   : String;
    ban     : integer;
  end;

...

  q:='select * from user;';
  FResult := FMysql.query(q, true, ex);
  if ex then
  begin
  ListAccounts:= TList.Create;
  Account:= TAccounts.Create;
  FResult.First;
   for I := 0 to FResult.RowsCount - 1 do
   begin
    Account.ID      := strtoint(Fresult.FieldValuebyname('id'));
    Account.Name    := Fresult.FieldValuebyname('username');
    Account.Passwort := Fresult.FieldValuebyname('password');
    Account.ban     := strtoint(Fresult.FieldValuebyname('ban'));
    ListAccounts.Add(Account);
   FResult.Next;
   end;

...

   for E := 0 to SQL.ListAccounts.Count -1 do
   begin
   Account := SQL.ListAccounts.Items[E];
   WriteLN('Name: '+Account.Name+' | '+'ID: '+inttostr(Account.ID));
   end;
Das Ergebnis in der Konsole ist:
Name: test | ID: 2
Name: test | ID: 2

Eigentlich müsste es aber so aussehen:
Name: XXcD | ID: 1
Name: test | ID: 2

Wo könnte da der Fehler liegen?

DeddyH 28. Aug 2008 15:27

Re: Tlist wird nicht richtig gefüllt
 
Das
Delphi-Quellcode:
Account:= TAccounts.Create;
muss natürlich mit in die For-Schleife, sonst legst Du keinen neuen Account an, sondern überschreibst den bestehenden.

Roachford 28. Aug 2008 15:27

Re: Tlist wird nicht richtig gefüllt
 
Zitat:

Zitat von XXcD
Wo könnte da der Fehler liegen?

Vielleicht daran, dass du nur ein Objekt erzeugst und dieses eine ständig erneut hinzufügst?

XXcD 28. Aug 2008 15:39

Re: Tlist wird nicht richtig gefüllt
 
Lol wenn ich Account:= TAccounts.Create; in die for Schleife einfüge funktioniert es.
Ich dachte Account wäre nur temporär da das in die ListAccounts eingefügt wird und beim auslesen
wieder in Account geladen wird.

DeddyH 28. Aug 2008 15:41

Re: Tlist wird nicht richtig gefüllt
 
Nee nee, die einzelnen Objekte müssen auch alle erzeugt werden. Wieso nimmst Du eigentlich keine TObjectList statt TList?

I.A 28. Aug 2008 15:46

Re: Tlist wird nicht richtig gefüllt
 
Hallo XXcD!

Mich wundert, das es jetzt funktioniert: Du sagst, das Dein TList Objekt nicht funktioniert, aber Du hast geschrieben:

Delphi-Quellcode:
type
  TAccount = class(TObject)
   ...
  end;
statt:

Delphi-Quellcode:
type
  TAccount = class(TList)
   ...
  end;
In TList hast Du alles, was Du für Deine Liste brauchst. Warum da ein neues Listenobjekt?

DeddyH 28. Aug 2008 15:48

Re: Tlist wird nicht richtig gefüllt
 
TAccounts ist die Deklaration eines Objekts. Mit diesen Objekten will er seine Liste befüllen, das ist doch völlig korrekt.

XXcD 28. Aug 2008 15:58

Re: Tlist wird nicht richtig gefüllt
 
Wenn ich jetzt direkt ne TList nehme ist das doch bestimmt ein wenig Ressourcen schonender.
Aber wie kann ich das umsetzen?

So siehts bei mir bis jetzt aus:
Delphi-Quellcode:
    type
  TAccounts = class(TList)
    ID   : Integer;
    Name : String;
    Passwort   : String;
    ban     : integer;
  end;
...

  q:='select * from user;';
  FResult := FMysql.query(q, true, ex);
  if ex then
  begin
    Account:= TAccounts.Create;
  FResult.First;
   for I := 0 to FResult.RowsCount - 1 do
   begin
   test.
    Account.ID      := strtoint(Fresult.FieldValuebyname('id'));
    Account.Name    := Fresult.FieldValuebyname('username');
    Account.Passwort := Fresult.FieldValuebyname('password');
    Account.ban     := strtoint(Fresult.FieldValuebyname('ban'));
    // Wie gehts denn hier weiter???<---------------------------------
   FResult.Next;
   end;

spaxxn 28. Aug 2008 15:59

Re: Tlist wird nicht richtig gefüllt
 
Ehm, du hast nun kein Objekt, mit dem du die Liste füllen könntest!

Hast du dich schon mal mit Listenverwaltung beschäftigt?

Würde sagen, dass du dir erstmal Grundlagenwissen aneignen solltest...

XXcD 28. Aug 2008 17:14

Re: Tlist wird nicht richtig gefüllt
 
Ja hab mich schon mit Listenverwaltung beschäftigt, aber bisher noch nie in NonVCL.
Ich möchte auch eigentlich nur die Tabelle von meiner MySQL Datenbank direkt ins Programm laden und wenn sich einer einloggt, sollen die Daten aus der Liste genommen werden.

Wenn es da noch bessere Möglichkeiten gibt, als die die ich im Moment habe gebt mir bitte etwas code womit ich nen wenig lernen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz