Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Suchen in SQL-DB (https://www.delphipraxis.net/1980-suchen-sql-db.html)

Hansa 1. Jan 2003 20:31


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

Alfons_G 1. Jan 2003 22:57

:hi:
Das ist relativ einfach, die genaue Implementierung hängt vom jeweiligen SQL-Dialekt ab:
Delphi-Quellcode:
select * from MeineTabelle where upper(MeinSuchfeld) like upper('%MeinSuchbegriff%')
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.
Delphi-Quellcode:
... where upper(MeinSuchfeld) in upper('Wert1', 'Wert2', 'Wert3')
// oder
... where upper(MeinSuchfeld) in (
select upper(MeinKriterium) as MeinKriterium from MeineAndereTabelle where ...))
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.

:coder:

Hansa 1. Jan 2003 23:18

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:
IF (pos (SuchStr,Name) <> 0) THEN
  ZeigeFelder;
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:

Gruß
Hansa

magic.christel 6. Jan 2003 11:50

Hallo Hansa,

Zitat:

Zitat von Hansa
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:
IF (pos (SuchStr,Name) <> 0) THEN
  ZeigeFelder;

das ist ja fürchterlich! :oops:

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

Hansa 6. Jan 2003 12:03

Hi,

was gibts denn hier zu meckern ?

Zitat:

Zitat von magic.christel
das ist ja fürchterlich!
...
Dann lieber SELECT ... WHERE ... LIKE '%...%';

Das ist das Original, welches auch funktioniert : :shock:

Code:
LiefDs.SelectSQL.Text := 'SELECT * FROM LIEF8 WHERE UPPER (NAME) LIKE UPPER (''%' + Form3.Edit1.Text + '%'') ORDER BY NR';
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.

Gruß
Hansa

P.S.: Wenn Alfons das hier sieht, soll er den Rest vom Oktoberfest-Senf bitte zu meinem Quelltext noch dazugeben. :mrgreen:

magic.christel 6. Jan 2003 12:08

Hi Hansa,

Zitat:

Zitat von Hansa
Hi,

was gibts denn hier zu meckern ?

Zitieren und Lesen will gelernt sein!

Ich habe das

Code:
IF (pos (SuchStr,Name) <> 0) THEN ZeigeFelder;
angemeckert.

Bis dann

Christian

Hansa 6. Jan 2003 12:21

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

CalganX 6. Jan 2003 13:15

OT :!:

Zitat:

Zitat von Hansa
sehe, Du bist noch neu hier, na ja, dann bin ich ja froh, daß Du wenigstens meckerst, mir macht das nichts aus.

Hi Hansa,
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

Hansa 6. Jan 2003 13:35

Hi Chris,

Zitat:

Zitat von Chakotay1308
Ich bin schon länger kann, aber auch richtige sch***e (sorry) posten.

Dem ist nicht mehr viel hinzuzufügen. :mrgreen: Wenn man schon länger postet, kennt man halt eher seine "Pappenheimer".

Gruß
Hansa


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz