Funktionen im Indexschlüssel

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

Funktionen im Indexschlüssel

Beitrag von Manfred »

Hi,

welche Erfahrung habt ihr mit Funktionen im Indexschlüssel gemacht?

Folgendes Szenario:

Das übliche Problem Artikel (Der,die,das,the, ein, eine) usw. wird immer wieder an den Anfang gesetzt und bringt dann Probleme beim Auffinden der einzelnen Datensätze. In der Vergangenheit kam dann eben eine Funktion in den Indexschlüssel, die bei Artikeln den Index nicht auf das 1.Zeichen, sondern eben ab dem 4. oder 5. Zeichen aufgebaut hat. Natürlich wurden die fehlenden Zeichen hinten wieder als Leerzeichen angepeppt, damit der Schlüssel immer gleichlang ist.

Das habe ich unter NTX gemacht, jetzt arbeite ich mit CDX. Da sollte das wohl auch ohne Probleme möglich sein.

Oder hat irgendwer vielleicht eine bessere Idee, wie man das Artikelproblem elegant in den Griff bekommt.
Sieht ja auch beim Browsen besser aus, wenn die Artikel nicht berücksichtigt werden.
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: Funktionen im Indexschlüssel

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: Das übliche Problem Artikel (Der,die,das,the, ein, eine) usw. wird immer wieder an den Anfang gesetzt und bringt dann Probleme beim Auffinden der einzelnen Datensätze. In der Vergangenheit kam dann eben eine Funktion in den Indexschlüssel, die bei Artikeln den Index nicht auf das 1.Zeichen, sondern eben ab dem 4. oder 5. Zeichen aufgebaut hat.
wie wäre es mit OrdWildSeek() ... da müsstest du solche Artikel finden.

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

Beitrag von Manfred »

Das mit Ordwildseek() ist ein Super Sache, aber nicht so der richtige Hit für normales Suchen, zumal das mittendrin auch herauspflückt.

Es ging/geht mir darum, das bei einem browsen alles schön sauber ohne Artikel nacheinander auftritt. Ich möchte in diesem Fall wirklich nur von "Anfang" an sortiert haben und nicht mittendrin, das verwischt das Endbild.

Zumal Ordwildseek() bei großen Datenbanken doch eine Zeit benötigt, bis angezeigt wird. Und soweit ich es festgestellt habe, muß man das Ergebnis zwischenspeichern, vor der Ausgabe.
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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

wenn eine funktion() die Länge des Feldes nicht ändert (bzw. immer gleiche Länge zurückgibt) ist das OK, auch unter CDX habe ich da keine Probleme. Allerdings ist ein Zugriff auf den Index mit 'normalen' Programmen dann nicht mehr möglich ...

Bei deinem Problem, vermute ich dass es sich um Büchernamen oder ähnliches handelt und kommt gleich der nächste Einwand, woher weißt du ob das 2. Wort wirklich passt ?

Ich habe mit der 1.90 eine ähnliches Problem mit OrdWildSeek() gelöst:

Code: Alles auswählen

index on upper(Artikelbezeichnung) to artikel // upper() kann bei CDX entfallen
...
cSuch := upper("Fox")

if ordwildseek("*"+cSuch+"*")  // der erste
   do while found()
        ... mach was
        ordwildseek()                  // nächster suchen
   enddo
endif
Gruß
Hubert
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

Beitrag von Manfred »

Hi Hubert,

Dein Beispiel hattest Du schon mal erwähnt und ich hatte es auch ausprobiert. Bin total begeistert von der Funktion, aber wie schon oben erwähnt, es paßt nicht ganz in das Konzept.

Bei mir geht es um Musik und Filmtitel, bzw. Interpreten. In der Vergangenheit hat es immer genau gepaßt, außer.....

Der mit dem Wolf tanzt usw. Aber ein paar Verluste hat man immer. ;-)
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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

ah dir geht es nicht um suchen, sondern um die Sortierung des Ganzen, nur zu, es spricht nichts gegen dein Vorgehen solange du die selbst genannten Regeln einhälts.
Gruß
Hubert
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

Beitrag von Manfred »

Hi Hubert,

ich war etwas unsicher, weil ich in der Vergangenheit unter Clipper teilweise extreme Probleme hatte mit den Indexdateien. (Hatten wir auch schon mal hier irgendwo drüber gesprochen). Es ist nie wirklich herausgekommen, woran das lag. Also hatte ich anfänglich alle Funktionen usw. aus den Indexschlüsseln entfernt unter Xbase++ und alles roh erzeugt.

