ODBC -> m_pSet->m_strFilter



  • Hallo,

    ich hab ein Problem mit meiner Datenbank.
    Ich möchte einen Filter setzen.
    Habe dazu einmal den Spaltennamen und einmal den Inhalt der Spalte in zwei Variablen gespeichert. Nun versuche ich mithilfe dieser beiden Variablen den Filter zu setzten, nur klappt das leider nicht, wo liegt denn mein fehler?

    CString Name = "Kundennummer";
          CString Inhalt = "5";
    
           CRecordset* pSet = OnGetRecordset();
    
    	m_pSet->m_strFilter = """ + Name + " = '" + Inhalt + "'"";
    
    	m_pSet->Requery();
    
    	UpdateData(FALSE)
    

    So ich hoffe es kann mir jemand weiterhelfen.

    Mit freundlichen Grüßen

    Bonzon



  • Moin!

    Du hast dich irgendwie mit den ganzen "" vertan.

    m_pSet->m_strFilter = Name + " = \'" + Inhalt + "\'";
    

    Ist die Kundennummer wirklich ein Text und keine Zahl?



  • Ok das klappt auch nicht

    Nun kommt der Fehler:

    Datentypen in Kritirienausdruck unverträglich."

    Lässt das darauf hinweißen, dass in der Datenbank ein Integer und kein String steht?
    Aber eigentlich sollten ein String drin stehen.



  • Wer meldet das denn?
    Der Compiler? Dann ist der Code falsch.
    Die Datenbank? Dann ist es wohl keine Zeichenkette.

    Wenn der Code falsch ist, kann das daran liegen, dass ich bei Filtern nie mit + arbeite sondern mit Format, weil man damit bei längeren Filtern noch besser den Überblick behält.
    So sähe das bei mir aus:

    m_pSet->m_strFilter.Format(_T("%s = \'%s\'"), Name, Inhalt);
    


  • Ok man der Fehler war, in der DB war int statt CString eingetragen, oh man... nun klappt es aber.
    Nur nun hab ich noch eine Frage.
    Ich lass ja den Inhalt über ein Edit-Feld einlesen. Nun muss ich aber im Moment jeden Inhalt des Filters komplett korreckt schreiben, damit der Filter genutzt wird.
    Gibt es eine Code-möglichkeit den Filter so zu modifizieren, damit er auch Stringteile einliest und dann nach allen filtert, wo der (Teil-)String enthalten ist?

    Das würde mir um einiges weiterhelfen.



  • Klar geht das. Schau mal in ein SQL Buch und guck dir da an wie das geht.
    Stichworte:
    LIKE
    %

    Anm.: % macht man bei Format mit %%. 😉

    Du kannst bei m_strFilter all das reinschreiben, was du in einem SQL Buch bei WHERE findest.
    Also auch Sub-Selects und solche eher fortgeschrittenen Sachen. 🙂

    ...und bei m_strSort kann alles rein, was du bei ORDER BY hinschreiben würdest.

    So kannst du auch deinen Code testen, indem du die Datenbank direkt mit dem fütterst, was der Debugger anzeigt. Hilft enorm, weil die Meldungen klarer sind.



  • Erstmal vielen vielen Dank estartu, dass du dich meiner Annimmst.

    ok also ich hab mal geschaut und auch was gefunden.
    im SQL wird geschrieben

    WHERE A.V_NAME LIKE 'Me%'
    

    Auf C++ und ODBC zu schlussfolgern müsste ich doch nun einfach

    m_pSet->m_strFilter = Name + " = '" + Inhalt + "%%'";
    

    Nur leider funktioniert das nicht so wie ich das will, denn nun findet er gar nix mehr zum filtern 😞
    Das blöde ist halt, ich kenn mich überhaupt nicht aus in SQL...leider.



  • Das macht nix, dass du dich nicht auskennst. Die Antwort steht schon in deinem Post. 😉
    Du hast es rausgefunden aber nicht gesehen.

    Nochmal:

    A.V_NAME LIKE 'Me%'
    
    m_pSet->m_strFilter = Name + " = '" + Inhalt + "%%'";
    

    Wird zu:

    A.VNAME = 'Me%'
    


  • Ah alles klar, 5 Minuten später hab ich es auch gesehen...sorry

    hab es jetzt so gemacht

    m_pSet->m_strFilter = Name + " LIKE '" + Inhalt + "%%'";
    

    Ich danke dir vielmals für deine Hilfe und hoffe, dass ich mit meiner Deppischkeit auch anderen Leuten helfen konnte 🙂


Anmelden zum Antworten