![]() |
Datenbank: ADS Local • Version: 7.1 • Zugriff über: TDataSet
ADS locate - Zeichen ignorieren?
Hallo!
Ich durchsuche mit locate eine bestimmte Spalte der Tabelle. Ist es dabei möglich bestimmte Zeichen im String zu ignorieren? Bsp.: AdsTable1.Locate('Telefon',02309561054,[]). In der Datenbank ist die Nummer aber so gespeichert: 02309/561054 . Also soll locate das / ignorieren. Viele Grüße... |
Re: ADS locate - Zeichen ignorieren?
Das geht dann wohl nur mit einer while-Schleife. Oder Du verwendest SQL für die Abfrage und springst dann über den PK im DataSet auf den richtigen Satz. Alternativ könntest Du auch Daten und Maskenzeichen separat speichern (Ähnlich wie die Telefonnummerneinträge bei den MS-DFÜ-Verbindungen)
|
Re: ADS locate - Zeichen ignorieren?
Hi!
Danke für deine Antwort erstmal. Zitat:
Die anderen beiden Vorschläge kommen nicht in Frage, da man für SQL die TQuery braucht (hab nur eine Tabelle) und bei der Lösung wie bei der DFÜ-Verbindung sind zwei verschiedene Edit-Felder nötig. Ich habe jetzt überlegt einfach eine neue Spalte anzulegen wo ich die Nummern ohne Sonderzeichen hineinkopiere. Viele Grüße... |
Re: ADS locate - Zeichen ignorieren?
Hallo!
Ich muss das Thema nochmal hochholen. So wie ich es vorhatte klappt es nicht (zusätzliches Feld in DB). Gibt es da noch eine Möglichkeit (wie war das mit der Schleife gemeint?)? Viele Grüße... |
Re: ADS locate - Zeichen ignorieren?
Hallo Stefan.
Wenn die Rufnummern grundsätzlich in der Form Ortsnetzkennzahl/Teilnehmer gespeichert sind, dann könntest du dir mit einer Query erstmal die Vorwahl besorgen:
SQL-Code:
Der Wert des Feldes TELEFON vor dem Slash ist die Vorwahl. Wenn sie nicht mit den ersten Stellen deiner gesuchten Nummer übereinstimmt, dann wirst du die Nummer nie finden. Andernfalls hast du sie vielleicht schon gefunden. Wenn doch nicht, dann kennst du ja jetzt die Stelle, an der du den Slash in deinen Suchstring einfügen musst um mit Locate() oder einer weiteren Query zum Ziel zu kommen.
select TOP 1 * from TABLE1 where TELEFON < :NUMMER order by TELEFON
Grüße vom marabu |
Re: ADS locate - Zeichen ignorieren?
Hallo Marabu!
Zitat:
Viele Grüße... |
Re: ADS locate - Zeichen ignorieren?
Hallo Stefan,
du hast zwar geschrieben, dass du kein zusätzliches Feld an die Tabelle anhängen kannst, aber hast du schon erwogen eine zusätzliche Tabelle (1:1 lookup table) zu generieren? Die muss nur den PK der Originaltabelle als FK, sowie die normierte Telefonnummer enthalten. Grüße vom marabu |
Re: ADS locate - Zeichen ignorieren?
Hi Marabu!
Ne, daran habe ich noch nicht gedacht. Hab's auch noch nie gemacht. Die Frage ist, ob es sich lohnt bei nur einer Tabelle, die ich da habe?!? Werde ich mich mal dransetzen. Viele Grüße... |
Re: ADS locate - Zeichen ignorieren?
Zitat:
Delphi-Quellcode:
Damit findest Du aber natürlich nur den ersten Treffer. Überleg Dir doch nochmal, ob Du nicht doch vielleicht TAdsQuery einsetzen möchtest.
while not tabelle.eof do
begin if VergleichsFunktion(TabelleTelefonNummernFeld.AsString, EditSuche.Text) then break; tabelle.next; end; |
Re: ADS locate - Zeichen ignorieren?
Hi Union!
Das werde ich mal testen mit der Schleife. Danke für den Denkanstoss. Ich brauche auch lediglich den ersten Treffer. Viele Grüsse... |
Re: ADS locate - Zeichen ignorieren?
Hallo Grolle,
hänge doch einfach ein Feld an Deine Datenbank an, in der Du die Telefon-Nummer normiert speicherst. Dem Nutzer gibst Du keinen Zugriff auf das (hidden) Feld, aber nach jeder Änderung des (public) Feldes Telefonnummer trägst Du die Telefon-Nummer normiert ein (z.B.: [Land Blank] Vorwahl Blank Nummer). Dann können die Nutzer die Nummern so tippen, wie sie ihnen gefallen. Die Vorwahlen lassen sich über eine Vorwahl-DB prüfen. mfg eddy |
Re: ADS locate - Zeichen ignorieren?
Hi eddy!
das hatte ich ja auch schon probiert. Das Problem bei der Lösung ist, dass ich zwei neue Spalten bräuchte (Telefon- und Handynummer) und viele Funktionen ändern müsste (z. B. den Import von Daten, div. Anzeigeoptionen usw....) Viele Grüße... |
Re: ADS locate - Zeichen ignorieren?
Zitat:
|
Re: ADS locate - Zeichen ignorieren?
Hallo Stefan,
ein Zusatzfeld zur Aufnahme der Telefonnummer in Normalform hast du zweimal ausgeschlossen, deshalb mein Vorschlag mit der Lookup-Tabelle. Ich habe den Eindruck gewonnen, dass du durchaus am Datenmodell drehen darfst, aber vor der Operation am offenen Herzen zurückschreckst. Nun, es geht auch ohne Änderungen. Wenn die Ableitung der Normalform einer Telefonnummer grundsätzlich möglich ist, dann würde ich in einem Reorganisationslauf alle Telefonnummern einmalig normalisieren und die Anzeigeform bei Bedarf erzeugen (evtl. als computed field). Falls die von dir verwendete ADS Version Trigger unterstützt, so kannst du die Normalisierung der Telefonnummern an den Server delegieren. Die einmalige Reorganisation wäre dann mit einem einzigen SQL-Statement machbar. Grüße vom marabu |
Re: ADS locate - Zeichen ignorieren?
Hallo!
Auch auf die Gefahr hin vom Marabu gesteinigt zu werden habe ich es jetzt doch über zwei weitere Felder in der Datenbank gemacht. Die Änderungen am Programm waren doch nicht so tragisch, wie ich erst dachte. Vielen Dank für eure Hilfe :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz