Telefon Nummer suchen ...
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Telefon Nummer suchen ...
hi,
Jeder hat wohl in einer Datenbank irgendwo auch Telefon Nummern.
Wenn ich nun mehrere FELDer mit Telefon Nummer habe muss ich
die nach-einander durchsuchen ...
vielleicht liegt es ja auch an meinem Datenbank Design. Ich verwende
meistens Type "C", auch bei Telefon Nummern obwohl es ja Nummern
sind (in Deutschland) ...
jemand eine "geniale" Idee wie man das "besser" lösen könnte ?
gruss by OHR
Jimmy
Jeder hat wohl in einer Datenbank irgendwo auch Telefon Nummern.
Wenn ich nun mehrere FELDer mit Telefon Nummer habe muss ich
die nach-einander durchsuchen ...
vielleicht liegt es ja auch an meinem Datenbank Design. Ich verwende
meistens Type "C", auch bei Telefon Nummern obwohl es ja Nummern
sind (in Deutschland) ...
jemand eine "geniale" Idee wie man das "besser" lösen könnte ?
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Moin,
um "C" wird man wohl auch nicht herumkommen. Irgendwie sollte/möchte man ja auch die Vorwahl von der Hauptnummer trennen, außer man macht dafür auch noch getrennte Felder.
Wie suchst Du denn?
Satz 1 Feld1 Feld2
Satz 2 Feld1 Feld2
Oder erst alle Feld1 und dann alle Feld2 usw?
Hast Du überall einen Index drauf?
um "C" wird man wohl auch nicht herumkommen. Irgendwie sollte/möchte man ja auch die Vorwahl von der Hauptnummer trennen, außer man macht dafür auch noch getrennte Felder.
Wie suchst Du denn?
Satz 1 Feld1 Feld2
Satz 2 Feld1 Feld2
Oder erst alle Feld1 und dann alle Feld2 usw?
Hast Du überall einen Index drauf?
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:
Hi,
zumindest unsere Vorwahl fängt mit einer 0 an, also muss es genauso wie PLZ ein C Feld sein. Wie wäre es mit einem Index auf eine Funktion, die die Blanks, -, / () etc. entfernt und dann auf feste Länge bringt (das muss sein). Oder meintest du mehrer Telefonnummernfelder pro Datensatz ?
Eventuell geht da was mit den selbstgebauten Indexen von 1.90 ?
zumindest unsere Vorwahl fängt mit einer 0 an, also muss es genauso wie PLZ ein C Feld sein. Wie wäre es mit einem Index auf eine Funktion, die die Blanks, -, / () etc. entfernt und dann auf feste Länge bringt (das muss sein). Oder meintest du mehrer Telefonnummernfelder pro Datensatz ?
Eventuell geht da was mit den selbstgebauten Indexen von 1.90 ?
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
OrdWildSeek("*"+cTelNo+"*") durchsuche ich jetzt "alle FELD"er und
gebe die per Listbox aus.
Einziger "Nachteil" : bei "C" 10 pro Tel.No kann man "nur" 25 (x10)
FELDer in einen Index TAG aufnehmen.
gruss by OHR
Jimmy
yup ... bei einem VAL(TelNo.) "fehlt" dann die "0" der Vorwahl ...... um "C" wird man wohl auch nicht herumkommen
jede Tel.No. hat einen "normalen" Index, alo mit SEEK()Wie suchst Du denn?
yup darauf bin ich gestern Nacht auch gekommen ... zusammen mitWie wäre es mit einem Index auf eine Funktion, die die Blanks, -, / () etc. entfernt und dann auf feste Länge bringt (das muss sein)
OrdWildSeek("*"+cTelNo+"*") durchsuche ich jetzt "alle FELD"er und
gebe die per Listbox aus.
Einziger "Nachteil" : bei "C" 10 pro Tel.No kann man "nur" 25 (x10)
FELDer in einen Index TAG aufnehmen.
gruss by OHR
Jimmy
- 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:
Hi Jimmy,
Wieviele Telefonfelder hast du denn ?
Wenns nicht anders geht und so viele Felder je Datensatz vorhanden sind, würde ich die DBF aufteilen:
Angenommen du hast eine Kundendatei:
ID // eindeutige Kundennummer
... // sonstige Felder
Tel1
Tel2
Tel3
etc.
würde ich aufteilen auf eine Steuerdatei:
ID // eindeutige Kundennummer
... // sonstige Felder
und eine Telefonnummerndatei:
ID // eindeutige Verknüpfung zu Hauptdatei
Tel // hier nun einen normalen Index drauf falls linksbünding gesucht werden soll oder ordwildseek für teiltelefonnummern ...
In dieser Datei stehen dann von 0 bis XXXX Telefonnummern, die alle zu einem Steuersatz gehören.
-> Kein Ärger mit Telefonnummern Begrenzung (ich wollte aber 30 ...)
-> Telefonfeld kann auch 15 Zeichen enthalten
-> Jede Telefonnummer kennt seinen Kunden
-> Ein Count und man weiß wieviele Telefonnummern ein Kunde hat.
etc.[/code]
Wieviele Telefonfelder hast du denn ?
Wenns nicht anders geht und so viele Felder je Datensatz vorhanden sind, würde ich die DBF aufteilen:
Angenommen du hast eine Kundendatei:
ID // eindeutige Kundennummer
... // sonstige Felder
Tel1
Tel2
Tel3
etc.
würde ich aufteilen auf eine Steuerdatei:
ID // eindeutige Kundennummer
... // sonstige Felder
und eine Telefonnummerndatei:
ID // eindeutige Verknüpfung zu Hauptdatei
Tel // hier nun einen normalen Index drauf falls linksbünding gesucht werden soll oder ordwildseek für teiltelefonnummern ...
In dieser Datei stehen dann von 0 bis XXXX Telefonnummern, die alle zu einem Steuersatz gehören.
-> Kein Ärger mit Telefonnummern Begrenzung (ich wollte aber 30 ...)
-> Telefonfeld kann auch 15 Zeichen enthalten
-> Jede Telefonnummer kennt seinen Kunden
-> Ein Count und man weiß wieviele Telefonnummern ein Kunde hat.
etc.[/code]
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
machen müssen ...
Aber nun noch was anderes :
Ala "Windows" wird über STRG-F die "suche" aktiviert. Dann kann ich
in das (STATIC) SLE meinen Suchbegriff eintippen. Wie aber mache
ich ein "F3", also "weitersuchen" ?
mir ist nicht klar ob ORDWILDSEEK() ohne Parameter nun noch mit
dem "alten" cSuch arbeitet oder nicht und wie ich "prüfen" kann ob
STRG_F_SUCHEN vor F3 "aktiviert" wurde (evtl Suchbegriff geändert ?)
gruss by OHR
Jimmy
naja jetzt sind es 8 + 8 Vorwahl ...brandelh hat geschrieben: Wieviele Telefonfelder hast du denn ?
ja ... wenn man die 255 in Indexkey überschreitet wird man das wohlbrandelh hat geschrieben: Wenns nicht anders geht und so viele Felder je Datensatz vorhanden sind, würde ich die DBF aufteilen:
machen müssen ...
Aber nun noch was anderes :
Ala "Windows" wird über STRG-F die "suche" aktiviert. Dann kann ich
in das (STATIC) SLE meinen Suchbegriff eintippen. Wie aber mache
ich ein "F3", also "weitersuchen" ?
Code: Alles auswählen
STATIC cSuch := ""
FUNCTION STRG_F_SUCHEN()
...
// reinit cSuch
cSuch := SPACE(10)
@ x,y GET cSuch PICTURE "@K 9999999999"
READ
ORDWILDSEEK("*"+ALLTRIM(cSuch)+"*")
IF FOUND()
....
FUNCTION F3_WEITER
// wurde schon STRG_F_SUCHEN aktviert ?
IF STRG_F_SUCHEN_HAVE_PRESSED
IF .NOT. EMPTY(cSuch)
ORDWILDSEEK()
dem "alten" cSuch arbeitet oder nicht und wie ich "prüfen" kann ob
STRG_F_SUCHEN vor F3 "aktiviert" wurde (evtl Suchbegriff geändert ?)
gruss by OHR
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
merke Dir doch einfach in einer Variablen, ob die Taste gedrückt wurde.
Bei Programmstart initialisierst Du sie mit .F. und in Deiner Funktion STRG_F_SUCHEN() mit .T. (zumindest wenn ein Suchbegriff eingegeben und gesucht wurde).
Viele Grüße,
Martin
merke Dir doch einfach in einer Variablen, ob die Taste gedrückt wurde.
Bei Programmstart initialisierst Du sie mit .F. und in Deiner Funktion STRG_F_SUCHEN() mit .T. (zumindest wenn ein Suchbegriff eingegeben und gesucht wurde).
Viele Grüße,
Martin
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.
- 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:
Hi Jimmi,
ich habe jetzt kein Handbuch hier (und auch keinen Compiler) aber STRG+F gibt einen Tastencode und F3 einen anderen schau mal in der inkey.ch nach (bei VIO, sonst appevent.ch oder so ähnlich)
Meines Wissens arbeitet OrdWildSeek() immer ab der aktuellen DBF Position, also nicht wie das normale seek, sondern eher wie DBLOCATE m it REST=.t. ... kann es hier aber nicht prüfen.
ich habe jetzt kein Handbuch hier (und auch keinen Compiler) aber STRG+F gibt einen Tastencode und F3 einen anderen schau mal in der inkey.ch nach (bei VIO, sonst appevent.ch oder so ähnlich)
Meines Wissens arbeitet OrdWildSeek() immer ab der aktuellen DBF Position, also nicht wie das normale seek, sondern eher wie DBLOCATE m it REST=.t. ... kann es hier aber nicht prüfen.
Gruß
Hubert
Hubert
So verstehe ich die Doku auch, dass OrdWildSeek() ab der aktuellen Position mit dem vorherigen Suchbegriff weitersucht.brandelh hat geschrieben: Meines Wissens arbeitet OrdWildSeek() immer ab der aktuellen DBF Position, also nicht wie das normale seek, sondern eher wie DBLOCATE m it REST=.t. ... kann es hier aber nicht prüfen.
Aber ich würde den Suchbegriff auch in einer Variable ablegen, dann kannst du prüfen, ob er nicht leer ist. Also muss vorher bereits gesucht worden sein.
Die Tel-Nrn speichere ich jeweils ohne Blanks und andere Zeichen (aber in Char-Feld), zur Anzeige kann man sie immer noch wieder auftrennen, oder?
Frage:
Könnte man denn mehrere Felder hintereinander schnell durchsuchen, wenn alle zusammen nicht länger als 256 Z. sind?
Eventuell geht da was mit den selbstgebauten Indexen von 1.90 ?
Wo finde ich denn etwas darüber?
Ich denke, es ist eine gute Idee von dir, Hubert, eine Referenzdatei einzusetzen. Wenn nur der Aufwand der Nachführung nicht wäre...
- 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:
Hi,
die selbstgebauten Indexe erstellt man mit INDEX ... CUSTOM. Die Indexschlüssel muß man dann mit OrdKeyAdd() hinzufügen, wobei hierbei der Indexbegriff ausgewertet wird. Um mehrere Schlüssel pro Satz aufnehmen zu können, müsste die Indexroutine eine Funktion aufrufen, die sich das letzte Feld merkt und jeweils das nächste zurückliefert. Beim Abfragen später jedoch nur nach einem Schlüssel sucht. Nicht ganz einfach.
ICH würde über eine Normalisierung der Daten nachdenken und die vielen Telefonfelder je Satz in eine eigene Telefonfelddatei auslagern, wobei eine Kennung die Art der Telefonnummer speichern könnte:
Hauptdatei: KundNr, .... , TelPrivat, TelGesch, TelHandy etc.
->
Hauptdatei: KundNr, ....
Telefondat: KundNr, Art, TelNr
-> ART = 1 = privat, 2 = Gesch., 3=Handy ... oder wie auch immer.
-> Index auf KundNr+Art
-> Index auf TelNr
Eine schnelle Suche wäre jetzt möglich auf:
1. KundNR => alle Nummern eines Kunden
2. KundNR+Art => alle Nummern eines Kunden einer Art
3. TelNr => eine Telefonnummer oder mehrere mit gleicher Vorwahl ...
die selbstgebauten Indexe erstellt man mit INDEX ... CUSTOM. Die Indexschlüssel muß man dann mit OrdKeyAdd() hinzufügen, wobei hierbei der Indexbegriff ausgewertet wird. Um mehrere Schlüssel pro Satz aufnehmen zu können, müsste die Indexroutine eine Funktion aufrufen, die sich das letzte Feld merkt und jeweils das nächste zurückliefert. Beim Abfragen später jedoch nur nach einem Schlüssel sucht. Nicht ganz einfach.
ICH würde über eine Normalisierung der Daten nachdenken und die vielen Telefonfelder je Satz in eine eigene Telefonfelddatei auslagern, wobei eine Kennung die Art der Telefonnummer speichern könnte:
Hauptdatei: KundNr, .... , TelPrivat, TelGesch, TelHandy etc.
->
Hauptdatei: KundNr, ....
Telefondat: KundNr, Art, TelNr
-> ART = 1 = privat, 2 = Gesch., 3=Handy ... oder wie auch immer.
-> Index auf KundNr+Art
-> Index auf TelNr
Eine schnelle Suche wäre jetzt möglich auf:
1. KundNR => alle Nummern eines Kunden
2. KundNR+Art => alle Nummern eines Kunden einer Art
3. TelNr => eine Telefonnummer oder mehrere mit gleicher Vorwahl ...
Gruß
Hubert
Hubert