Announcement

Collapse
No announcement yet.

TQuery

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TQuery

    Hallo, wie kann man das Ergebnis einer Abfrage nach einem berechnetem Feld (OnCalcFields) sortieren ?

  • #2
    Hallo,

    das hängt davon ab, mit welchen Datenzugriffskomponenten (BDE, ADO, IBX oder dbExpress) gearbeitet wird. Bei ADO kann man zum Beispiel über den Shape-Provider eine zusätzliche editierbare Spalte hinzumischen und das Ergebnis der Berechnung direkt dort ablegen. Somit ist das eine "ganz normale" Spalte in der Ergebnismenge, so dass auch der Aufruf von <b>Sort</b> für diese Spalte erlaubt ist.

    Wenn mit TQuery (und somit der BDE) gearbeitet wird, ist ein Sortieren nach dem berechneten Feld nur dann möglich, wenn diese Berechnung bereits Bestandteil der SELECT-Abfrage ist

    Comment


    • #3
      Vielen, vielen Dank Herr Kosch für die schnelle Antwort, ich habe es tatsächlich über die BDE versucht und hatte beinahe die Hoffnung aufgegeben. Ich habe zwar eine Notlösung über UpdateSQL und ApplyUpdates wobei ich den berechnten Wert in dem Datensatz reinkopiere und die Abfrage erneut laufen lasse, aber es dauert natürlich ewig bis alle Datensätze bearbeitet werden. Anscheinend muss ich wohl auf Delphi 6 updaten, um mein Problem über ADO lösen zu können

      Comment


      • #4
        Hallo,

        zwischen Delphi 5 und Delphi 6 ist beim Thema ADO keine Unterschied (abgesehen davon, dass D5 stabiler läuft). Wenn die ADO Express-Komponenten bei Delphi 5 Professional fehlen, sollte das separat erhältliche <i>ADO Express for Delphi 5 Professional</i> die preiswertere Alternative sein

        Comment


        • #5
          Hallo Herr Kosch,
          leider ist ADO-Express nicht mehr verfügbar (ein Exemplar für C++Builder konnte ich noch ergattern). Ich werde es trotzdem mit anderen ADO-Komp. Anbieter (z.B. Diamonnd ADO ?) versuchen mein Projekt zu Ende zu bringen. Da ich allerdings so ziemlich unerfahren mit ADO bin, konnte ich leider Ihren Tip mit dem 'Shape-Provider' nicht umsetzten. Für einen konkreteren Tip wäre ich Ihnen dankbar

          Comment


          • #6
            Hallo,

            dafür sind die folgenden Arbeitsschritte notwendig, wobei ich mich auf die ADO Express-Komponenten beziehe und auf eine SQL Server 2000-Datenbank zugreifen (die Datenbank ist jedoch egal):<br>
            1. TADOConnection auf dem Formular ablegen<br>
            2. <b>MSDataShape</b> als OLE DB Provider auswählen<br>
            3. Konfigurationsdialog | Registerseite "Alle":<br>
            a) Data Provider: SQLOLEDB.1 (d.h. dieser Provider ist für den Zugriff auf die SQL Server-Datenbank zuständig)<br>
            b) Data Source : (local) // SQL Server läuft auf dem eigenen Rechnern<br>
            c) Initial Catalog : Datenbankname<br>
            4. TADOConnection kann nun aktiviert werden <br>
            5. TADODataSet hinzufügen und mit der TADOConnection-Instanz verbinden <br>
            6. CommandText hinzufügen, wobei die Syntax des Shape-Providers verwendet wird, um die zusätzliche Spalte <i>Fertig</i> vom Typ adBoolean der Ergebnismenge der SELECT-Abfrage hinzuzufügen:
            <pre>
            SHAPE {SELECT * from KUNDEN}
            APPEND NEW adBoolean AS Fertig
            </pre>
            7. TADODataSet öffnen - man erhält eine in allen Spalten (auch <i>Fertig</i>) editierbare Datenmenge

            Comment


            • #7
              Danke für Ihre Geduld
              Mfg A. Holde

              Comment


              • #8
                Hallo Herr Kosch,

                leider klappt es mit dem Sortieren nach einem berechneten Feld immer noch nicht. Nach dem Befehl TAdoDataSet.Sort = "score DESC" passiert nichts, allerdings kommt es auch zu keiner Fehlermeldung. Das Sortieren nach einem persistenten Feld dagegen funktioniert einwandfrei. Liegt es vielleicht an der MS-Access Datenbank

                Comment

                Working...
                X