nach Umstellung auf CDX Problem beim SUCHEN!

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon xbaseklaus » Do, 14. Apr 2016 8:11

Hi @ALL

nach Umstellung von DBEDBF auf DBEFOX und NTX auf CDX und ANSI

ist jetzt folgende Problem aufgetreten ...

Name: Härtel

wenn ich danach suchen lasse "Härtel" obwohl mehrer angelegt sind -> findet er in der Suchfunktion keinen einzigen !!!

gebe ich "Hä" findet er alle die mit "Hä" anfangen und alle "Härtel"

WARUM - liegt das bei CDX am Umlaut ä oder woher kommt nach der Umstellung jetz auf einmal das Problem ?

Mfg. Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 11:01
Wohnort: FRANKEN

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon georg » Do, 14. Apr 2016 8:23

Hallo, Klaus -


da gibt es einige Stellschrauben, die zu solchen Problemen führen können. Mir fallen da folgende ein:

  • SET CHARSET/SET COLLATION: die CDX-Dateien sollten mit der gleichen Einstellung erstellt und genutzt werden;
  • Datenherkunft: wenn die Daten als OEM in die Dateien geschrieben wurden, hast Du sie bei der Umstellung von OEM nach ANSI konvertiert?
  • die Suche mit "Hä" - aus dem Programmquelltext (Compiler-Schalter /ga?) oder aus einer Eingabe?
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1769
Registriert: Fr, 08. Feb 2008 21:29

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Jan » Do, 14. Apr 2016 8:29

Xbase++ erkennt intern, ob ein dbf in ANSI oder ASCII erstellt wurde. Und konvertiert intern entsprechend um.

Wenn Dein Programm ein "Hä" findet, ein "Härtel" aber nicht, dann kann das ja kein Umlaut-Problem sein.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon brandelh » Do, 14. Apr 2016 8:51

Ich indiziere seit Clippertagen mit KeinUmlaut(Name) ...

Härtel, Haertel, HÄRTEL etc. alle will ich als Treffer haben und das geht nur wenn man die Umlaute ausschaltet.
CDX hat auch eine Umlautunabhängige Suche, wobei das genaue Verhalten ab und an zu diskussionen führt...
Code: Alles auswählen
*---------------------------------------------------------------------------
function keinumlaut (txt)            // keine deutschen Umlaute in INDEX
   local TextLen
   TextLen := len( Txt )             // Bei Indexen sind keine kürzeren
                                     // Rückgabewerte erlaubt !
   txt:=upper(txt)
   txt:=STRTRAN(txt,"Ä","AE")        //       A C H T U N G    !!!
   txt:=STRTRAN(txt,"Ö","OE")
   txt:=STRTRAN(txt,"Ü","UE")        //  OEM <-> ANSI könnte Probleme geben.
   txt:=STRTRAN(txt,"ß","SS")

   txt:= left( txt , TextLen )       // Schlüssellänge auf
                                     // alten Wert setzen
return txt


hier wäre es besser den Zeichensatz (ANSI / OEM) abzufragen und mit chr(x) zu tauschen.

Code: Alles auswählen
*--------------------------------------------------------------------------------
function IsOEM()
return ( set(_SET_CHARSET) = 1 )
*--------------------------------------------------------------------------------
function IsAnsi()
return ( set(_SET_CHARSET) = 0 )
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon xbaseklaus » Do, 14. Apr 2016 8:57

Jan hat geschrieben:Xbase++ erkennt intern, ob ein dbf in ANSI oder ASCII erstellt wurde. Und konvertiert intern entsprechend um.

Wenn Dein Programm ein "Hä" findet, ein "Härtel" aber nicht, dann kann das ja kein Umlaut-Problem sein.

Jan


Stimmt es ist kein Umlaute Problem

weil z.B. "Böhm" habe ich auch mehrere und die findet er auch direkt alle !

ABER "Härtel" nicht -> es muß aber ein INDEX CDX Problem sein , da ich einen INDEX Kundname habe und er mit SEEK darüber sucht !

