Announcement

Collapse
No announcement yet.

Änderbarkeit trotz beliebiger Sortierung

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

  • Änderbarkeit trotz beliebiger Sortierung

    Hallo,

    ich stelle in einem DBGrid den Inhalt einer Paradox-Tabelle über einen Query dar.
    Der Anwender kann per Klick auf den Spaltenkopf die Sortierreihenfolge ändern. Per SQL - "sorted by .." ist das
    ja keine Kunst.
    Allerdings verliere ich dadurch die Änderbarkeit der Datenmenge.
    Für Änderungen bleibt mir nur die Möglichkeit, die Sortierreihenfolge zurückzusetzen oder ein
    extra Editierfenster zu öffnen.
    Ich suche eine Möglicheit, mit der der Anwender ohne für ihn irritierende
    Änderungen trotz beliebiger Sortierreihenfolge die Daten manipulieren kann.

    Im Voraus Danke

    Torsten Zorn

  • #2
    Hallo,

    mit welcher Delphi-Version wird gearbeitet? Angenommen, Delphi 6 steht zur Verfügung, dann ist die <b>TBDEClientDataSet</b>-Komponente verfügbar. Der Einsatz von TBDEClientDataSet hat den Vorteil, dass die Daten nur einmal aus der Paradox-Tabelle eingesammelt werden müssen, danach liegen diese in der Speichertabelle von TBDEClientDataSet und können direkt im Arbeitsspeicher sortiert werden (ohne das jedesmal eine neue SELECT-Abfrage ausgeführt werden muss). Da TBDEClientDataSet intern MIDAS-Technologie verwendet (aber trotzdem lizenzkostenfrei ist), können alle Änderungen später zurück in die Paradox-Tabelle geschrieben werden.

    Wenn Delphi 4 Client/Server-Suite oder Delphi 5 Enterprise zur Verfügung steht, kann man das auch mit <b>TClientDataSet</b> nachbauen

    Comment


    • #3
      Hallo Herr Kosch,

      danke für die Antwort. Ich arbeite mit der Delphi5 professional, wobei die Anzahl der Datensätze unter 5000 liegt.

      Wenn ich´s richtig verstanden habe, bleibt mir nur die Daten in eine "temporäre Paradox-Tabelle" zu bringen, zu jedem Feld einen Index anlegen und jede Änderung per "SQL-Update" an die Urspruchstabelle weiterzugeben - wenn ich mit meiner Version eine prinzipielle Lösung anstrebe

      Comment


      • #4
        Hallo Torsten,
        ich habe das so gelöst. Ich schalte zwischen einer Query und einer Table um und setze einen Bookmark:
        <pre>
        {Jetzt ist die Tabelle im Zugriff.}
        {Bookmark auf den Datensatz setzen.}
        akt_Datensatz := Query1.GetBookmark;
        if Table1.active then Table1.close;
        Table1.DataBaseName := Datenpfad;
        Table1.TableName := Dateiname;
        DataSource1.DataSet := Table1;
        Table1.open;
        Table1.GotoBookmark(akt_Datensatz);
        Table1.FreeBookmark(akt_Datensatz);
        </pre>
        Das komplette Beispiel findest du auf http://www.delphi-download.de in der Zelle SQL-Monitor.
        Ich bin aber auch nicht ganz glücklich über diese Variante, da ich nicht genau weiß, wie sich das auswirkt, wenn ich Bookmark bei einer Query setze und in einer Table freigebe. Vielleicht kann das ein anderer mal kommentieren.

        mfg Klaus-Pete

        Comment


        • #5
          Hallo Klaus-Peter,

          Dein Beispliel habe ich wohl nur halb verstanden. Wenn ich auf die Tabelle umschalte, dann geht mir doch auch meine "beliebige" Sortierung verloren.
          D.h. ich bin dabei auf die vorhandenen Indexe (oder wie auch immer der Plural von Index lautet) angewiesen und wenn es zur gerade gewählten Sortierung keinen gibt, ändert sich für den Anwender die Ansicht der Tabelle. Oder?

          Grüße Torste

          Comment


          • #6
            Hallo Torsten,
            da hast du natürlich Recht. Aus meiner Sicht war es aber die einzige Lösung, wie ich einen Datensatz bearbeiten kann, den ich in einer SQL-Abfrage sehe. Anschließend, nachdem der Datensatz geändert wurde, muß ja wieder die SQL-Abfrage gestartet werden.
            Dieser Code entstand aus folgendem Problem:
            Beim Ausprobieren meines SQL-Monitors war es möglich zwei identische Datensätze mit SQL in eine Tabelle einzufügen. Versuche aber jetzt einmal, mit SQL einen davon zu löschen. Es geht nicht. Als musste ich mir was einfallen lassen. Das war das Ergebnis davon.

            mfg Klaus-Pete

            Comment

            Working...
            X