Nach SELECT xxx ORDER BY wieder Schreibmodus



  • Hallo zusammen,

    IDE: C++ Builder 6, als Datenbank: Paradox-Tabelle verknüpft mit BDE.

    Leider habe ich ein Problem und komme gar nicht weiter. Und zwar zeige ich die Daten in DBGrid mit Hilfe von TQuery. Als SQL-Anweisung benutze ich schlicht und einfach "SELECT * FROM test.DB". Soweit so gut.

    Da ich die Eintraege nach Spalten sortieren möchte, habe ich dementsprechend folgendes geschrieben:

    void __fastcall TForm1::DBGrid1TitleClick(TColumn *Column)
    {
            Query1->Close();
            Query1->SQL->Clear();
            Query1->SQL->Add("SELECT * FROM test.DB ORDER BY " + Column->FieldName);
            Query1->Open();
    }
    

    Das klappt sogar 🙂

    Nur wenn man auf eine Spalte geklickt hat, wird das Programm in Nur-Lese-Zugriff versetzt, so dass man nichts einfügen, löschen oder bearbeiten kann.

    Z.B. Query1->Insert(); funktioniert nicht mehr. Wobei wenn man die Spalten nicht anklicken wird, funktioniert alles. Es liegt also definitiv an diesem Erreignis.

    Soweit ich der Hilfe entnommen habe, liegt das wohl daran, dass SELECT-Anweisung auch "ORDER BY" enthält. Leider habe ich weder in der Hilfe noch im Internet (auch hier) gefunden, wie man in solchen Fällen vorgehen könnte.

    Daher bitte ich euch um Hilfe!

    Vielen Dank

    P.S. Bitte nicht verprügeln, bin noch Neuling auf dem Gebiet



  • ok, zuerst der übliche Hinweis: Die BDE und Paradox sollten nicht mehr verwendet werden. Dies sind Altlasten aus dem letzten Jahrtausend...

    Man kann das umgehen, indem man direkte SQL-Anweisungen absetzt, in dem die Daten geändert werden. In diesem Fall bietet sich TUpdateSQL an.
    Allerdings werden die Daten im DBGrid nicht aktualisiert! Man muß also anschließend die Query schließen und neu öffnen. Um den zuletzt ausgewählten Datensatz wiederzufinden kann man sich die ID merken und Locate verwenden.

    Trotzdem würde ich an deiner Stelle versuchen es gleich richtig zu machen und somit auf Paradox und dBase und die BDE verzichten. Zumindest hast Du nicht TTable verwendet. Ist doch auch schon was. 😉



  • ok, zuerst der übliche Hinweis: Die BDE und Paradox sollten nicht mehr verwendet werden. Dies sind Altlasten aus dem letzten Jahrtausend...

    Erstmal, vielen Dank, Joe_M für deine Antwort.

    Hmmm. Ich erstelle eigentlich ein kleines Prog, dass lokal die Infos über Filme abspeichern soll. Es wird kein Netzwerk-Programm sein, es geht wirklich um lokale Dinge. Daher dachte ich, dass es am einfachsten ist Paradox-Tabelle (natürlich mit BDE) zu benutzen. Meinst du, dass auch für solche lokale Sachen auch die "Giganten" wie MySQL, InterBase, MS Server zum Einsatz kommen sollen oder gibt es andere Alternative?



  • Es sollte schon einer der 'Giganten' sein. Es gibt auch noch Firebird als Embedded-Version.

    Die Probleme mit Paradox beginnen schon bei Windows. Paradox wurde für FAT-16 entwickelt und irgendwann mal an FAT-32 angepaßt. Alledings gibt es ab Windows 2000 massive Probleme mit Paradox-Tabellen. Teilweise bedingt durch das Betriebssystem (z.B. OpLocks), teilweise durch die BDE (z.B. kennt die BDE keine Festplatten großer 4 GB -> immer wenn der freie Festplattenspeicher modulo 4 GB Null ergibt, sagt dir die BDE, dass die Platte voll ist. Natürlich erst dann, wenn Du versuchst einen Datensatz zu schreiben. Vorher wäre ja langweilig).



  • Es gibt auch noch eine Embedded-MySQL Version. Einfach mal im BCB-Forum suchen.



  • Joe_M. und -=]xXx[=-,

    wieder was dazu gelernt. Alles klar, vielen Dank fuer eure Hilfe


Anmelden zum Antworten