Problem mit RegExp/Suchanfrage
Problem mit RegExp/Suchanfrage
Hallo,
ich habe folgende Situation:
Ich greife auf eine SQL-Datenbank zu, um mir meine Daten für meine Anzeige in einer Table View zu besorgen. Dies funktioniert soweit alles. Nun möchte ich dieses Modell mithilfe von Suchanfragen filtern. Dazu habe ich mir ein QSortFilterProxyModel erstellt, welches das Filtern übernimmt. Ich möchte nun mehrere Begriffe eingeben können und diese sollen als UND-Anfrage behandelt werden. Also bei Eingabe von "Test Text " sollen nur Begriffe gefunden werden die Test und Text beinhalten. Ich habe das ganze im Moment mit folgenden Code probiert:
QRegExp regExp(lineEditor->text(), Qt::CaseInsensitive, QRegExp::RegExp);
m_FilterModel->setFilterRegExp(regExp);
Allerdings habe ich noch keine Möglichkeit gefunden, wie man einen Und-Ausdruck formulieren kann.(Ein Oder bekomme mit | hin)
Weiss jemand wie man eine solche Suche mit einer RegExp formuliert? Oder ist es sinnvoller die Anfrage als SQL-Statement zu formulieren? Über Hinweise wäre ich sehr froh!
Vielen Dank und viele Grüße bob446
ich habe folgende Situation:
Ich greife auf eine SQL-Datenbank zu, um mir meine Daten für meine Anzeige in einer Table View zu besorgen. Dies funktioniert soweit alles. Nun möchte ich dieses Modell mithilfe von Suchanfragen filtern. Dazu habe ich mir ein QSortFilterProxyModel erstellt, welches das Filtern übernimmt. Ich möchte nun mehrere Begriffe eingeben können und diese sollen als UND-Anfrage behandelt werden. Also bei Eingabe von "Test Text " sollen nur Begriffe gefunden werden die Test und Text beinhalten. Ich habe das ganze im Moment mit folgenden Code probiert:
QRegExp regExp(lineEditor->text(), Qt::CaseInsensitive, QRegExp::RegExp);
m_FilterModel->setFilterRegExp(regExp);
Allerdings habe ich noch keine Möglichkeit gefunden, wie man einen Und-Ausdruck formulieren kann.(Ein Oder bekomme mit | hin)
Weiss jemand wie man eine solche Suche mit einer RegExp formuliert? Oder ist es sinnvoller die Anfrage als SQL-Statement zu formulieren? Über Hinweise wäre ich sehr froh!
Vielen Dank und viele Grüße bob446
Hallo und danke schon einmal für die Antworten. Da es sich um einen im Programmablauf wachsenden Datenbestand handelt wird eine Suchanfrage auf Datenbankebene sinnvoller sein. Auch wenn die Frage blöd klingel mag, aber wie würde man eine solche Suchanfrage formulieren? Ich habe mehrere Spalten(4) und weiss aber nicht genau welche ich durchsuchen muss.Also die Eingabe des Benutzers könnte z.b. Teil1 Eigenschaft1 sein und ich möchte die Einträge finden die Teil1 und Eigenschaft1 erfüllen.
mfg
mfg
UND mit RegExp
Für 2 Begriffe geht:
Ab 3 Begriffen wird das ätzend, nimm dann vielleicht positive Lookaheads:
Code: Alles auswählen
QRegExp re("Text.*Test|Test.*Text");Code: Alles auswählen
QRegExp re(".(?=.*Test)(?=.*Text)(?=.*Hallo)");hallo,
ich möchte jetzt folgende Abfrage erstellen:
die Abfrage liefert in MySql und in Access auch das richtige Ergebnis.
Allerdings funktioniert die Abfrage nicht über Qt.
Ich setze meinen Filter wiefolgt:
setFilter
The filter is a SQL WHERE clause without the keyword WHERE (for example, name='Josephine').
Was mache ich falsch? Wie kann ich meine Abfrage richtig formulieren?
Ich hoffe mir kann jemand helfen...Vielen Dank und viele Grüße bob446
ich möchte jetzt folgende Abfrage erstellen:
Code: Alles auswählen
SELECT ID
FROM Tabelle1
WHERE (Tabelle1.text LIKE "*test*")Allerdings funktioniert die Abfrage nicht über Qt.
Ich setze meinen Filter wiefolgt:
setFilter
The filter is a SQL WHERE clause without the keyword WHERE (for example, name='Josephine').
Code: Alles auswählen
model->setFilter(Tabelle1.text LIKE "*test*");Ich hoffe mir kann jemand helfen...Vielen Dank und viele Grüße bob446
der Begriff LIKE funktioniert auf beiden DB , also MySQL und MS-Access.
Der * ist bei Access als Platzhalter und % bei MySql.
Mein Model in Qt kommt aus einer Access DB.
ich verstehe nur nicht, warum
funktioniert und dieser Aufruf nicht
Der * ist bei Access als Platzhalter und % bei MySql.
Mein Model in Qt kommt aus einer Access DB.
ich verstehe nur nicht, warum
Code: Alles auswählen
model->setFilter("Tabelle1.text = 'test'");Code: Alles auswählen
model->setFilter(Tabelle1.text LIKE "*test*");Ein QSqlTableModel
Code: Alles auswählen
model = new QSqlTableModel;
model->setFilter("Tabelle1.text = 'test'");
Dieser Aufruf
erzeugt einen Compiler-Fehler und keinen SQL-Fehler und sollte bereits im Editor als solcher Angezeigt werden.
Code: Alles auswählen
model->setFilter(Tabelle1.text LIKE "*test*");habe sowohl ' ' und " " ausprobiert ... der code erzeugt keinen compilerfehler...zumindest wird mir keiner angezeigt...muss am montag dann nochmal schauen...kann man meine abfrage also:
SELECT *
FROM Tabelle
WHERE tabelle.test LIKE 'abc' anders abfragen?
wäre für jede hilfe dankbar
edit:
habe den Fehler gefunden
In der Abfrage-Entwurfsansicht von MS Access wird als Platzhalter * verwendet. Allerdings muss beim Aufruf über QT doch % verwendet werden. Scheinbar wird hier intern noch etwas am Abfrageausdruck verändert. Viele Dank für die zahlreiche Unterstützung !
SELECT *
FROM Tabelle
WHERE tabelle.test LIKE 'abc' anders abfragen?
wäre für jede hilfe dankbar
edit:
habe den Fehler gefunden