m_strFilter
-
Hi ich habe ein kleines Problem,
Ich arbeite mit VC++ und Access und dasmit der Datenbank klappt soweit recht gut. Ich habe jetzt nur ein Problem wenn ich einen m_strFilter setze klappt das nur wenn ich im Source einen festen Wert eingebe. so z.B.m_pSet->m_strFilter="Nachname = 'test'";
Wenn ich jetzt aber eine Variable einsetzen will (siehe unten) geht es nicht mehr ich bekomme dann in der Anwendung als Filter nur den aktuellen Datensatz.
m_pSet->m_strFilter="Nachname = 'm_Suche'";
m_Suche kommt von einem Edit Feld und ist ein String.
Vielen Dank jetzt schon mal an alle die mir helfen
-
Polofreak schrieb:
m_pSet->m_strFilter="Nachname = 'm_Suche'";
Mit ein wenig Nachdenken sollte dir klar werden, warum das nicht funktionieren kann.
Anscheinend erwartest du, dass auf magische Weise der Text m_Suche in deinem Filterstring durch den Inhalt der Variable m_Suche ersetzt wird. Aber was, wenn du wirklich nach einem Nachnamen m_Suche suchen wolltest? Oder was, wenn deine Variable test hieße? Wie soll der Compiler das unterscheiden?
Du musst den Filterstring zusammensetzen. Schau dir mal CString::Format an.
-
-
Hi ihr zwei danke für eure antworten hat jetzt echt gut geklappt, :p kann richtig schön eine Eingabe auslesen und danach filtern. Wie komme ich jetzt aber wieder quasi aus meinem Filter raus? Muss ich dann den Recordset schließen und die DB neu öffnen? wäre schön wenn mir einer von euch ein wenig Source dazu hätte
mfg Polofreak
-
Setz den Filter auf einen Leerstring und ruf Requery auf.
-
Hab ich mir auch gedacht nur hab ich da wohl irgendwas falsch gemacht ich hab es in etwa so
// Die ID in den neuen Datensatz schreiben
m_pSet->m_strFilter = "Nachname = ''";
// Den Recordset aktualisieren
m_pSet->Requery();UpdateData(FALSE);
aber dann habe ich garkeine Datensätze mehr.
-
MFK schrieb:
Setz den Filter auf einen Leerstring und ruf Requery auf.
Polofreak schrieb:
m_pSet->m_strFilter = "Nachname = ''";
Ist m_pSet->m_strFilter jetzt ein Leerstring (leerer String) oder steht da irgendetwas drin ?
-
m_pSet->m_strFilter = "Nachname = ''";
. = leer Hochkomma Hochkomma Anführungsstriche Semikolon
-
Genau, das, was du da hast, bedeutet so viel wie
...WHERE Nachname = ''
bzw.
...WHERE Nachname IS NULLIst aber immernoch kein leerer String im Filter (steht ja was drin)...
-
OK gut hast ja recht aber wie geht es denn nun?? IN der MSDN steht dass man als Spaceholders ? verwenden kann aber auch '?' geht nicht kann ich irgendwie mit * arbeiten oder mach ich das mit dem ? falsch? kann mir nicht jemand schnell ne Zeile schreiben die mir alle Datensätze wieder anzeigt??
-
m_pSet->m_strFilter = "";
-
Boa scheiße jetzt geht er!
Danke Vielmals hat mir sehr geholfen.mfg Polofreak
-
nur mal ganz allgemein, man kann der Open-Methode auch einen SQL-string uebergeben:
CString strSQL = "SELECT * FROM TABLENAME WHERE SPALTENNAME = deinWert;"; poDBRecord->Open(CRecordset::snapshot, strSQL);
Esco
-
MSDN schrieb:
A string pointer containing one of the following:
- A NULL pointer.
- The name of a table.
- A SQL SELECT statement (optionally with a SQL WHERE or ORDER BY clause).
- A CALL statement specifying the name of a predefined query (stored procedure). Be careful that you do not insert whitespace between the curly brace and the CALL keyword.
-
Man kann auch Proceduren aufrufen?
Super, ich bin gerettet! Danke!
-
hm das mit der SQL-Anfrage geht bei mir nicht wirklich!
Hab es so probiertvoid CDatabaseView::OnBTNSQL() { LPCTSTR strSQL = "SELECT * FROM Anrufe"; //vorhandenes Recorset schließen m_pSet->Close(); //erneut mit SQL string öffnen m_pSet->Open(CRecordset::snapshot, strSQL); }
Dann bringt er mir immer Ungültiger Deskriptor Index. (Hat das was mit dem SP zu tun?) Hab auf der MS HP gelesen dass es in Excel zu nem Problem kommen kann wo er diese Meldung bringt. muss ich mir jetzt das SP3 ziehen??
-
Tja hab echt lange gegoogelt, die einen meinen es sein ein Bug von VC++, mann muss die Klasse einfach neu anlegen wenn das nicht klappt als DAO andere sagen bekommt man gar nicht weg andere sagen es kommt darauf an wie man es ausliest, da man in der gleichen Reihenfolge auslesen muss wie in der SQL-query (ich les noch gar nicht aus) und so weiter aber meine erste Vermutung mit dem SP kann glaub ich nicht sein denn das ist alles nur immer für exel ich hab ja aber Access als DB laufen.
Wenn jemandem was zu falschen Deskriptor Indexen einfällt bitte schreiben.
Aber dank euch allen für eure Bemühungen
-
Ok wenn zum Beitrag eins weiter oben niemand eine Ahnung hat dann aber wahrscheinlich zu diesem neuen Problem.
einen m_strFilter. Ich will nach einer Variablen Zahl Filtern also nach ner int Variable.m_pSet->m_strFilter = "Maschinennummer = hierdie in Variable";
kann mir da jemand die Zeile kurz schreiben und wenn '"?+ o.ä. drin vorkommen bitte kurz erklären warum und wieso die da stehen
-
warum guckst du da nicht in ein SQL-tutorial ??
aber ok ...m_pSet->m_strFilter = "Maschinennummer = \"*\"";
für den SQL-Server heißt das das hier:
Maschinennummer = "*"
und das stern bedeutet wie du sicherlich ahnen kannst, da kann stehen was will
(bin mir auch ziemlich sicher das auch eine leere zeichenfolge in die ergebniss tabelle aufgenommen wird)
Edit:
sorry, das du nach Integer suchst hab ich übersehen, da musste die gänsefüßchen natürlich weg lassen
-
Suchst du nicht eher sowas?
long lID = 5; m_pSet->m_strFilter.Format(_T("ID = %d"), lID);
Da würde dann für den SQL-Server stehen:
ID = 5