und bei Eingabe von "Härtel" findet er NICHTS ... habe den INDEX auch gelöscht und neu erstellt KEINE Änderung ... BIN SPRACHLOS :-(

Mfg Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 11:01
Wohnort: FRANKEN

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon xbaseklaus » Do, 14. Apr 2016 9:16

Ich habe die Datenbank in VDBU geladen

alle Umlaute sind in ANSI !

habe dazu den Index Kundname geladen

Alle "Härtel" werden auch in der Tabelle mit dem Index nacheinander richtig angezeigt - jetzt verstehe ich gar nix mehr :-(

dann muß er sie doch bei SEEK finden ?

Code: Alles auswählen
set index to kundname
seek trim(sname)

if eof()
@21,2 say "Kein Datensatz mit "+sname
wait("Weiter mit Taste")


kann der TRIM Befehl stören ?
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 11:01
Wohnort: FRANKEN

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Jan » Do, 14. Apr 2016 9:27

Klaus,

Du hast Dir die Anwort schon gegeben. Mach NIEMALS ein Trim/RTrim/LTrim/AllTrim auf den Suchbegriff! Das muß scheppern.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon brandelh » Do, 14. Apr 2016 9:34

Der Suchbegriff kann getrimmt werden wie er will, nur beim Indizieren darf man die Länge nicht ändern !
Ich nutze normal alltrim() ;-)

In der Datenbank müssen die Namen natürlich linksbündig stehen, führende Blanks ... kann man aber ausschließen, sonst würde "Hä" auch nix finden.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Manfred » Do, 14. Apr 2016 9:34

Beim Suchen dürfte das doch egal sein. Er findet ja ein "Hä". (Da ich es aber generell nicht mache (glaube ich) vermute ich das mal.) Beim Index selbst darf man das nicht, das ist klar.

Verflixt, Hubert war schneller. Hoffentlich nicht auch einsamer ;-)
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15969
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon xbaseklaus » Do, 14. Apr 2016 9:36

Jan hat geschrieben:Klaus,

Du hast Dir die Anwort schon gegeben. Mach NIEMALS ein Trim/RTrim/LTrim/AllTrim auf den Suchbegriff! Das muß scheppern.

Jan


sname:= space(30)

sname ist das was ich eingebe zu vergleichen ... verwende ich hier kein TRIM findet er garnichts ...

das ist nicht der INDEX

bei "H" findet er was
bei "Hä" findet er was

bei "Här" findet er schon nichts mehr

gebe ich z.B.

Suchwort "Böhm"

"B" "Bö" "Böh" "Böhm" findet er immer was !!!
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 11:01
Wohnort: FRANKEN

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Manfred » Do, 14. Apr 2016 9:41

mach doch mal einen Softseek und schaue mal wo er landet. Dann versuche es mal statt mit EOF() mit Found() nur mal so zur Probe. Ich habe schon die dollsten Sachen erlebt. Oder geh mal zu der Stelle im Debugger und tippe den Seek in der Console ein um zu schauen, was er dann macht. Nur mal so um evtl. andere blödsinnige Fehler zu finden.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15969
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Jan » Do, 14. Apr 2016 9:47

Jungs,

natürlich habt Ihr Recht - Trim auf den Suchbegriff ist natürlich in Ordnung. Nur bei der Indexerstellung gilt das, was ich geschrieben hatte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon xbaseklaus » Do, 14. Apr 2016 9:54

Manfred hat geschrieben:mach doch mal einen Softseek und schaue mal wo er landet. ...


OK ... setze ich am Anfang SET SOFTSEEK ON

Suchwort: "Härtel"

Dann findet er "Haertel" und alle "Härtel"

also muß ich SOFTSEEK auf ON setzen !

Wenn ich SOFTSEEK auf ON setze findet er auch alle "Härtel" überall auf anhieb ...

Mfg Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 11:01
Wohnort: FRANKEN

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon xbaseklaus » Do, 14. Apr 2016 9:55

