Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Anzahl der Datensätze einer Tabelle ermitteln (https://www.delphipraxis.net/106777-anzahl-der-datensaetze-einer-tabelle-ermitteln.html)

marabu 21. Jan 2008 13:32

Re: Anzahl der Datensätze einer Tabelle ermitteln
 
Hallo Fake,

du machst dir das vielleicht ein wenig zu schwer. Den letzten Teil deines Codes könntest du auch so schreiben:

Delphi-Quellcode:
//  ...
//  iCounter := 0;

while not tMandant.EOF do
begin
  cbMandant.Items.AddObject(Format('%d - %s', [
    tMandant.FieldByName('Mandantennummer').AsInteger,
    tMandant.FieldByName('Bezeichnung').AsString,
    Pointer(tMandant.FieldByName('Mandantennummer').AsInteger)
  ]));
  tMandant.Next;
end;
Du brauchst den iCounter doch eigentlich nirgends. Und den Schlüssel habe ich im Objects-Array der ComboBox-Strings abgelegt. Da kommst du dann leicht wieder dran:

Delphi-Quellcode:
with cbMandant do
  iMandant := Integer(Objects[ItemIndex]);
Viel Erfolg mit deinem Projekt.

f4k3 21. Jan 2008 13:45

Re: Anzahl der Datensätze einer Tabelle ermitteln
 
Klingt zumindest sehr logisch ... und vor allem wesentlich kürzer ;)

Zitat:

Zitat von marabu

Delphi-Quellcode:
//  ...
//  iCounter := 0;

while not tMandant.EOF do
begin
  cbMandant.Items.AddObject(Format('%d - %s', [
    tMandant.FieldByName('Mandantennummer').AsInteger,
    tMandant.FieldByName('Bezeichnung').AsString,
    Pointer(tMandant.FieldByName('Mandantennummer').AsInteger)
  ]));
  tMandant.Next;
end;

allerdings hätt ich noch ein paar fragen ... Pointer (= zeiger nehm ich an) muss extra deklariert werden oder? zumal der Pointer doch bei jedem durchlauf
seinen Wert ändert ... ich versteh da grad den bezug nicht.
Ich hab ja ein globals Array deklariert, um bei jedem durchlauf meinen Schlüssel zu speichern, damit ich weiß aus welcher Zeile ich mir die Mandantennummer in der Datenbank holen muss. Soweit ich weiß, sind Pointer, Zeiger die auf bestimmte Adressen zeigen, die sich doch hier mit jedem durchlauf ändern?!

Sorry ... ich weiß ich hab nachholbedarf ... wär net wenn du mir dazu ne erklärung liefern könntest.

Weiter zu frage 2:
Zitat:

Zitat von marabu
Delphi-Quellcode:
with cbMandant do
  iMandant := Integer(Objects[ItemIndex]);

also mit cbMandant tue ich den Schlüssel (so wie ich rausgelesen habe) in iMandant speichern.
Welchen Schlüssel? alle "gesammelten"?

Entschuldige, zwar ne sehr gute lösung, und vor allem noch schnell aber ich begreif nicht was dahinter geschiet ... und des wär zumindest sehr hilfreich für z.B. die Zukunft ... ich dank dir trotzdem sehr ;)

f4k3

marabu 21. Jan 2008 14:46

Re: Anzahl der Datensätze einer Tabelle ermitteln
 
Die von der ComboBox verwaltete StringList beherbergt intern zwei Felder: Strings[] und Objects[]. Objects[] darfst du frei verwenden und ich habe dir gezeigt, wie du durch den Typecast nach Pointer() die Mandantennummer dort ablegen kannst, obwohl Objects[] ja eigentlich ein Zeigerfeld ist.

Beim Zugriff auf das vom Benutzer ausgewählte Item in der ComboBox wird der ItemIndex entsprechend gesetzt und durch die Rückwandlunbg des Zeigers in eine Integer speichere ich die ausgewählte Mandantennummer in der Integer-Variablen iMandant - wieder unter Verwendung eines Typecasts, diesmal Integer().

Alles klar?

Edit: Eine durchaus interessante Alternative zu der ComboBox wäre übrigens ein DBGrid. Es würden allerdings mehrere Datensätze angezeigt. Die Optik lässt sich sehr weitgehend an den persönlichen Geschmack anpassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.
Seite 2 von 2     12   

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