Entwickler-Ecke

Datenbanken - SQL-Suche mit Platzhalter


Hänsel - Fr 02.02.18 16:02
Titel: SQL-Suche mit Platzhalter
Hallo kann jemand helfen?

Ich arbeite mit einer MSSQL-Datenbank und habe folgende Frage: Wenn ich in Edit1-Feld einen Namen eingebe,wird auch nach diesen gesucht bzw. gefiltert. Ich möchte aber zum Beispiel nicht nur nach "Müller" suchen sondern nach alle Namen die mit M beginnen.
Was kann ich hier machen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
   Begin
   if Edit1.Text='' then
   Begin
     exit;
   End
   else
   Begin
   bez:=Edit1.Text;
   DataModule2.ADOQuery_Mieter.Close;
   DataModule2.ADOQuery_Mieter.SQL.Text:='Select * From MDV1 Where Name ='+bez+'';
   DataModule2.ADOQuery_Mieter.Open;
   z:=DataModule2.ADOQuery_Mieter.RecordCount;
   Label6.Caption:=inttostr(Z);


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


ub60 - Fr 02.02.18 16:55


SQL-Anweisung
1:
... WHERE Name LIKE "M%" ...                    

sollte gehen.

ub60


Hänsel - Fr 02.02.18 17:26

Danke für den Hinweis. Ich hatte statt LIKE das = verwendet. Jetzt funktioniert es . Danke nochmals

Hänsel


haentschman - Fr 02.02.18 18:09

Moin... :P

Nur so als Hinweis...
Mit LIKE im SQL kann der Index der Spalte nicht verwendet werden. Das bedeutet, daß über die gesamte Tabelle gesucht wird! Das solltest du ggf. einplanen... :zwinker:


Sinspin - So 04.02.18 19:33

Ich Würde lieber Contains verwenden. Dazu muss allerdings für die Tabelle ein FTS Index erstellt worden sein.
Es wird also via Index gesucht (schnell).
Und "*" kann zum Suchen nach Wortteilen verwendet werden.


SQL-Anweisung
1:
Select * From MDV1 Where Contains(Name, 'Sucht*');