TList daten zeile für Zeile in TStringList



  • Hallo Leute, ich hab nix in der Hilfe oder sonstwo gefunden zu meinem folgenden Problem.

    ich hol mir mit

    String Column = "xyz";
    TStringList * Liste;
    TList * SLDaten;
    SLDaten = new TList;
    Liste = new TStringList;
    
    ADOQuery->GetFieldList(SLDaten, Column);
    
    Liste->Clear();
    
    for (int z=0; z<SLDaten->Count; z++)
    {
      Liste->Add(?????????)  
    }
    

    die memo ist da, und ich will die daten zeile für zeile reinschreiben, aber ich weis nicht wie, oder ob es eine bessere methode gibt.

    ich weis nicht, wie ich die Daten in der SLDaten (TList) auslesen kann,
    ich danke schon einmal im vorraus.



  • vergesst den satz mit "memo"
    der satz gibt so mehr sinn

    die TStrList ist da (wie ihr seht) , und ich will die daten zeile für zeile reinschreiben, aber ich weis nicht wie, oder ob es eine bessere methode gibt.

    und sorry für den zusätzlichen post



  • Hi,

    ich weiß nicht genau was du meinst. Denn was soll den das ADOQuery. Willst du die Daten aus einer Datenbank lesen oder aus einer Datei?
    Wenn ich etwas aus einer Datei in ein ListBox einelesen will dann mache ich das so.

    TStringList *Liste = new TStringList();
       Liste->LoadFromFile("c:\datei.txt");
    
       for(int i=0;i<Liste->Count;i++)
       {
          ListBox->Items->Add(Liste->String[i]);
       }
    

    Ich hoffe ich konnte dir damit ein bißchen helfen



  • nein das meinte ich nicht, sorry

    warte, ich erklärs nocheinmal genauer

    ich will praktisch mit der funktion
    "GetFildList" eine Tabllenliste aus der Datenbank laden, aber diese Funktion akzeptiert keine TStringList, sonder will eine TList als übergabeparameter haben.
    So, und jetzt will ich diese werte aus der TList in eine TStringList übertragen, aber ich weis nicht, wie ich die einzelnen zeilen aus der TList rausbekomme.
    Ich hoffe es ist jetzt verständlich was ich mein.
    Das Problem ist nämlich, wenn ich folgendes mach

    TList * Liste = new TList; //Liste erstellen
    ADOQuery->GetFielList(Liste, "Nummer"); //Liste der Nummer-Spalte in die 'Liste' schreiben
    

    wie greife ich jetzt auf die daten der 'Liste' zu, auf eine TStringList ist es mir klar, genau so, wie du es angegeben hast, aber das geht bei dieser Array basierenden TList net mehr, und DAS würde ich gerne wissen,
    DANKE



  • Da TStringList von TList abgeleitet ist kannst du im GetFieldList-Aufruf einfach nach TList casten.

    ADOQuery->GetFieldList((TList*)SLDaten, Column);
    


  • Hast du schon probiert statt TStringList TStrings zu verwenden?
    Die beiden Typen sind kompatibel und unterscheiden sich nicht vom Handling.

    Die darfst du dann nicht mit dem "new" Operator erstellen:

    TStrings *Liste1;

    Liste1->Add(.....

    Vielleicht funktionierts.



  • Oops, was ich da von TStringList und TList geschrieben habe war natürlich Schwachsinn.
    Also bitte ignorieren. 🙂



  • Also, nochmal ich habs anscheinend noch nicht richtig erklärt

    in Kürze:
    ich hab daten in der TList ich will mit der for schleife zeile für zeile die daten der TList in eine TStringList schreiben.
    folgendes weis ich

    TList (Liste) und TStringList(StringListe) ist vorhanden und richtig deklariert,
    in der TList sind auch schon daten drin

    for (int z=0; z<Liste->Count; z++)
    {
      StringListe->Add(??????);
    }
    

    so, da wo die Fragezeichen stehen, weis ich nicht weiter
    kann mir vielleicht einer den code sagen, danke



  • Hallo,

    Soweit ich weiss liefert GetFieldList eine Liste auf TField Objekte. TList ist aber nun Liste von void-Pointern. Also brauchst du nur deine Items nach TField zu casten und dann deiner Stringlist hinzuzufügen.

    etwa so

    String Column = "xyz"; 
    TStringList * Liste = new TStringList; 
    TList * SLDaten = new TList; 
    ADOQuery->GetFieldList(SLDaten, Column); 
    Liste->Clear(); 
    TField *field;
    for (int z=0; z<SLDaten->Count; z++) 
    { 
      field = reinterpret_cast<TField *>(SLDaten->Items[z]);
      Liste->->Add(field->AsString)   
    }
    delete SLDaten; //vergiss auch nicht irgendwann Liste zu löschen
    

    Ich habs jetzt nicht getestet (kann ich auch garnicht da ich die ADO Komponenten nicht habe).

    Ciao


Anmelden zum Antworten