![]() |
Suchen in SQL-DB
Hi,
ich bin dabei eine Suchfunktion einzubauen, die folgendermaßen funktionieren soll : Benutzer gibt einen Teil eines Wortes ein, wo er weiß, daß das stimmt. Programm soll alle Datensätze rausfischen, in denen der Wortteil vorkommt. Groß- und Kleinschreibung soll egal sein. Gut wäre es, wenn das Suchkriterium nicht nur vom ersten Buchstaben an sucht. Gibt es in SQL einen IN Operator oder so ? Oder wie soll ich da überhaupt anfangen ? Vielleicht mit LIKE ? Tja, vielleicht hat jemand nen Tip. Gruß Hansa |
:hi:
Das ist relativ einfach, die genaue Implementierung hängt vom jeweiligen SQL-Dialekt ab:
Delphi-Quellcode:
Einen IN-Operator gibt es auch. Du kannst ihm entweder eine Werteliste übergeben, welche durch Kommas getrennt ist oder - das eröffnet viele Möglichkeiten - eine weitere Abfrage, deren Datenmenge als Argument verwendet wird.
select * from MeineTabelle where upper(MeinSuchfeld) like upper('%MeinSuchbegriff%')
Delphi-Quellcode:
Je nach SQL-Dialekt kann die Funktion für Großschreibung auch ucase, uppercase, str_upper oder so ähnlich lauten. Manchmal gibt es auch eine zusätzliche Funktion mit a_ oder ansi_ als Präfix, dann verarbeitet diese Funktion Umlaute, die ohne dieses Präfix aber nicht.
... where upper(MeinSuchfeld) in upper('Wert1', 'Wert2', 'Wert3')
// oder ... where upper(MeinSuchfeld) in ( select upper(MeinKriterium) as MeinKriterium from MeineAndereTabelle where ...)) :coder: |
Hi Alfons,
Uff, jetzt bin ich bald vom Sofa gefallen. Hatte heute mittag eine Wave-Datei als eMail - Benachrichtigung installiert und vergessen den Verstärker auszuschalten. :mrgreen: Das da sieht aber gut aus. Dürfte damit klarkommen. Im Moment mache ich das, wie es aussieht, genauso. Ich wandele erst einmal alles in Großbuchstaben um und dann prüfe ich mit
Code:
ob der Teilstring enthalten ist. Das müßte ich mit dem %Suchname% wahrscheinlich 1:1 umsetzen können. Gott sei Dank. Die Leute sind meist keine Computerfreaks. Haben die sich erst einmal an eine Funktion gewöhnt und auf einmal ist die nicht mehr da, na dann guten Abend. :chat:
IF (pos (SuchStr,Name) <> 0) THEN
ZeigeFelder; Gruß Hansa |
Hallo Hansa,
Zitat:
So "transportierst" Du ja erst alle Dateien vom SQL-Server in Dein Delphiprogramm und wertest dort dann das Ergebnis aus. Da kannst Du Dir das SQL gleich sparen und mit einer Textdatei arbeiten. :? Dann lieber SELECT ... WHERE ... LIKE '%...%'; Bis dann Christian |
Hi,
was gibts denn hier zu meckern ? Zitat:
Code:
Wie Du siehst habe ich mich ziemlich an das Beispiel von Alfons gehalten. Von einem zeitkritischen Verhalten habe ich noch nichts bemerkt, aber ich suche auch nur in 56000 Datensätzen.
LiefDs.SelectSQL.Text := 'SELECT * FROM LIEF8 WHERE UPPER (NAME) LIKE UPPER (''%' + Form3.Edit1.Text + '%'') ORDER BY NR';
Gruß Hansa P.S.: Wenn Alfons das hier sieht, soll er den Rest vom Oktoberfest-Senf bitte zu meinem Quelltext noch dazugeben. :mrgreen: |
Hi Hansa,
Zitat:
Ich habe das
Code:
angemeckert.
IF (pos (SuchStr,Name) <> 0) THEN ZeigeFelder;
Bis dann Christian |
Hi,
sehe, Du bist noch neu hier, na ja, dann bin ich ja froh, daß Du wenigstens meckerst, mir macht das nichts aus. :lol: Besser als einen Fehler zuviel machen. Also ist das ganze so richtig, oder ? C/S - DB Programmierung ist halt schon anders, da frage ich lieber einmal zuviel, als zuwenig. Ich bin halt dabei eine größere Sache auf SQL umzustellen. Gruß Hansa |
OT :!:
Zitat:
ich denke die Qualität von Beiträgen, hat nix damit zutun, wieoft man schon gepostet/wie lange man hier ist... Ich bin schon länger kann, aber auch richtige Scheiße (sorry) posten. Ggf. habe ich dich mit deiner Aussage falsch verstanden, dann bitte korrigieren... Chris |
Hi Chris,
Zitat:
Gruß Hansa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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