Announcement

Collapse
No announcement yet.

Filten in Lookup-Feldern

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

  • Filten in Lookup-Feldern

    Hallo Leute,

    ich habe folgendes Problem. Ich erweitere eine bestehende Tabelle mit einem
    sogenannten Lookup-Feld. Anschließend möchte ich dieses neue Feld als Filterkriterium benutzen. Delphi lässt das aber nicht zu.
    Kann man dieses Problem umgehen?

    Danke im voraus

  • #2
    Hallo,

    mit welcher Datenbank wird gearbeitet und welche Datenzugriffskomponente (TTable, TQuery, TADODataSet, etc.) kommt zum Einsatz? Ein Lookup-Feld ist ja nur die für den Anwender "passende" Umsetzung eines Wertes der Datenbanktabelle in einen anderen Anzeigewert. Somit kann man in jedem Fall nach dem Originalwert filtern

    Comment


    • #3
      Hallo,

      ich versuche mein Problem etwas zu konkretisieren. Meine Anwendung besteht hauptsächlich aus
      drei Tabellen (angesprochen über TTable Komponente, Paradox-Datenbank).
      In der ersten Tabelle werden in jedem Datensatz verschiedene Merkmale und eine vierstellige Nummer gespeichert. In der zweiten Tabelle entsprechend andere Merkmale mit einer dreistelligen Nummer. In der dritten Tabelle werden nur die entsprechenden Kombinationen der vier- und dreistelligen Nummern gespeichert. Ich möchte nun nach den oben genannten Merkmalen filtern, so das ich bestenfalls nur noch einen Datensatz als Ergebnis der dritten Tabelle angezeigt bekomme.
      Ich habe dazu auch eine Lösung gefunden (mit Schleifen, Arrays usw.), welche aber dementsprechend viel zu langsam ist.
      So habe ich also versucht, mir mit den Lookup-Feldern eine "neue" Tabelle zusammenzustellen (auf den Orginalwerten der dritten Tabelle), in der ich dann nach den Merkmalfeldern filtern kann.

      Vielen Dank für weitere Antworte

      Comment


      • #4
        Hallo,

        wenn nur ein einziger Datensatz gefunden werden soll, würde ich zu TQuery greifen und eine SELECT-Anweisung (JOIN über die beteiligten Tabellen) mit der passenden WHERE-Bedingungen zusammenbauen. Dieser Weg ist flexibler als es ein Filter jemals sein kann.

        Wenn der Datensatz in einer TTable bearbeitet werden soll, kann man den konkreten Datensatz dann im zweiten Schritt über den von TQuery ermittelten Primärschlüsselwert gezielt aufrufen.
        &#10

        Comment


        • #5
          Hallo Jörg,

          wie wäre es mit einer TQuery und ein bißchen SQL ala <br>
          select A.Merkmal, B.Merkmal, C.Wert from A, B, C<br>
          where A.Merkmal=Merkmal1 and B.Merkmal=Merkmal2 and A.Nr4=C.Nr4 and B.Nr3=C.Nr3<br>
          <br>
          Das ist mit Sicherheit einfacher und auch nicht langsamer als irgendein verrücktes Konstrukt mit LookUp-Feldern und Filter.

          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
            ich seh schon, Andreas war etwas schneller
            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


            • #7
              Hallo,

              vielen Dank für die freundliche Unterstützung. Habe Deinen Vorschlag entsprechend umgesetzt und hat prima funktioniert (einfacher Programmtext, viel schneller).
              Wenn man das eine Problem gelöst hat, stösst man sofort auf das nächste. Vieleicht hast Du auch dafür eine Idee.
              Von verschiedenen Programmstellen kann ich mir ein Vorschau anzeigen lassen (selbst gestrickt mit: Form1.QuickRepTV2.onpreview := showpreview2; Form1.QuickRepTV2.preview. Beim ersten Aufruf der Vorschau lasser ich mir mehrere Seiten einer gefilterten Datenmenge anzeigen, beim zweitenmal den ganzen Datenbestand. Bis dahin funktionierts. Wenn ich dann wieder die gefilterte Datenmenge anschauen will, bekomme ich trotdem alle Daten angezeigt.
              Gibt es eine Möglichkeit vor dem Anzeigen einer solche Vorschau ein RESET durchzuführen?

              Vielen Dan

              Comment


              • #8
                Hallo Jörg,

                aus Deiner Frage geht nicht ganz hervor wie Du die unterschiedlichen Datenmengen zur Laufzeit verwaltest. Nach der Methode:
                Query1.Close;<br>
                Query1.SQL := select für Filter<br>
                Query1.Open;<br>
                ...<br>
                Query1.Close;<br>
                Query1.SQL := select für alle Daten<br>
                Query1.Open;<br>
                dürfte es eigentlich keine Probleme geben, da die Daten immer neu abgerufen werden. Alternativ kannst Du aber auch zwei TQuery nehmen (eine für den Gesamtbestand und eine für die selektiven Daten) und schaltest dann in der TDataSource mit Dataset := Query1 bzw. Dataset := Query2 zwischen den Datenquellen um.

                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

                Working...
                X