Announcement

Collapse
No announcement yet.

Problem: SQL-Tabelle sortiert in eine Ausgabetabelle schreiben

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

  • Problem: SQL-Tabelle sortiert in eine Ausgabetabelle schreiben

    Ich möchte in einer Delphi-Umgebung aus einer Paradox-Tabelle (HeadData.db) eine zweite Tabelle (S2.db) mit Daten füllen, dabei die Daten sortiert übergeben. <br> Bestimmte, mit '°' markierte Zeilen sollen nicht übernommen werden (not like). <br> Die Tabellenstruktur wurde zuvor erzeugt.

    Der SQL-String: <br>
    <b>Insert into s2.db select * from headata.db where Gebiet not like '°%' order by Einwohner </b>

    Dabei erscheint die Fehlermeldung: <br> Ungültiges Schlüsselwort, Symbolstring "order"

    Ohne "order" arbeitet die Query, allerdings kommt es gerade auf die Sortierung an. <br> Sicher gibt es auch andere Möglichkeiten, aber diese ist schön einfach, wenn sie den funktionieren würde.

    Kann mir jemand bei der Lösung dieses Problems helfen?

    Vielen Dank im voraus <br>
    Rüdiger

  • #2
    Hallo Rüdiger,

    ist es wirklich wichtig das die Daten physisch sortiert in der Tabelle stehen? Das ändert sich doch spätestens beim nächsten insert. Warum stellst Du die Sortierung nicht über einen Index sicher
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,

      vielen Dank für deine Antwort.

      Es ist schon richtig, dass die Tabelle physisch sortiert sein soll.
      Es handelt sich bereits um eine Ergebnistabelle, die der User sortieren darf.
      Die mit '°' markierten Zeilen (vorberechnete Summen- und Durchschnittzeile) sollen immer am Ende der Tabelle stehen, ich möchte sie mit einem weiteren Insert physisch an das TabellenEnde setzen und in dieser Formatierung im Grid darstellen.

      Bei der Verwendung eines Index würde die Zeile mit den Durchschnittswerten entsprechend in der Mitte der Tabelle angezeigt, das wäre nicht schön, deshalb möchte ich das vermeiden.

      Im übrigen kann man sicher auch ein Index statt dem Insert mit "Order By" verwenden, nur ist das viel aufwendiger, und da das Standard-SQL eine "Order By"-Klausel kennt, ist dieser Weg der naheliegendste.

      Hast Du eine Idee, woher dieser Syntaxfehler kommt, und wie man ihn beheben oder (leicht) umgehen kann ?

      Viele Grüße

      Rüdige

      Comment


      • #4
        Hallo Rüdiger,

        das Problem ist ganz einfach, daß SQL in einer Insert, Update oder Delete Anweisung keine order by Klausel zulässt (weil es eben nicht notwendig ist).
        Deinen Worten entnehme ich aber, das Du diese Sortierung brauchst. Deshalb wirst Du nicht umhin kommen folgenden Weg zu gehen:

        Query1 mit SQL='select * from headata.db where Gebiet not like '°%' order by Einwohner'
        .<br>
        .<br>
        .<br>
        Query1.Open;<br>
        while not Query1.EoF do<br>
        begin<br>
        s2.Append;<br>
        for I := 0 to s2.FieldDefs.Count - 1 do<br>
        s2.Fields[I].Value := Query1.Fields[I].Value;<br>
        s2.Post;<br>
        Query1.Next;<br>
        end;<br>
        .<br>
        .<br>
        .<br>
        Ist natürlich viel aufwändiger, aber der einzige Weg der mir für Dein Problem einfällt.

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          ich nochmal,

          das mit dem order by bei insert, update, etc. bezieht sich natürlich nur auf die insert Abfrage selbst. In der Subquery gibt es eigentlich keine Einschränkungen. Was macht er eigentlich bei <b>Insert into s2.db (select * from headata.db where Gebiet not like '°%' order by Einwohner)</b>

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,

            besten Dank für den Lösungsvorschlag. Ich glaube, er ist eine sehr gute Alternative zum Anlegen von Indexdateien, ich werde es gleich probieren.

            Wenn man den Select in Klammern setzt meckert Delphi bereits das Schlüsselwort "Select" als unbekannt an.

            Aber kann man nicht die Tabelle headdata.db durch Query1 ersetzen? :

            Insert into s2.db select * from <b>Query1</b>

            Ich werde auch die ausprobieren und das Ergebnis mitteilen.

            Viele Grüße

            Rüdige

            Comment


            • #7
              Hallo Falk,

              Dein Vorschlag hat super funktionert, nochmals herzlichen Dank.

              Meine Idee, statt der Tabelle eine Query zu verwenden, funktioniert nicht. Delphi verlangt tatsächlich nach dem FROM * eine Tabelle und akzeptiert keine Query.

              Viele Grüße

              Rüdige

              Comment

              Working...
              X