Filtern von Daten
Moderator: Moderatoren
- Manfred
- 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
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.
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!!
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!!
- AUGE_OHR
- 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
hihi ... und wie "meinst" du wohl "sucht" er mit OrdWildSeek() ?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
siehe dir doch bitte mal den Code von der Schleife an.
Code: Alles auswählen
DO WHILE FOUND()
AADD(aTreffer,DatenSatz)
OrdWildSeek()
ENDDO
tja das ist das Los der Programmierers ...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.
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
Jimmy
- Manfred
- 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
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
oder verstehe ich das Beispiel falsch? man muß 2x OrdWildSeek() aufrufen.
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
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!!
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!!
- AUGE_OHR
- 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
das kann ich überhaupt nicht bestätigen.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.
wir sprechen ja wohl von CDX ... sind RUSHMORE, OPTIMIZE und SMARTFILTER bei dir default ( ON ) ?
wieso sollten die schneller sein ? die Begriff müssen ja nicht geordnet sein den du kannst ja auch mehrere Wildcard verwendenManfred hat geschrieben:Alle weiteren sind dann schneller.
Code: Alles auswählen
OrdWildSeek("*0815*4711*")
du kannst auch die Schleife auflösen und 1000x OrdWildSeek() / FOUND() schreiben wenn du willst.Manfred hat geschrieben:... man muß 2x OrdWildSeek() aufrufen.
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
Jimmy
- Manfred
- 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
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!!
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!!
- Jan
- 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
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- 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
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!!
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!!
- brandelh
- 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
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 ...
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
Hubert