Suchen in Tabellen

9. Januar 2006 13:56

Hallo,
ich Entwickle gerade eine Form (Basis ist die Tabelle 97 Comment Line (Bemerkungszeile)) die ein beliebiges Stichwort suchen soll.
Ich habe die Tabelle um einige Spalten erweitert!
Das suchen und Anzeigen in einer Tabelle ist ja auch kein Problem.

Jetzt möchte ich aber zum einen in mehreren Spalten gleichzeitig suchen und bei Bedarf in weiteren Tabellen. z.B. Artikel, Artikelposten, Verkaufskopf, Verkaufszeile etc.

Ich hatte mir überlegt, das ich zum Suchen über mehrere Tabellen eine seperate Tabelle fülle und dann diese Filtere und Anzeige.
...bleibt nur das Problem mit den Filtern mehrer Spalten :!: :?:
Es kann ja möglich sein das ein gefundener Begriff in unterschiedlichen Zeilen vorhanden ist!
Gruß Mikka

9. Januar 2006 14:16

Ich vermute mal, du möchtest die Suche über die verschiedenen Felder "ODER"-verknüpft haben.

Hier bieten sich zwei Möglichkeiten:
  1. Du durchsuchst zuerst Feld 1 und setzt für jeden Treffer eine Satzmarke,
    anschließend das ganze Spiel nochmals für Feld 2,
    anschließend das ganze Spiel nochmals für Feld [...]
    Zu guter Letzt zeigst du nur noch satzmarkierte an.
  2. Du erzeugst eine sogenannte "Word-Match-Tabelle", welche aus folgenden Feldern besteht:
    Tabellennr. [Integer]
    Record-ID [Text80]
    Feldnr. [Integer]
    Suchtext [Text80]

    Das Feld Record-ID füllst du mit CommentLine.GETPOSITION(FALSE);, das Feld Suchtext mit CommentLine.Comment;.
    Das ganze machst du dann pro Datensatz für jedes zu indizierende Feld (dafür die Feldnr.).
    Wenn du jetzt in dieser Suchtext-Tabelle ein bestimmtes Wort filterst, dann findest du zwangsläufig alle Treffer in allen Feldern aller indizierten Tabellen.
    Bitte beachte, dass es bei dieser Lösung sehr wahrscheinlich ist, dass du einen einzelnen Datensatz mehrfach angezeigt bekommst.

    Um nun von einem Treffer wieder auf den tatsächlichen Datensatz zu gelangen verwendest du einfach CommentLine.SETPOSITION(MeineSuchtabelle.Suchtext);

Das Ganze ist jetzt nicht bis in's kleinste Detail ausgearbeitet, aber als Lösungsansatz schon sehr gut geeignet.
Das Schöne an der Lösung 2 ist, dass dieselbe Suchtext-Tabelle für alle Tabellen verwendet werden kann und du durch zusätzliche Filter auf die Tabellennr. und / oder Feldnr. bestimmen kannst, wo überall gesucht werden soll.

9. Januar 2006 14:41

Klasse Timo,
das mit der Satzmarke finde ich gut. Weil ich es schnell umsetzten kann.
Die zweite Lösung finde ich auch ansprechend, aber da komme ich bestimmt zu den Problem, das ich mich mehr in RecId und RecRef einarbeiten muss bzw. Irgendwelche anderen Probleme.
zZ. bin ich in Zeitdruck!
Danke nochmal.
Gruß Mikka

PS: Wann kommt der Tag, an den ich dir mal helfen kann? :roll:

9. Januar 2006 14:55

Hi Mikka,
mikka hat geschrieben:[...]das mit der Satzmarke finde ich gut. Weil ich es schnell umsetzten kann.

Ich kann dir die erste Variante von Timo auch empfehlen. Das habe ich auch schon an vielen Stellen genutzt und nur gute Erfahrung gemacht. Und außerdem lernen die Navision-Benutzer auch mal die Möglichkeiten kennen, die die "Nur Satzmarkierte"-Funktion bietet. :lol:

Gruß, Marc

9. Januar 2006 20:23

mikka hat geschrieben:[...]
Die zweite Lösung finde ich auch ansprechend, aber da komme ich bestimmt zu den Problem, das ich mich mehr in RecId und RecRef einarbeiten muss
[...]
Das hat nichts mit RecordRef zu tun. Wie du siehst, ist das eine C/SIDE-Funktion auf Record-Ebene.
Ich muss dir aber Recht geben; die erste Variante ist einfacher umzusetzen, dafür dürfte die zweite Variante deutlich performanter sein, sobald man in mehr als zwei Feldern eine "ODER"-Suche durchführt, da man die Treffer nur einmal vom ersten bis zum letzten Satz durchlaufen muss (um keine doppelten Einträge im Ergebnis-Fenster anzuzeigen).


mikka hat geschrieben:[...]
PS: Wann kommt der Tag, an den ich dir mal helfen kann? :roll:
Augen auf, ab und an komme ich auch mal mit einer Frage rüber, wo ich selber den Wald vor lauter Bäumen nicht mehr sehe. ;-)