AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suchen in SQL-DB

Ein Thema von Hansa · begonnen am 1. Jan 2003 · letzter Beitrag vom 6. Jan 2003
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Suchen in SQL-DB

  Alt 1. Jan 2003, 21:31
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
  Mit Zitat antworten Zitat
Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#2
  Alt 1. Jan 2003, 23:57

Das ist relativ einfach, die genaue Implementierung hängt vom jeweiligen SQL-Dialekt ab: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.

Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 2. Jan 2003, 00: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.

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.

Gruß
Hansa
  Mit Zitat antworten Zitat
magic.christel

Registriert seit: 2. Jan 2003
18 Beiträge
 
Delphi 5 Professional
 
#4
  Alt 6. Jan 2003, 12:50
Hallo Hansa,

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!

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5
  Alt 6. Jan 2003, 13:03
Hi,

was gibts denn hier zu meckern ?

Zitat von magic.christel:
das ist ja fürchterlich!
...
Dann lieber SELECT ... WHERE ... LIKE '%...%';
Das ist das Original, welches auch funktioniert :

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.
  Mit Zitat antworten Zitat
magic.christel

Registriert seit: 2. Jan 2003
18 Beiträge
 
Delphi 5 Professional
 
#6
  Alt 6. Jan 2003, 13:08
Hi Hansa,

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 6. Jan 2003, 13:21
Hi,

sehe, Du bist noch neu hier, na ja, dann bin ich ja froh, daß Du wenigstens meckerst, mir macht das nichts aus. 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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8
  Alt 6. Jan 2003, 14:15
OT

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9
  Alt 6. Jan 2003, 14:35
Hi Chris,

Zitat von Chakotay1308:
Ich bin schon länger kann, aber auch richtige sch***e (sorry) posten.
Dem ist nicht mehr viel hinzuzufügen. Wenn man schon länger postet, kennt man halt eher seine "Pappenheimer".

Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 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