SQL Rückgabe in TStringList oder doch was anderes nehmen?



  • Hallo Leute,

    ich habe mal wieder seit einigen Jahren eine Schwierigkeit. Eigentlich fehlt mir nur der richtige Ansatz.

    Ich bekomme aus einer SQL Abfrage Werte zurück. Also in dieser Form:

    SQL("select vorname, nachname, passort, gebdatum, eintitt, austritt, gruppe, projekt from users");
    

    In der Datenbank (mySQL) sind ca. 50 Testeinträge. Die Rückgabe möchte ich virtuell speichern. Ich dachte da so an eine Stringliste. Die Werte sollen dann später wie folgt verarbeitet werden:

    vorname, nachname sichtbar in einer ListBox. (Habe ich fertig und funktioniert)
    Wenn auf den jeweiligen Index der ListBox geklickt wird, dann sind die anderen Werte aus der SQL-Abfrage in jeweils einem TLabel vorhanden.

    Wo ist nun mein Problem?
    Wie bekomme ich jetzt die Werte aus der DB-Abfrage virtuell gespeichert und kann auf diese mit zB. einem Index zugreifen? Eine ListBox ist wohl unangebracht. Oder? Eine Tabelle währe auch hilfreich. Aber wie?

    Verwendete IDE: C++ TurboExplorer 2006

    Gruß
    Cookie_Woman



  • Du könntest dir auch eine Struktur anlegen, in der du die Rückgabewerte jeder Zeile speicherst. Die Zeiger auf diese wiederum kannst du in einen TList Objekt ablegen und dann per Index darauf zugreifen.
    Oder du programmierst dir eine Klasse, der du vorgeben kannst, wieviel Werte dort abglegt werden können und speicherst diese dann in einer Liste.



  • Hallo

    Wenn du es wirklich manuell verwalten willst, dann nimm erstmal eine eigene Struktur pro Datensatz, die du dann in ein dynamisches Array packst

    struct User
    {
      ...; // Die von dir gewünschten Attribute
    };
    
    std::vector<User> Users; // Dynamisches Array
    

    Damit kannst du dann die Daten der Datenbanltabelle verwalten.

    Aber warum willst du das manuell verwalten? Warum nimmst du anstatt der TListBox nicht ein TDBGrid, und anstelle der gewöhnlichen Labels nicht TDBLabel? Dann macht die VCL alles für dich.

    bis bald
    akari



  • Warum befüllst Du kein TDataSet-Abkömmling mit den Werten und arbeitest mit diesen?



  • witte schrieb:

    Warum befüllst Du kein TDataSet-Abkömmling mit den Werten und arbeitest mit diesen?

    Burkhi schrieb:

    Aber warum willst du das manuell verwalten? Warum nimmst du anstatt der TListBox nicht ein TDBGrid, und anstelle der gewöhnlichen Labels nicht TDBLabel?

    Zu allen beiden Ansätzen kann ich nur sagen/schreiben, ich habe mit TDataSet und TDBGrid noch nicht programmiert. Hier würde mir das Handling, sicherlich nur am Anfang, schwer fallen.

    Gibt es dazu Beispiele?

    Greetz.



  • Hallo

    Beispiele findest du einerseits im Builder selber (BCB-Hilfe zu Stichworten wie TQuery, TDataSource, TDBQuery; aber auch komplette Projekte unter <BCB-Path>/Examples/DBTasks) als auch hier im Forum (Tutorial, FAQ, Suchfunktion).

    Um diese Komponenten benutzen zu können must du natürlich auch eine Client-Software benutzen die dafür geeignet ist. Im Builder ist zum Beispiel bereits die BDE dabei, die über ODBC auf MySQL zugreift. Falls du aber direkt über libmysql.dll auf die Datenbank zugreifst kannst du die VCL-Komponenten nicht (ohne große Anpassungen) benutzen.

    Übrigens stammt eines der beiden Zitate aus deinem letzten Post von mir und nicht von Burkhi 😉

    bis bald
    akari



  • akari schrieb:

    Hallo

    ---schnippel----(Tutorial) ---schnippel.

    Danke für die Antwort. Ich habe zunächst erst einmal das hier gefunden. Wer suchet, der findet. Aber Dein Tutorial ist auch gut. Danke.

    akari schrieb:

    Hallo

    Übrigens stammt eines der beiden Zitate aus deinem letzten Post von mir und nicht von Burkhi 😉

    bis bald
    akari

    Ja, sorry. Ich hatte mich vertan.

    Ich werde mich dann nachher mal an Dein Tutorial machen. Es scheint die passende Richtung zu sein, in die ich hin will.

    Gruß
    cookie_woman


Anmelden zum Antworten