Announcement

Collapse
No announcement yet.

Filter funktioniert nicht bei Teilschlüsseln

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

  • Filter funktioniert nicht bei Teilschlüsseln

    Hallo,

    ich habe 2 Tabellen (Paradox) in eine 1:n Beziehung. Die Sätze der Zweiten Tabelle filtere ich mit folgenden Statements.

    TFlur.IndexName := 'TRASSEN_NR';
    TFlur.Open;
    TFlur.SetRangeStart;
    TFlur['TRASSENNR'] := TrassenNumber;
    TFlur.SetRangeEnd;
    TFlur['TRASSENNR'] := TrassenNumber;
    TFlur.ApplyRange;

    das funktioniert auch ganz gut, solange das Feld TRASSENNR das einzige im
    Index TRASSNE_NR ist. Nun will ich den Index wegen Sortierung auf 3 Felder erweitern und schon ist die Ergebnismenge immer 0 Sätze. Ich benutze D3 und
    BDE 5.11. Laut D2-Handbuch sollte das funktionieren.

    Danke für Eure Tips&Hilfe

  • #2
    Hallo Lutz,

    Du kannst die Range nur vernünftig verwenden wenn die Einschränkung in der gleichen Reihenfolge passiert wie die Indexdefinition.
    z.B.: Dein Index geht über die Felder A, B, C (in der Reihenfolge) dann kannst Du Range problemlos mit Feld A oder mit A,B oder mit A,B,C verwenden alles andere geht in die Hose.
    Du mußt dabei immer folgendes beachten: Die Datenmenge bleibt die gleiche (in der Sortierung anhand des Schlüssels) In dieser datenmenge wird irgendwo (bedingt durch RangeStart) ein Strich gezogen und an anderer Stelle (bedingt durch RangeEnd) ein zweiter Strich. Alles was dazwischen übrigbleibt wird dann auch angezeigt.

    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


    • #3
      Hallo Falk,

      danke für die Hilfe. Habe gerade mal nachgeschaut. Der Index besteht
      aus 2 Feldern (TRASSENNR,GEMARKUNG) und die Range bezieht sich nur auf
      das erste Feld. Es soll innerhalb einer Trassen-Nummer sortiert nach Gemarkung angezeigt werden. Der Filter ist immer nur eine Nummer, also
      StartRange und EndRAnge hat die selbe Nummer. Sobald ich das Feld Gemarkung im Index lösche funktioniert die Filterfunktion wieder.
      Hast Du vielleicht noch eine Idee ?

      Gruß Lut

      Comment


      • #4
        Hallo Lutz,

        ich habe bei sowas immer mit Table.SetRange([Anfangswert], [Endwert]) gearbeitet und dabei eigentlich keine Probleme gehabt.
        Bei der Variante mit SetRangeStart und SetRangeEnd mußt Du die nichtbenutzten Felder aus dem Index wahrscheinlich noch explizit auf Null setzen (Field.Clear), damit er dort nicht nach "irgendwas" filtert. Bei SetRange passiert das lt. Hilfe automatisch.

        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
          Hallo Falk,

          ich habe es mal, wie von Dir immer benutzt, gemacht und hatte den
          selben Erfolg wie Du. DANKE !

          Gruß Lut

          Comment


          • #6
            Hallo Falk,<p>
            ich habe schon oft mit SetRange (ab zwei Felder zur Einschränkung) Probleme gehabt. <br> Bsp.: SetRange([MaterialNrvon, Datumvon], [MaterialNrbis, Datumbis]);<br>Schränke ich bei MaterialNr nur eine Nummer ein, so werden auch die Datensätze mit dem gewünschten Datum<br>selektiert (z.B. SetRange([20, 01.09.2001],[20, 10.09.2001]). Setze ich die MaterialNr von 0 bis 99 (alle vorhandenen Nummern<br>liegen dazwischen), so zieht er sich alle Datensätze ohne Einschränkung das Datums. <br>Dies passiert auch, wenn ich für die MaterialNr die niedrigste und höchste vorhandene Nummer einsetze.<br>Hast du vielleicht dazu eine Idee?<p>
            Grüße von Claudi

            Comment


            • #7
              Hallo Claudia,

              das ist genau das Problem wie in meiner ersten Antwort geschildert. Du hast zB. eine Datenmenge mit <pre>
              MatNr Datum
              1 01.01.2000
              1 02.01.2000
              1 03.01.2000
              2 01.01.2000
              2 02.01.2000
              3 01.01.2000
              </pre> So sieht die Datenmenge aus wenn sie nach Matnr, Datum indiziert ist. Wenn du jetzt mit SetRange([1, 01.01.2000], [1, 03.01.2000]) machst, dann zeigt er dir wie gewollt nur die ersten drei Datensätze - prima. Erweiterst du aber die range für die Materialnummer, dann selektierst du den Gesamten Bereich zwischen den MatNr. Du mußt dir das so vorstellen, als ob Du in der o.g. Datenmenge Zeilen markieren willst und dies nur in einem <b>zusammenhängenden</B> Bereich tun kannst.
              Du mußt also den Index entsprechend definieren - soll das Datum das zweite Auswahlkriterium sein, dann muß es im Index als erstes Feld geführt werden.
              Mach dir mal die Mühe und trag ein paar Werte für MatNr und Datum in eine Exceltabelle ein, sortiere diese nach 1.MatNr und 2.Datum und dann versuch mit der Maus die Zeilen zu markieren die die Bedingungen für RangeStart und RangeEnd erfüllen. Dann sortiere nach 1.Datum und 2.MatNr und versuch es nochmal. Das dürfte die Funktion von SetRange verdeutlichen und vor allem die Grenzen aufzeigen. Bei komplexen Dingen kommt man dann einfach um SQL nicht herum.

              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