Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Custom Index

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Custom Index

Beitrag von Manfred » Mi, 09. Nov 2016 9:27

Hat jemand schonmal damit gearbeitet? Wir haben gestern bei unserem Treffen in Leverkusen versucht einen Custom Index aufzubauen, aber leider war das Ergebnis nicht so wie erwartet. Vielleicht was es etwas zu eng mit der Zeit gestern, aber wir sind zu keinem zufriedenstellenden Ergebnis gekommen.

das ist hier ein kurzer Auszug aus dem versuch.

Code: Alles auswählen

do while ! Eof()
OrdKeyAdd("datum")
Dbseek(datum+1)
enddo
Beim Ordkeyadd() wird ein .F. zurückgeliefert. Aber was kann man da falsch machen?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Custom Index

Beitrag von AUGE_OHR » Mi, 09. Nov 2016 16:51

du musst den Index erst aufbauen bevor du etwas "add"en kannst.

wichtig : der IndexKey muss immer die selbe Länge haben

Code: Alles auswählen

// CUSTOM Index
INDEX ON ZAHLUNG->ZDUMMY TAG "FTS" TO "ZAHL_FTS.NTX" CUSTOM
? IndexKey()
OrdSetFocus(0)

nStart := SECONDS()
Ondummy("Start",TIME() )
GO TOP
DO WHILE !EOF()
   // zerlege Memo
   FTS_MEMOADD(ZAHLUNG->ZZUSATZ)
   SKIP
ENDDO
Ondummy("Stop",SECONDS()-nStart )

OrdSetFocus("FTS")
SEEK("verrechnet")
? FOUND()
WAIT
gruss by OHR
Jimmy

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Custom Index

Beitrag von Manfred » Mi, 09. Nov 2016 17:00

Ich habe den Index aufgebaut, allerdings lief das absolut schnell. Sicherlich weil ja nix drin steht. Der Index hat auch immer die gleiche Länge.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Custom Index

Beitrag von AUGE_OHR » Mi, 09. Nov 2016 17:04

hm ... schon mal mit

Code: Alles auswählen

OrdKeyAdd(DTOS(FIELD->datum))
versucht ?
gruss by OHR
Jimmy

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Custom Index

Beitrag von Manfred » Mi, 09. Nov 2016 17:12

Nein, daran gedacht hatte ich schon, aber in der Anleitung steht ausdrücklich, das der TAG angegeben werden muß und nicht der Wert. Bei der Erstellung, durch die ja nichts eingetragen wird steht der Schlüssel schon drin.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Custom Index

Beitrag von AUGE_OHR » Mi, 09. Nov 2016 19:10

Manfred hat geschrieben:... aber in der Anleitung steht ausdrücklich, das der TAG angegeben werden muß und nicht der Wert.
du hast Recht.

aber den "Wert" musst du trotzdem noch manuell in den Custom Index einfügen.

Code: Alles auswählen

FUNCTION FTS_MEMOADD(cZUSATZ)
LOCAL aText
LOCAL i,iMax

// trennt die Wörter
aText := AtInside( " ",cZUSATZ)
iMax := LEN(aText)

IF iMax > 0
   FOR i := 1 TO iMax
      Ondummy(RecNo(), aText[i] )                        // Debug
      REPLACE ZAHLUNG->ZDUMMY WITH aText[i]
      OrdKeyAdd( "FTS")
   NEXT
ENDIF
RETURN .T.
Erklärung : ich habe ein "extra" Feld ZDUMMY wegen der "Länge" des IndexKey()
es dient nur zum "füllen" des Custom Index mit gleicher Länge wobei es, nach dem OrdKeyAdd(),
nicht mehr wichtig ist "was" in dem Feld steht ( ist nun im Custom Index )

der Nachteil des Custom Index ist die "Pflege" denn man benötigt auch eine DEL und REPLACE Function.

p.s. ich suche nicht mit SEEK sondern mit OrdWildSeek()
gruss by OHR
Jimmy

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Custom Index

