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


Anmelden zum Antworten