kann mir dann BITTE auch jemand erklären warum das so ist ! Damit ich nicht dumm sterbe :-(

Anscheinend war auf jeden Fall das Problem das es auch noch einen "Haertel" gab !
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 11:01
Wohnort: FRANKEN

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Tom » Do, 14. Apr 2016 10:20

Simple Frage: Schon ein Reindex ausgeführt?

Softseek ist gefährlich, weil es den Datensatzzeiger dort positioniert, wo der "nächsthöhere" Indexeintrag gemäß Suchbegriff zu finden ist. Wenn der Index beispielsweise mit DtoS() auf ein Datumsfeld erzeugt wurde und man sucht nach dem 01.01.2017, "findet" DbSeek() den 02.01.2017, wenn Softseek aktiv ist. Ohne Softseek würden Found() auf .F. und Eof() auf .T. gehen. Ist also kein "Härtel" in der Tabelle, dafür aber ein "Meier", wobei es dazwischen keine Einträge gibt, findet Deine Suche eben "Meier", obwohl Du nach "Härtel" gesucht hast.

Da "Böhm" ordnungsgemäß gefunden wird, gibt es neben Indexfehlern auch die Möglichkeit, dass Du beispielsweise irgendwie nur die ersten 4 Buchstaben verwendest. Oder vergleichbare Fehler machst. Hol Dir doch an den entsprechenden Programmstellen mal Informationen wie "IndexKey()" und "&(IndexKey())" sowie den Suchbegriff. Positioniere direkt auf "Härtel" und lass Dir das dort auch anzeigen. Das ist kein Fehler der DBE, sondern mit Sicherheit Deiner.

Und Softseek nur verwenden, wenn Du dieses spezielle Verhalten auch wirklich brauchst. Das Beispiel mit dem Datum ist so falsch nicht - will man beispielsweise wissen, ob irgendein Mitarbeiter gemäß Tabelle im aktuellen Monat einen Urlaubsbeginn hat, sucht man schlicht mit aktivem Softseek nach dem ersten des Monats. Anschließend muss man natürlich prüfen, ob das möglicherweise falsche Ergebnis auch im fraglichen Monat liegt. Bei konkreter Suche ist Softseek gefährlich.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6679
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Manfred » Do, 14. Apr 2016 11:37

der Softseek war auch nur um den/einen Fehler mal einzugrenzen. Das sollte nicht auf Dauer so bleiben. Es könnte an dem EOF() liegen, deshalb ja auch mein Vorschlag mal Found() und im Debugger zu schauen wo er denn landet bei EOF(). Ich habe im Debugger schon des öfteren erlebt, dass ein ! Found() z.B. zurückkam, obwohl der Satz gefunden wurde.
Wenn es aber mit Softseek gefunden wird, scheint das EOF() falsch zu sein.
Wobei ich aber auch wieder darauf hinweisen will, alles ohne Aliasangabe. Wer weiß, was Klaus da so abfragt..... ;-)
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15969
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon brandelh » Do, 14. Apr 2016 13:13

Meine Test ergeben auch ein Problem mit den Suchbegriffen (DBF mit CDX)

Hä findet Härtel, aber Ha findet kein Haertel den ich auch eingetragen hab ...
Code: Alles auswählen
PROCEDURE dbeSys()

  SET DATE TO GERMAN
  SET EPOCH TO year(date())-80

  SET COLLATION TO GERMAN      // SYSTEM ???
  SET CHARSET   TO OEM / ANSI  // beides probiert

  IF ! DbeLoad( "DBFDBE", .t.)
     Alert( "DBFDBE wurde nicht geladen" , {"OK"} )
  ENDIF

  IF ! DbeLoad( "NTXDBE", .t.)
     Alert( "NTXDBE wurde nicht geladen" , {"OK"} )
  ENDIF

  IF ! DbeBuild( "DBFNTX","DBFDBE","NTXDBE"  )
     Alert( "DBFNTX wurde nicht erstellt" , {"OK"} )
  ENDIF

  IF ! DbeLoad( "CDXDBE", .t.)
     Alert( "CDXDBE wurde nicht geladen" , {"OK"} )
  ENDIF

  IF ! DbeBuild( "DBFCDX","DBFDBE","CDXDBE"  )
     Alert( "DBFCDX wurde nicht erstellt" , {"OK"} )
  ENDIF

*  DbeInfo( COMPONENT_DATA,  FOXDBE_MEMOBLOCKSIZE , 80 )
  DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE         , LOCKING_EXTENDED )

