Announcement

Collapse
No announcement yet.

Delphi-Datenbank-Problem, sortieren

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

  • Delphi-Datenbank-Problem, sortieren

    Ich habe mir in MS-ACCESS eine Datenbank angelegt in der meine
    Aktuellen Filme gespeichert sind.

    Das Ganze sieht so aus na ja, in etwa)

    Name-------CDs--------ausgeliehen an---------Kodiert mit

    Film1..|....2......|......Hans.......|............ ............FairUse
    Film2..|....1......|.....Günther...|.............. ........FlaskMPEG
    Film3..|....2......|......Tobert.....|............ ........Nandub SBC

    So , diese Datenbank habe ich als Paradox 5 Tabelle exportiert und in ein Verzeichnis gelegt.
    In meinem Delphi-Prog habe ich ein TTable1 ,
    welches die Datenbank lädt und ein DBGrid in welchem die Daten angezeigt werden.

    Jetzt möchte ich das ich per Buttons die Anzeige der Zeilen beinflussen kann ,
    so soll zb bei Klick auf Button1 nur Die Filme angezeigt werden, die
    ich mit FairUse kodiert habe,also Zeile 1.
    Oder ein anderer Button bei dessen Klick nur die Zeilen angezeigt
    werden in denen ich Filme an Günther verliehen habe. Das ganze sollte
    noch kombiniert einsetzbar sein.
    Dann möchte ich noch die Funktion einfügen dass das Programm mir nach
    drücken eines Buttons zb alle FairUse enkodierten Filme zuerst
    anzeigt,dann alle mit Nandub usw., also die Sortierung nicht mehr von der Datenbank selbst ,
    sondern von Delphi übernommen wird.
    So eine Sortierung selbst zu schreiben dürfte recht schwierig sein.
    Gibt es für so eine Filterung oder Sortierung vorgegebene DLLs , die
    ich vielleicht einbinden könnte?
    Hab schon in der Hilfe was von "Sekundärindex" und so gelesen , konnt aber nicht wirklich was damit anfangen.
    Klicke ich auf TTable1 und dann auf den Objektinspektor werden mir in den Feldern in denen der Begriff "index" vorkommt,
    keinerlei Sachen angezeigt, meine Tabelle verfügt über keinerlei Index.

  • #2
    Hallo,

    unter der Vorausgesetzung, dass die Information in verschiedene Spalten der Tabelle aufgeteilt sind, stehen mehrere Alternativen zur Verfügung: <br>
    a) TTable-Eigenschaft <b>Filter</b> <br>
    b) TTable-Ereignis <b>OnFilterRecord</b><br>
    c) SELECT-Abfrage mit einer WHERE-Einschränkung über TQuery<br>
    Für a) und b) sind Beispiele in der Delphi-Hilfe über die Suche nach "Filter" und "OnFilterRecord" zu finden. Für c) muss man sich in die Syntax der allgemeinen Datenbank-Abfragesprache SQL einarbeiten.

    P.S: Ein Index ist nur für die Sortierreihenfolge bei der Anzeige verantwortlich. Allerdings verbessert ein geeigneter Index auch die Filterung der Datensätze bei grossen Tabellen

    Comment


    • #3
      Hallo Christian,

      zum Einarbeiten findest du unter http://www.delphi-download.de einfache Programme zum Nachvollziehen.

      mfg Klaus-Pete

      Comment


      • #4
        Also ich habe hier Table1.Filter := 'Name = '+'''Edit2.text*''';
        stehen, er soll mir also das im Feld "Name" im DBGrid anzeigen was ich in das Edit Feld eingebe. So soll ZB die Eingabe von "a" im Edit Feld alle Datensätze in der Spalte "Name" rausfiltern, die nicht mit "a" oder "A" anfangen.Es funktioniert allerdings nicht, egal was ich eingebe wir nur ein leeres DBGrid angezeigt. Ich komm nicht dahinter was ich da falsch mach. Fehlen da irgendwelche Apostrophen oder lässt sich die Table1.Filter Option gar nicht mit einem Edit Feld verknüpfen

        Comment


        • #5
          Hab den Code noch mal geändert , jetzt steht folgendes da :
          Table1.Filter := 'Name = ''' +Edit2.text+ '''';
          Table1.Filtered := true;

          Jetzt gehts wenigstens eingeschränkt, wenn ich jetzt zum Beispiel "American Pie" in das Edit Feld eingebe , zeigt er mit nur die Spalte mit American Pie an. Was ich jetzt noch brauche ist die Mäglichkeit dass er mir schon bei der Eingabe von "a" oder "A" nur alle Namen die mit A oder a anfangen zeigt. Setze ich hinter das letzte + Zeichen noch ein '*' so bringt er die Fehlermeldung :
          Nicht begrenzte String Konstante , wenn ich was ins Edit Feld eingeben will

          Comment


          • #6
            Hallo Christian,

            <pre>
            Table1.Filter := 'Name = '+#39+Edit1.Text+'*'+#39;
            Table1.Filtered := true;
            Label1.Caption := 'Der Filter ist: '+Table1.filter;
            </pre>

            mfg Klaus-Pete

            Comment


            • #7
              http://www.delphi-download.de/delphi/tutorials/suche_filter.zip

              mfg Klaus-Pete

              Comment

              Working...
              X