Filtern von Daten

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21206
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Filtern von Daten

Beitrag von Manfred »

Jimmy,

den vergleich Seek() OrdwildSeek() verstehe ich jetzt nicht so ganz. Bei einem Seek() suche ich nur den EINEn Satz und das liefert sofort ein Ergebnis. Bei einem OrdWildSeek() wird erstmal der erste Satz gesucht, der in Frage kommt, aber das kann dauern und in der Zeit geht nichts mehr. (Ohne Threads).

Das Indexfeld für den 2ten Schlüssel ist 2 Zeichen breit. Somit würde das evtl. hinkommen, was Du vorschlägst. Auch darüber muß ich mir mal Gedanken machen. Aber alles führt dazu, dass ich die fertige Browse-Suchroutine anpassen muß, was mir im Moment nicht so gefällt. Dann geht das Pauschale ein wenig verloren.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Filtern von Daten

Beitrag von AUGE_OHR »

Manfred hat geschrieben:den vergleich Seek() OrdwildSeek() verstehe ich jetzt nicht so ganz. Bei einem Seek() suche ich nur den EINEn Satz und das liefert sofort ein Ergebnis. Bei einem OrdWildSeek() wird erstmal der erste Satz gesucht, der in Frage kommt
hihi ... und wie "meinst" du wohl "sucht" er mit OrdWildSeek() ?
siehe dir doch bitte mal den Code von der Schleife an.

Code: Alles auswählen

       DO WHILE FOUND()
         AADD(aTreffer,DatenSatz)
         OrdWildSeek()
      ENDDO
ich prüfe auf FOUND() und mache kein SKIP oder so ...
Manfred hat geschrieben:Das Indexfeld für den 2ten Schlüssel ist 2 Zeichen breit. Somit würde das evtl. hinkommen, was Du vorschlägst. Auch darüber muß ich mir mal Gedanken machen. Aber alles führt dazu, dass ich die fertige Browse-Suchroutine anpassen muß, was mir im Moment nicht so gefällt. Dann geht das Pauschale ein wenig verloren.
tja das ist das Los der Programmierers ...
ich "denke" du sollte zunächst einen "neuen" Index anlegen wo du "die" Gegebenheiten anpasst.
dieser könnte auch ein SUBINDEX sein den du temporär auf einen bestehenden Index / SCOPE als "Einschränkung" ausbaust.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21206
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Filtern von Daten

Beitrag von Manfred »

Jimmy,

ich kann Dir jetzt überhaupt nicht folgen. Meine Erfahrung ist, wenn Du einen OrdWildSeek() machst, dann kann es sein, dass über Sekunden nichts am Bildschirm passiert, bis der ERSTE Treffer gelandet wurde. Alle weiteren sind dann schneller.

Beispiel aus dem Handbuch

Code: Alles auswählen

PROCEDURE Main 
 
    USE Customer 
    INDEX ON LASTNAME TO LAST.NTX 
 
    ? OrdWildSeek("Wa*r?")   // Ergebnis: .T.    <-- das ist der 1.Durchgang und der kann dauern.
    ? "DbFound:",Found()     // Ergbenis: .T. 
 
    // Ergebnis: 
    // Treffer:               6 Schluessel: Walter 
    // Treffer:              22 Schluessel: Waters 
    DO WHILE Found() 
      ? "Treffer:",RecNo(),"Schluessel:",&(OrdKey()) 
      OrdWildSeek() 
    ENDDO 
    CLOSE ALL 

  RETURN 
oder verstehe ich das Beispiel falsch? man muß 2x OrdWildSeek() aufrufen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Filtern von Daten

Beitrag von AUGE_OHR »

Manfred hat geschrieben:ich kann Dir jetzt überhaupt nicht folgen. Meine Erfahrung ist, wenn Du einen OrdWildSeek() machst, dann kann es sein, dass über Sekunden nichts am Bildschirm passiert, bis der ERSTE Treffer gelandet wurde.
:shock: das kann ich überhaupt nicht bestätigen.
wir sprechen ja wohl von CDX ... sind RUSHMORE, OPTIMIZE und SMARTFILTER bei dir default ( ON ) ?
Manfred hat geschrieben:Alle weiteren sind dann schneller.
wieso sollten die schneller sein ? die Begriff müssen ja nicht geordnet sein den du kannst ja auch mehrere Wildcard verwenden

Code: Alles auswählen

OrdWildSeek("*0815*4711*")
heisst doch nur das die beiden Begriffe irgendwo im Index-Key ( auch über mehrere Felder ) vorhanden ist.
Manfred hat geschrieben:... man muß 2x OrdWildSeek() aufrufen.
du kannst auch die Schleife auflösen und 1000x OrdWildSeek() / FOUND() schreiben wenn du willst.

Ein OrdWildSeek() muss 1x "gefüttert" werden und sollte genau so schnell wie ein "normales" SEEK() sein.
nun kannst du aber mit SEEK() ja nicht "weiter suchen" und genau das möchtest du ja.
dazu kannst du dann wieder OrdWildSeek() ohne weitere Parameter aufrufen.

ich denke die Frage ist ob du eine "scharfe" oder "unscharfe" Suchen haben möchtest.

typische Fall wo ich so was vorgesehen habe sind Telefon Nummer suchen.
statt nun in 10 TAG´s nach der angezeigten Nummer zu suchen hab ich einen Index TAG über alle 10 Telefon / Fax / Handy Felder
und erledige das per "unscharfe" Suche denn es könnte, je nachdem wie viele Stellen der User eingibt, zu "mehr" Ergebnissen kommen.
das spielt aber in disem Fall keine Rolle denn dem User "reichen" die "angebotenen" Treffen um eine Auswahl zu ermöglichen.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21206
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Filtern von Daten

Beitrag von Manfred »

Ich habe OrdWildSeek() benutzt für ? und * im Suchbegriff
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Filtern von Daten

Beitrag von Jan »

Manfred,

auch wenn ich gestehen muß, das ich nicht alles gelesen habe (und damit eventeull jetzt falsch liege): Wenn Du einfach nur einen Begriffsanfang suchst: Mach doch ein DbSeek(cSuchbegriffsanfang, .T.). Dann springt der auf den ersten Satz, der dem Suchbegriff entspricht, und alle folgenden stehen Dir auch zur Verfügung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21206
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Filtern von Daten

Beitrag von Manfred »

Im Moment weiß ich noch gar keine Lösung. Ich muß das mal etwas nach hinten schieben.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filtern von Daten

Beitrag von brandelh »

Hallo Manfred,

du musst einen scope auf den Index setzen, der deiner Sortierung entspricht.
Dieser sollte möglichst wenig Datensätze über lassen (also nicht "1" in DBF mit 100.000 Datensätzen die mit "1" beginnen).

Ich habe nicht alles gelesen, aber wenn du nun einen BROWSE brauchst, bleibt als einfachste Lösung der SET FILTER => probieren ob es schnell genug ist !
Wenn nicht ...
Gruß
Hubert
Antworten