RETURN


Ich meine mich zu erinnern, dass es für uns 2 Sortiervorschriften gibt, DIN und DIN2 in Clipper, für die Behandlung von Umlauten.
Aus meiner Sicht ist das aber alles daneben, und unnötig, wenn man die Umlaute im Index (und in der Suche) mit meiner Funktion umwandelt.

Ein Anwender kann einen Müller eben auch als Mueller erfassen (müssen) ... teilweise weil die Leute tatsächlich so heißen oder weil er es will.
Eine Suche nach Müller muss also auch Mueller finden und in der Liste sauber einsortieren.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Tom » Do, 14. Apr 2016 13:33

Hallo, Hubert.

Aus meiner Sicht ist das aber alles daneben, und unnötig, wenn man die Umlaute im Index (und in der Suche) mit meiner Funktion umwandelt.


Tatsächlich mache ich das auch so, aber nicht, um Indexprobleme zu beheben, sondern um die Suche zu erleichtern. Manchmal schreibt man Namen nicht mit Umlauten, obwohl sie mit Umlauten gesprochen werden.

Allerdings ist die realistische Ersetzungsliste noch deutlich länger. Unsere Anwender haben Patienten oder Kunden aus aller Herren Länder, also gibt es beispielsweise noch französische, polnische, dänische/skandinavische und (ohnehin viele) türkische Sonderzeichen. Nicht zu vergessen das Es-Zett. Und ob sich Lefevre so schreibt oder Léfevre oder Lèfevre oder Lêfevre - das weiß nur die Person selbst genau.

Ich hab's übrigens auch getestet. FOXCDX mit ANSI (auch mit ANSI erzeugt!), COLLATION GERMAN. Ich finde Härtel.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6679
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon brandelh » Do, 14. Apr 2016 14:54

Tom hat geschrieben:Hallo, Hubert.
Tatsächlich mache ich das auch so, aber nicht, um Indexprobleme zu beheben, sondern um die Suche zu erleichtern.


klar das ist auch mein Hauptzweck ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Werner_Bayern » Do, 14. Apr 2016 23:21

brandelh hat geschrieben:Ich indiziere seit Clippertagen mit KeinUmlaut(Name) ...

Servus Hubert,

damit hat Du im Index aber evtl. nicht mehr den kompletten Namen. Hattest Du damit noch keine Probleme? Oder sind Deine Namens-Felder so extrem groß?
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Tom » Fr, 15. Apr 2016 8:21

Im Index benötigt man den kompletten Namen meistens auch nicht - er steht ja im Tabellenfeld. Und notfalls generiert man einfach einen weiteren Index ohne Konvertierung.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6679
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon brandelh » Sa, 16. Apr 2016 17:58

Meine Namensfelder haben normal 40 Zeichen und die sind alle im Index
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Werner_Bayern » So, 17. Apr 2016 22:09

brandelh hat geschrieben:Meine Namensfelder haben normal 40 Zeichen und die sind alle im Index

Eben nicht, wenn Du Umlaute ersetzen lässt, der Name aber schon 40 Zeichen hat. Dann steht er nicht mehr komplett im Index.
Ist jetzt aber auch nicht so tragisch - denke ich. Muss man halt bei allen Suchoperationen entsprechend berücksichtigen.
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon brandelh » Mo, 18. Apr 2016 7:42

OK wenn 40 Stellen ausgefüllt sind und 2 Ä dabei sind wird im Index Ä zu Ae und bei 40 gekürzt.
Natürlich MÜSSEN alle Suchbegriffe auch mit der Funktion bei DBSEEK() behandelt werden, somit merkt der Anwender davon nix.
Auch bei normalem Suchen (do while cSuch = cFeld ...) nutze ich normal die Funktion.

Ich kann mir nicht vorstellen, dass es einen Namen gibt, der tatsächlich die 40 Stellen braucht ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: nach Umstellung auf CDX Problem beim SUCHEN!

Beitragvon Koverhage » Mo, 18. Apr 2016 8:01

Vor allem das jemand Lust hat, einen 40-stelligen Suchbegriff einzugeben.
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1884
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen

Nächste

Zurück zu Newbie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste