Daten in einem DBGrid sortieren



  • zu 1:
    Am besten wohl in einem eigenen Select Statement. Dafür gibt es die SQL-Funktion COUNT.

    zu 2.
    Im Ereignis OnTitleClick des DBGrids wird die eine TColumn-Referenz übergeben. Den tatsächlichen Feldnamen kannst Du dann mit Column->FieldName ermitteln.

    zu 3.
    Schau Dir mal die Eigenschaft TDBGrid::Options an. Dort insbesondere dgColumnResize.

    Deinen Sourcecode lasse ich mal unkommentiert, aber der ist komplett falsch, egal was Du damit erreichen wolltest...
    Wenn Du die Anzahl der Datensätze herausfinden wolltest, sollte das wohl eher so aussehen:

    if (Query1->Active)
       Query1->Close();
    Query1->SQL->Text = "SELECT COUNT (*) AS AnzahlRecords FROM Adressen
    Query1->Open();
    


    Wenn dein Grid nicht alle Daten enthalten soll nimm eine Hilfsquery. D.h., leg ein zweites TQuery-Objekt auf dein Formular, welches du nicht mit dem Grid verbindest. Dann mach dort ein Select auf die gesamte Datenmenge
    "select * from Adressen"
    Dann kannst du RecordCount dieser Hilfsquery abfragen.
    2.
    Nimm OnCellClick. Da gibt es einen Parameter namens Column. Hier wiederum gibt es die membervariable FieldName
    3.
    Was hast du probiert? Ansich müßte das Abschalten von dgColumnResize bei Options im DBGrid funktionieren.

    [edit]Zu spät und 1. auch zu umständlich. Da ist deine methode besser Joe 🙂 [edit]



  • Deinen Sourcecode lasse ich mal unkommentiert, aber der ist komplett falsch, egal was Du damit erreichen wolltest...

    Ja okay ich geb zu das der code jetzt nicht super geistiges potential aufweißt ... ich hab den hier schnell aus dem kopf von arbeit aus ohne cbuilder getippt 😉

    Aber danke erstmal an Joe_M. & Braunstein für die netten antworten / hilfestellungen.

    Beste Grüße
    TheGeek



  • Das hat mit geistigem Potential nichts zu tun. Sieht für mich eher nach typischen Anfängerfehlern aus - und wir haben alle mal angefangen. Hauptsache, Du lernst etwas daraus. 😉



  • Ja hier im C++ Forum lernt man ja immer etwas !

    Soweit funkioniert auch das Sortieren ... aber mir ist aufgefallen das sobalt ich das "order by" statement verwende (egal ob via quelltext oder in der Sqlquery) ich die daten nicht mehr Bearbeiten kann 😢

    Wie kann ich das verhindern das nachdem ich die Daten Sortiert hab diese nicht mehr editierbar (zb über ein DBgrid) sind.

    Danke
    TheGeek



  • Hallo

    Hast du TQuery::RequestLive auf true?

    bis bald
    akari



  • ja RequestLive steht auf true
    (sry hat ich vergessen zu erwähnen)



  • Hallo

    BCB-Hilfe zu RequestLive schrieb:

    Der Wert true für RequestLive ist nur eine Anforderung auf eine aktualisierbare Ergebnismenge. Er garantiert nicht, daß die Datenbank tatsächlich eine aktualisierbare Ergebnismenge zurückgibt. In der Dokumentation zu Ihrem spezifischen Datenbanksystem finden Sie die Kriterien, die für eine aktualisierbare (live) Ergenismenge erforderlich sind.

    Wenn also nach dem OrderBy die Datenmenge selber nicht mehr bearbeitbar ist, kannst du nichts machen und must ein anderes Eingabekonzept aufbauen.

    bis bald
    akari



  • Mhh komisch ... hab hier eine kleine ParadoxDatenbank mit 5 Datensätzen (zum testen) die ich wie im tut erstellt habe.

    Sollte ich also nicht ein DBgrid verwenden um daten zu sortieren / zu bearbeiten ?
    Zu welchem Eingabekonzept könnt ihr mir raten ?



  • Hallo

    Sollte ich also nicht ein DBgrid verwenden um daten zu sortieren

    Doch

    Sollte ich also nicht ein DBgrid verwenden um daten zu bearbeiten

    Nein. Du hast ja gesehen das sortierte Datensätze nicht mehr bearbeitet werden können.

    Du must also zusätzlich zu der sortierten Anzeige noch eine extra Eingabemaske anbieten, wo jedes Feld extra in einem passenden Control zu bearbeiten ist. Entweder machst du das manuell mittels gewöhnlicher Standardcontrols und erledigst die Einfügeoperation mittels SQL-Kommando Insert, oder du verwendest ein zweites TTable/TDataSource-Konstrukt und die DB-Controls. Das erste ist dabei vorzuziehen.

    Die Verknüpfung zwischen Auswahl (DBGrid) und den Eingabecontrols machst du über den Event TDataSource::OnDataSource des Datasource, das mit der Anzeige-Abfrage verbunden ist.

    bis bald
    akari



  • Danke akari für die Ausführliche Antwort.


Anmelden zum Antworten