Recordset Filter
-
Hallo,
folgendes Problem:
Ich will, dass bei meiner OdbC Abfrage die Daten gefiltert werden, welche nen bestimmten String enthalten. Also praktisch auf die Art:
recordset.m_strFilter = "name enthält " + String;
Ich weiß aber nicht wie ich das Umsetzen kann bzw. muss. Bitte um eure Hilfe.
Danke im voraus
Greez Osiris
-
Kannst du SQL? Wenn nicht solltest du dir dazu was besorgen.
recordset.m_strFilter.Format("[name] LIKE \'%%%s%%\'", String);
% ist das Wildcard.
LIKE steht für "so ähnlich" (sonst funktioniert das % nicht)
-
Ja ich kann SQL halbwegs. Also um präzise zu sein kann ich MySQL, aber die Unterschiede sind da ja nicht so gravierend. Jetzt 2 Sachen:
1. es geht nicht
2. Was ist die WildCard
-
zu 2.) und was bedeutet das %%%s%%
-
Problem gelöst!
Richtige Lösung:
recordset.m_strFilter = "name LIKE '%" + String + "%'";
Vielen Dank trotzdem für die Hilfe.
Greez Osiris
-
Sorry, ich sitz hier grade ohne Compiler und Testmöglichkeit.
Okay, wenn er die Sonderzeichen so annimmt, dann ist gut. Im Prinzip sollte bei meinem Versuch das rauskommen, was du nun hast, nur mit einem anderen Befehl.
-
Also mit CRecordset::m_strFilter kommt alleinig die WHERE-Klausel! Folgendes Beispiel:
Willst Du Daten gemäß folgenden SQL-Statement filtern
SELECT * FROM TEST_TABLE WHERE TEST_ID = 10
dann wird m_strFilter mit
"TEST_ID = 10"
belegt. Die eigenartigen Sonderzeichen wie %s%ld sind Sache der MFC-Klasse CString. Mit CString::Format kann man nämlich schön solche WHERE-Klauseln basteln.
Beispiel:
strMyFilter.Format("TEST_ID = %ld", nId); // oder ("TEST_ID = %ld", 10)
Erzeugt folgenden String: "TEST_ID = 10"! Diesen kannst Du nämlich dann auf m_strFilter übertragen.
Vollständiger Code:
CDatabase *pDb = GetPointerFromWeißDerTeufelWoher(); CMyRecordsetDerivation set(pDb); set.m_strFilter.Format("TEST_ID = %ld", 10); set.Open(); long nMySearchedData = set.m_TEST_VALUE; set.Close();
-
@ChrisPlusPlus: mit % ist nicht das Sonderzeichen in CString::Format gemeint. % ist in SQL ein Platzhalter, was in der Windows-Suche der * wäre.
-
Pellaeon schrieb:
@ChrisPlusPlus: mit % ist nicht das Sonderzeichen in CString::Format gemeint. % ist in SQL ein Platzhalter, was in der Windows-Suche der * wäre.
Ich hatte aber %% geschrieben, was für das % steht.
-
Nun ja, dann basteln wir uns einen Filter mit Sonderzeichen
CSetBlablabla.m_strFilter.Format("TEST_NAME = '\%%s\%'", "blubl");
und das ergibt
TEST_NAME = '%blubl%'... und soweit ich weiß, kann m_strFilter auch Metazeichen verarbeiten!
-
ah achso, hab ich überlesen^^ sry