Datensätze in TListView anzeigen



  • F.R.O.S.C.H schrieb:

    Ich weiß nun nicht wie ich die Datensätze in den Spalten anzeigen kann.
    ListItem->SubItems->Add scheint mir nicht das richtige zu sein.

    versuchs doch einfach mal damit, der Schein kann nämlich oft trügen

    Warum muß es eigentlich ein TListView sein? bzw. was willst du mit den Daten machen? Nur anzeigen?



  • Danke für die schnelle Antwort.
    Ok ich wer nochmal die Hilfen durchgehen und schaun was ich machen kann.

    Ja, ich will sie nur anzeigen sonst nichts.



  • F.R.O.S.C.H schrieb:

    Ja, ich will sie nur anzeigen sonst nichts.

    Warum nimmst du dann nicht ein StringGrid?



  • Ok, ich hab jetzt einen Datensatz anzeigen können..

    aber im Query ist nicht nur ein Datensatz, der Tabellen die ich über SQL Abgefragt habe, sondern mehrere.
    Wie kann ich alle Datensätze im ListView anzeigen.
    Mit Caption kann ich ja eine bestimmte anzahl von Datensätzen/Zeilen anzeigen, aber die Anzahl der Abgefragten Datensätze ist immer Unterschiedlich je nach dem was ich über das EditFeld suche.
    Und außerdem Zeigt er mir mit Caption nur den ersten Datensatz an bzw. der der Über die SQL Abfragen ORDER ganz oben steht.
    So siehts jetzt aus. Aber das ist mein Ziel, als Beispiel.

    Kann mir da einer einen Tipp geben wie ich das besser oder anders lösen kann?

    Jetziger Stand:

    void __fastcall TfrmMain::TButtonClick(TObject *Sender)
    {
    
    if (TEdit->Text == "")
            {
            ShowMessage("Bitte eine Nummer eingeben");
            }
    
            else
            {
            AnsiString sSQL =        
            "SELECT aaa_Feld1, aaa_Feld2, bbb_Feld1, bbb_Feld1 "
            "FROM aaa LEFT JOIN bbb ON aaa_Feld2 = bbb_Feld3 " 
            "WHERE (((aaa_Feld1)="+TEdit->Text+")) " 
            "ORDER BY aaa_Feld1 DESC , bbb_Feld2 DESC";
    
            Datenbank->Open();
            ADOQuery->Close();
            ADOQuery->SQL->Clear();
            ADOQuery->SQL->Add(sSQL);
            ADOQuery->Open();
    
            TListColumn  *NewColumn;
            TListItem  *ListItem;
            lvListe->ViewStyle = vsReport;
    
            NewColumn = lvListe->Columns->Add();
            NewColumn->Caption = "1";
            NewColumn = lvListe->Columns->Add();
            NewColumn->Caption = "2";
            NewColumn = lvListe->Columns->Add();
            NewColumn->Caption = "3";
            NewColumn = lvListe->Columns->Add();
            NewColumn->Caption = "4";
    
            ListItem = lvListe->Items->Add();
            ListItem->Caption = "1";
            ListItem->SubItems->Add(ADOQuery->FieldByName("aaa_Feld1")->AsString);
            ListItem->SubItems->Add(ADOQuery->FieldByName("aaa_Feld2")->AsString);
            ListItem->SubItems->Add(ADOQuery->FieldByName("bbb_Feld1")->AsString);
    
            }
    }
    


  • Schleifen (for, while)

    mfg
    xXx



  • Du weiß schon, was eine Schleife ist???
    Und die Query-Komponente verfügt über die Eigenschaft 'Eof' sowie die Methode 'Next()'.



  • dazu gibt es auchen FAQ-Beitrag: Datenbanken -> "Ergebnisse von SELECT verarbeiten"



  • Danke für eure Antworten,

    Ich habe es nun so gelöst wie unten im Beispiel.

    Ein Problem hab ich aber noch, und zwar will ich wenn in Spalte "bbb_Feld2" eine "0" steht diese durch "bearbeitet" ersetzen bevor sie angezeigt wird. Ich habe schon gesucht aber keine Passende Lösung zum ersetzen (o.Ä.) von Spalten in ADOQuery gefunden.
    Habt ihr vllt eine Idee oder einen Ansatz wie ich dies Meistern kann?
    Bild

    Schonmal Danke.

    _fastcall TfrmMain::TfrmMain(TComponent* Owner)
            : TForm(Owner)
    {
    
    lvListe->ViewStyle = vsReport;
    TListColumn  *NewColumn;
    
    NewColumn = lvListe->Columns->Add();
    NewColumn->Width = 0;
    NewColumn->Caption = "";
    NewColumn = lvListe->Columns->Add();
    NewColumn->Width = 70;
    NewColumn->Caption = "aaa_Feld1";
    NewColumn = lvListe->Columns->Add();
    NewColumn->Width = 100;
    NewColumn->Caption = "aaa_Feld2";
    NewColumn = lvListe->Columns->Add();
    NewColumn->Width = 65;
    NewColumn->Caption = "bbb_Feld1";
    NewColumn = lvListe->Columns->Add();
    NewColumn->Width = 73;
    NewColumn->Caption = "bbb_Feld2";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TfrmMain::TButtonClick(TObject *Sender)
    {
    ListView1->Clear();
    
    if (TEdit->Text == "")
            {
            ShowMessage("Bitte eine Nummer eingeben");
            }
    
            else
            {
    
            AnsiString sSQL = 
            "SELECT aaa_Feld1, aaa_Feld2, bbb_Feld1, bbb_Feld2 "
            "FROM aaa LEFT JOIN bbb ON aaa_Feld2 = bbb_Feld3 " 
            "WHERE (((aaa_Feld1)="+TEdit->Text+")) " 
            "ORDER BY aaa_Feld1 DESC , bbb_Feld2 DESC";
    
            Datenbank->Open();
            ADOQuery->Close();
            ADOQuery->SQL->Clear();
            ADOQuery->SQL->Add(sSQL);
            ADOQuery->Open();
            ADOQuery->First();
    
       //     if (ADOQuery->FieldByName("bbb_Feld2")->AsString == "0");
       //             { ...ersetze "0" durch "bearbeitet"...}
       //     else    { ...ersetze "1" durch ""...}
    
            int Spalten=0;
            while (!ADOQuery->Eof)
                {
                    for (int i=0;i<=Spalten; i++)
                    {
                    TListItem *ListItem;
                    ListItem = lvListe->Items->Add();
                    ListItem->SubItems->Add(ADOQuery->FieldByName("aaa_Feld1")->AsString);
                    ListItem->SubItems->Add(ADOQuery->FieldByName("aaa_Feld2")->AsString);
                    ListItem->SubItems->Add(ADOQuery->FieldByName("bbb_Feld1")->AsString);
                    ListItem->SubItems->Add(ADOQuery->FieldByName("bbb_Feld2")->AsString);
                    }
                    ADOQuery->Next();
                }
    
            }
    


  • sinds zu viele Bäume oder ist der Wald zu groß?

    if (ADOQuery->FieldByName("bbb_Feld2")->AsString == "0") 
      ListItem->SubItems->Add("bearbeitet");
    else 
      ListItem->SubItems->Add(ADOQuery->FieldByName("bbb_Feld2")->AsString);
    


  • Oh man, hätte man auch selber drauf kommen können 🙄

    Na gut danke für eure Geduld.

    Wen es interressiert, nochmal der Code:

    while(!ADOQuery->Eof)
                {
                TListItem *ListItem;
                ListItem = lvListe->Items->Add();
                ListItem->Caption = ADOQuery->FieldByName("aaa_Feld1")->AsString;
                ListItem->SubItems->Add(ADOQuery->FieldByName("aaa_Feld2")->AsString);
                ListItem->SubItems->Add(ADOQuery->FieldByName("bbb_Feld1")->AsString);
    
                if(ADOQuery->FieldByName("bbb_Feld2")->AsString == "0")
                       ListItem->SubItems->Add("bearbeitet!");
    
                ADOQuery->Next();
                }
    

Anmelden zum Antworten