Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   DB-Felder über Methode Variablen zuweisen (https://www.delphipraxis.net/152379-db-felder-ueber-methode-variablen-zuweisen.html)

scrat1979 21. Jun 2010 07:36

Delphi-Version: 2010

DB-Felder über Methode Variablen zuweisen
 
Hallo zusammen,

ich stehe gerade vor einem Problem, für welches IHR - wie immer - die Lösung bereits parat habt. Da es ich nicht unbedingt um eine DB-Problematik handelt, denke ich, ich bin in dieser Rubrik richtig.

Folgendes:

Im Rahmen der Trennung von Darstellung und Funktion habe ich mir eine Klasse gebastelt. Es handelt sich vereinfacht ausgedrückt um einen Kalender. Die Klasse holt / speichert die Daten in/aus einer Datenbank (Firebird). Bislang war es "nur" notwendig, Wertepaare (String und Integer) aus der Datenbank auszulesen. Dazu habe ich das "String"-Feld in eine StringList und den Integer-Wert über TObject(IntegerWert) dem StringList-Eintrag zugeordnet. Das funktioniert einwandrei.

Ungefähr so:

Delphi-Quellcode:
 procedure TMeineKlasse.HoleDaten(DestStrList : TStringList);
 begin
   [...]
   DestStrList.AddObject(QueryXYZ.FieldByName('StrFeld').AsString, TObject(QueryXYZ.FieldByName('IntFeld').AsInteger));
 end;
Nun möchte ich aber mehrere Felder auslesen, hier funktioniert ja o.g. System nicht mehr. Bevor ich meine Idee in die Tat umsetze (s. unten) möchte ich jedoch sicher sein, dass es keine "schönere" Lösung für geschildertes Problem gibt.

Meine Lösung: Zwei Klassen-Methoden, die erste liest den ersten Datensatz aus und schreib ihn über folgende Funktion in die entsprechenden Variablen. Als Funktionsergebnis wird die Anzahl der vorhandenen Datensätze zurückgegeben:

Delphi-Quellcode:
function HoleErstenDatensatz(VAR int1: integer; var int2: integer; var str1: string; var str2: string) : integer;
Dann wird der Zeiger auf den nächsten Datensatz gelegt. Das weitere auslesen wird über eine zweite - ähnliche - Funktion vorgenommen.

Ich hoffe, mein Vorhaben ist klar und hoffe, dass mir jemand einen einfach(eren) Lösungsweg zeigen kann :)

Michael

DeddyH 21. Jun 2010 08:12

AW: DB-Felder über Methode Variablen zuweisen
 
Statt des harten Casts einer Integer auf TObject könntest Du Dir eine tatsächliche Klasse deklarieren, die die benötigten Felder enthält. Diese kannst Du dann instanzieren und wie gehabt mit AddObject zu Deiner Liste hinzufügen.

scrat1979 21. Jun 2010 08:44

AW: DB-Felder über Methode Variablen zuweisen
 
Das heißt ich bilde mir eine Klasse XYZ mit den entsprechenden Feldern, ok.

Wäre es dann sinnvoll, der o.g. Prozedur eine TObjectList zu übegeben, in welcher dann die ausgelesenen Datensätze über die Klasse XYZ gespeichert werden? Dann ist das doch schonmal eine deutlich elegantere Lösung :)

DeddyH 21. Jun 2010 08:48

AW: DB-Felder über Methode Variablen zuweisen
 
Ob TObjectlist oder TStrings hängt m.E.n. davon ab, ob Du die Daten darstellen willst/musst oder nicht. Andererseits hält Dich ja auch niemand davon ab, Methoden zu überladen ;)

scrat1979 21. Jun 2010 09:02

AW: DB-Felder über Methode Variablen zuweisen
 
Super! Dann komme ich erst einmal weiter bei meinem Programm :)

Bis bald und Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.

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