ADO Tabelle sortieren in DBGrid



  • Hallo,
    Wenn ich ein DBGrid mit einer DataSource verbinde und dann eine Zeile auf dem DBGrid selectiere wird mir die richtige ID vom Datensatz zurückgegeben.

    Will ich aber die ADO Tabelle sortiert anzeigen mit ADOQuery oder einem ADO Dataset wird immer nur die ID vom letzten Datensatz zurückgegeben.



  • zeig doch mal etwas Quellcode, vorallem die Rückgabe aus dem sortierten DBGrid



  • Da gibts eigentlich keinen Quellcode.
    Ich habe eine ADOConnection->AdoTable->DataSource->DBGrid
    In diesem Fall wird die richtige ID vom Datensatz zurückgegeben.

    mit ADOConnection->AdoTable->DataSet oder SQLQuery->DataSource->DBGrid
    wird immer nur der letzte Datensatz der Tabelle zurückgegeben.



  • was heißt zurückgegeben: im DBGrid angezeigt? als Label auf dem Form angezeigt? oder als MessageBox?

    was hast du im Query/DataSet stehn?

    warum verbindest du den ADOTable mit dem DataSet oder dem Query?
    [Edit]
    es sollte eher ADOConnection->ADODataSet->DataSource->DBGrid heissen, und das ADODataSet mit einer entsprechenden SQl-Anweisung in CommandText zur Sortierung verwendet werden[/Edit]



  • ich habs mit ADOConnection->ADODataSet->DataSource->DBGrid
    versucht. Das Ergebnis ist das selbe.
    Der ADODataSet Text =
    select * from TBAbteilung ORDER BY Name

    Die ID lese ich folgend aus
    void __fastcall TNeueAbteilung::DBGrid1CellClick(TColumn *Column)
    {
    LaufendeNr=Main1->ADOTable2->FieldByName("ID")->AsInteger;
    ShowMessage(AnsiString("select Nr = ")+ IntToStr(LaufendeNr));
    }



  • endlich 😉

    void __fastcall TNeueAbteilung::DBGrid1CellClick(TColumn *Column) 
    { 
    LaufendeNr=Main1->[b]ADOTable2[/b]->FieldByName("ID")->AsInteger; 
    ShowMessage(AnsiString("select Nr = ")+ IntToStr(LaufendeNr)); 
    }
    

    das fettgeschriebene ist der Fehler. Du greift immer auf ADOTable zu, obwohl du das ADODataSet als Datenquelle für das DBGrid hast
    korrekt ist hier

    void __fastcall TNeueAbteilung::DBGrid1CellClick(TColumn *Column) 
    { 
    LaufendeNr=DBGrid1->DataSource->DataSet->FieldByName("ID")->AsInteger; 
    ShowMessage(AnsiString("select Nr = ")+ IntToStr(LaufendeNr)); 
    }
    


  • Danke!
    Auch für deine grenzenlose Geduld.

    Gruß Horscht


Anmelden zum Antworten