MySQL Datensätze suchen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

MySQL Datensätze suchen

Beitragvon Aphadias » 2. Nov 2015, 15:00 MySQL Datensätze suchen

Hallo da bin ich wieder :oops:

Aktuell baue ich gerade eine Suche(bzw Filter) ein für mein DBGrid.

Dafür benutze ich den Quelltext aktuell

Code: Alles auswählen
SQLQuery1.Close;
     SQLQuery1.SQL.Clear;
     SQLQuery1.SQL.Text:= 'select * from patientenerfassung where Name = :Name';
     SQLQuery1.Params.ParamByName('Name').AsString := esuche.Text;
 
     SQLTransaction1.Active:= True;
     SQLQuery1.Open;


Mein Ziel. 1. Ich möchte gerne ein bestimmtes Wort in der ganzen Tabelle suchen und nicht nur in der angegebenen Spalte. (Bei googel habe ich gelesen das sowas nicht geht. Geht sowas wirklich nicht?)
2. Falls es nicht geht in der ganzen Tabelle zu suchen will ich es wenigstens auf die wichtigsten Spalten begrenzen.

Meine Probleme: 1. Wenn ich ein Wort suche (z.b. Alf) dann zeigt er genau nur das an. Ich möchte aber gerne das er dann mit dazu auch Alfer Alfred Alfrodo Alfredo usw anzeigt... also alles was bis dahin so ähnlich ist. Ich habe es schon mal mit % probiert aber da muss ich ja immer genau definieren nach was die Wildcard gehen soll :(
2. Wie mache ich dass das er dann mehrere Spalten durchsucht?

Würde mich über eure Hilfe freuen :D
Aphadias
 
Beiträge: 124
Registriert: 28. Okt 2015, 18:28

Beitragvon Socke » 2. Nov 2015, 15:23 Re: MySQL Datensätze suchen

Aphadias hat geschrieben:Mein Ziel. 1. Ich möchte gerne ein bestimmtes Wort in der ganzen Tabelle suchen und nicht nur in der angegebenen Spalte. (Bei googel habe ich gelesen das sowas nicht geht. Geht sowas wirklich nicht?)

Geht wirklich nicht von Haus aus. Du kannst aber zuerst ein SELECT * FROM patientenerfassung aufrufen und dann über die Feldnamen die Abfrage neu zusammenbauen und die notwendigen Eingabefelder anlegen.
Aphadias hat geschrieben:Meine Probleme: 1. Wenn ich ein Wort suche (z.b. Alf) dann zeigt er genau nur das an. Ich möchte aber gerne das er dann mit dazu auch Alfer Alfred Alfrodo Alfredo usw anzeigt... also alles was bis dahin so ähnlich ist. Ich habe es schon mal mit % probiert aber da muss ich ja immer genau definieren nach was die Wildcard gehen soll :(
2. Wie mache ich dass das er dann mehrere Spalten durchsucht?

Du könntest auch alle Datenbankfelder über die SQL-Funktion concat aneinanderhängen und dann die daraus entstehende Zeichenkette durchsuchen. Wirklich performant ist das aber nicht.
Code: Alles auswählen
SQLQuery1.SQL.Text:= 'select * from patientenerfassung where concat(Name,Spalte2) LIKE :Name';
SQLQuery1.Params.ParamByName('Name').AsString := '%'+esuche.Text+'%';
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2593
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon TBug » 2. Nov 2015, 17:25 Re: MySQL Datensätze suchen

Aphadias hat geschrieben:Mein Ziel. 1. Ich möchte gerne ein bestimmtes Wort in der ganzen Tabelle suchen und nicht nur in der angegebenen Spalte. (Bei googel habe ich gelesen das sowas nicht geht. Geht sowas wirklich nicht?)
2. Falls es nicht geht in der ganzen Tabelle zu suchen will ich es wenigstens auf die wichtigsten Spalten begrenzen.


Schau Dir hierzu einmal die MySql-Doku an:
https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

Weitere Hilfsmittel sind die MySql-Funktionen MATCH() und AGAINST().


.
TBug
 
Beiträge: 117
Registriert: 2. Sep 2015, 10:09
OS, Lazarus, FPC: Lazaurus 1.8.4 | 
CPU-Target: Windows 32/64bit
Nach oben

Beitragvon Aphadias » 2. Nov 2015, 17:30 Re: MySQL Datensätze suchen

habe es mal probiert... da kommt ein fehler bei mir @socke

MySQLConnect1: Error executing query: Illegal mix of collations (UTF8_bin,NONE) and (latin1_schwedish_ci,COERCIBLE) for operation 'like'
Aphadias
 
Beiträge: 124
Registriert: 28. Okt 2015, 18:28

Beitragvon Socke » 2. Nov 2015, 17:47 Re: MySQL Datensätze suchen

Aphadias hat geschrieben:habe es mal probiert... da kommt ein fehler bei mir @socke

MySQLConnect1: Error executing query: Illegal mix of collations (UTF8_bin,NONE) and (latin1_schwedish_ci,COERCIBLE) for operation 'like'

Toll. Dann nehme ich die Fehlermeldung für dich auseinander:
  • Illegal - geht nicht (daher der Fehler)
  • mix - mehrere Dinge wurden vermischt
  • of collations - Es geht collations (deutsch: Alphabetische Sortierung, d.h. wie die Datenbank Zeichenketten interpretiert, sortiert und durchsucht)
  • (UTF8_bin,NONE) and (latin1_schwedish_ci,COERCIBLE) - die beiden Collations
  • for operation 'like' - Fehler ist bei der Operator LIKE
Weiteres Wissen:
LIKE ist ein binärer Operator, das heißt: LIKE hat zwei Operanden, einen vor dem Operator und einen danach. Die Syntax ist also <Operand1> LIKE <Operand2>.

Kombination:
Ein Operand hat die Kollation (UTF8_bin,NONE) und der andere (latin1_schwedish_ci,COERCIBLE).

Lösung:
Beide Operanden sollten die gleiche Collation haben.

Vorgehen:
Analyse des SQL-Statements, der Tabellendefinition (mit welchen Collations wurde die Tabelle angelegt) sowei der Verbindungseinstellungen (welche Collation und welcher Zeichensatz wird von der Verbindung verwendet).

Alternative:
Schau dir den Vorschlag von TBug an; an die Volltextsuche hatte ich gar nicht gedacht. Viuelleicht kommst du damit schneller ans Ziel.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2593
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Aphadias » 2. Nov 2015, 17:57 Re: MySQL Datensätze suchen

Danke Socke mittler weile hatte ich den Fehler schon selbst gefunden. Wie auch immer hatte ich nicht gesehen das sich da nen Schwede eingenistet hatte. Deins Funktioniert und das andere schaue ich mir morgen an.
Aphadias
 
Beiträge: 124
Registriert: 28. Okt 2015, 18:28

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 Gäste

porpoises-institution
accuracy-worried