Beitrag von Manfred » Mi, 09. Nov 2016 19:12

was heißt den Wert muß ich eintragen? Den Wert, den ich gefunden habe? Aber wo trägt man den ein? Da gibt es keinen Parameter. Nur den TAG. Oder was meinst Du?
Ach so, und SEEK wird mit Softseek gemacht. Das klappt eigentlich prima.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Custom Index

Beitrag von AUGE_OHR » Mi, 09. Nov 2016 19:21

Manfred hat geschrieben:was heißt den Wert muß ich eintragen?
Den Wert, den ich gefunden habe?
Aber wo trägt man den ein?
Da gibt es keinen Parameter. Nur den TAG. Oder was meinst Du?
Tja ... "das" ist eben das "Geheimnis" des Custom Index ;-)
siehe dir noch mal den Code von mir an ... der funktioniert "so"
Manfred hat geschrieben:Ach so, und SEEK wird mit Softseek gemacht. Das klappt eigentlich prima.
OrdWildSeek() ist noch was anderes.
ich will ja in Memo suchen und da kann es eben auch ein Teil-Ausdruck sein.
gruss by OHR
Jimmy

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Custom Index

Beitrag von Manfred » Do, 10. Nov 2016 7:56

Du machst ein Psyeudoupdate auf das Schlüsselfeld?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Custom Index

Beitrag von AUGE_OHR » Do, 10. Nov 2016 19:58

Manfred hat geschrieben:Du machst ein Psyeudoupdate auf das Schlüsselfeld?
JA
üblicherweise würde der IndeyKey() ja automatisch "gepflegt" aber bei CUSTOM musst du dich eben selbst darum kümmern und die Aktion "auslösen" mit OrdKeyAdd()

dito. OrdKeyRemove()

Code: Alles auswählen

FUNCTION FTS_MEMODEL(cZUSATZ)
LOCAL aText
LOCAL i,iMax

aText := AtInside( " ",cZUSATZ)
iMax := LEN(aText)

IF iMax > 0
   FOR i := 1 TO iMax
      Ondummy(RecNo(), aText[i] )              // debug
      REPLACE ZAHLUNG->ZDUMMY WITH aText[i]    // dummy Feld (Länge) wegen Memo Inhalt
      OrdKeyRemove( "FTS")                     // CUSTOM Aktion "auslösen" 
   NEXT
ENDIF
RETURN .T.
gruss by OHR
Jimmy

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Custom Index

Beitrag von Manfred » Fr, 11. Nov 2016 7:04

Hi Jimmy, das war nicht meine Frage. Das man OrdKeyAdd() oder OrdKEyRemove() selbst machen muß, ist mir klar. Meine Frage war, ob Du vorher das entsprechende Feld mit einem Wert upgedatet hast. Und dann erst OrdkeyAdd() den "neuen" Wert einträgt und ein .T. zurückliefert und nicht so wie bei mir ein .F. Ich habe nämlich vorher nichts ins feld geschrieben, weil ich es so verstanden habe, das ein OrdKEyAdd() genügt, wenn man auf dem Satz steht, den man aufnehmen will.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Custom Index

Beitrag von AUGE_OHR » Fr, 11. Nov 2016 13:27

Manfred hat geschrieben:Das man OrdKeyAdd() oder OrdKEyRemove() selbst machen muß, ist mir klar.
OK
Manfred hat geschrieben:Meine Frage war, ob Du vorher das entsprechende Feld mit einem Wert upgedatet hast. Und dann erst OrdkeyAdd() den "neuen" Wert einträgt und ein .T. zurückliefert und nicht so wie bei mir ein .F. Ich habe nämlich vorher nichts ins feld geschrieben, weil ich es so verstanden habe, das ein OrdKEyAdd() genügt, wenn man auf dem Satz steht, den man aufnehmen will.
habe kein CUSTOM Index auf ein "normales" Feld aber wenn es bei dir nicht funktioniert muss man es offensichtlich machen.
gruss by OHR
Jimmy

Antworten