Ich dachte nur, es hätte vielleicht jemand einen tollen Trick in der Schublade, wie man das mit den Artikeln noch hinkriegen kann.

Nagut, dann wollen wir mal in die Hände spucken...
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Manfred,
ich habe das bei Strassennamen mit Hausnummern (sortierung ohne Hausnummern-Berücksichtigung) mit der token-Funktion der Xbtools gemacht.
Beispiel:

OrdCreate(contpath+"aufwvb1","wvbort","upper(ort)+padright(upper(token(strasse,'0123456789/',1)),30)+dtos(termin)")

trennt mir alles ab der Hausnummer hinten ab. Schau mal bei den String-Funktionen der Xbtools nach, da gibt es schöne Sachen.
Viele Grüße
Wolfgang
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

Beitrag von Manfred »

Hi Wolfgang,

danke für den Tipp, aber eine Frage: Wozu ist das gut mit der Hausnummer? Ich dachte die Würze liegt gerade in der Hausnummer.
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Manfred,
ich benötige das, wenn ein Kunde anruft und alle Aufträge für eine Strasse, die schon vorhanden sind, angezeigt werden sollen. Ohne diesen Index würde er

Teststr. 1
Teststr. 11
Teststr. 2

als unterschiedliche Straßen interperetieren, obwohl es dieselbe Straße ist.
Viele Grüße
Wolfgang
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Beitrag von Markus Walter »

Hallo Manfred,

ich arbeite viel mit Funktionen in Ausdrücken und habe damit eigentlich keine Probleme (CDX, früher in Clipper SixNSX).

In der Regel enthält der Index dann eine Funktion, die den Suchstring entsprechend aufbereitet. Je nach Anwendungsfall:
- mit einer (eigenen) Token-Funktion Teile herausschneidet
- Umlaute entfernt/ersetzt
- Sonderzeichen entfernt
- ...

Am Ende der Funktion wird der entstandene Schlüssel auf feste Länge gebracht und fertig. Arbeitet hervorragend. Sinnvollerweise hat man für jeden Datensatz aber noch einen eindeutigen Schlüssel für die direkte Verknüpfung.
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
henxl
UDF-Programmierer
UDF-Programmierer
Beiträge: 91
Registriert: Fr, 10. Feb 2006 19:46
Wohnort: Mannheim

Beitrag von henxl »

Hallo Wolfgang,

etwas verspätet, aber trotzdem:

Wie soll das Sortieren ohne Hausnummer in Mannheim funktionieren, wo es "Quadrate" gibt wie zum Beispiel "L 3, 10", also Straße L 3 Hausnummer 10 ?
Das einzige, was ich weiß ist, dass ich nichts weiß, Sokrates
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Aus genau diesem Grund halten wir Hausnummern inzwischen generell getrennt.
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Tja ich denke, da hat Tom recht, Hausnummer von Straße getrennt zu halten ist wohl die beste (einzige) Möglichkeit.
Viele Grüße
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Auja - und dann das ganze honchnormalisieren!!
Schließlich kann es ja in jeder Strasse eine Hausnummer 1 geben :D
Also am Besten eine eigene Datenbank für die Strassen und eine eigene für die Hausnummern, usw. usf. :lol: :wink:
Hin zur 6. NF (Normalform) :wink:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Moin Martin,

genau das ist es, was ich an Normalisierungsfanatikern nicht abkann - normalisieren bis zur Unverständlichkeit.

Normalisierung ist eine gute Sache. Keine Frage. Ich bemühe mich aus gutem Grund auch, dem in gewissen Rahmen zu folgen, weil es eben in der Tat vieles vereinfacht. Aber wie so vieles im Leben kann man es auch übertreiben.

Deshalb habe ich üblicherweise für die Hausnummer nicht eine eigene Tabelle sondern "nur" ein eigenes Feld. Wenn überhaupt, denn meist ist die Husnummer nicht auswertungswürdig bei unseren Programmen. Und es scheitert dann auch oft an den Schreibweisen. Da wird geschrieben "Theodor-Fontane-Straße", oder Theodor Fontane Straße" oder das ganze auch noch mit "Str." statt "Straße". Ganz zu scheigen von klaren Rechtschreibfehlern. Ich habe es einfach irgendwann aufgegeben :evil:

Jan
Antworten