Custom Index

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

Moderator: Moderatoren

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

Custom Index

Beitrag von Manfred »

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 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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Custom Index

Beitrag von AUGE_OHR »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Custom Index

Beitrag von Manfred »

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 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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Custom Index

Beitrag von AUGE_OHR »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Custom Index

Beitrag von Manfred »

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 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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Custom Index

Beitrag von AUGE_OHR »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Custom Index

Beitrag von Manfred »

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 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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Custom Index

Beitrag von AUGE_OHR »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Custom Index

Beitrag von Manfred »

Du machst ein Psyeudoupdate auf das Schlüsselfeld?
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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Custom Index

Beitrag von AUGE_OHR »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Custom Index

Beitrag von Manfred »

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 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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Custom Index

Beitrag von AUGE_OHR »

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