Vergleichen per SQL



  • Hallo nochmals,

    nachdem ich mein anderes Problem (auch in diesem Forum behandelt CRecordset::Update()) gelöst habe, stellt sich für mich ein neues Problem.
    Dies betrifft folgende Zeilen:

    SqlString = "SELECT * FROM tbl_Vermietung WHERE Benutzer = '";
     	SqlString += idUser;
    	SqlString += "' and Status = '";
    	SqlString += status;
    	SqlString += "'";
    

    Ich möchte gerne etwas vergleichen und zwar ob die Spalte Benutzer == idUser und die Spalte Status == status ist. Die Spalte Benutzer hat eine Beziehung zur Tabelle Benutzerliste, wo Sie auf den Benutzernamen verweisst. Die Spalte Status hat einebeziehung auf die Tabelle Status wo Sie logischer Weise auf die Spalte Status zeigt.
    Das heisst also ich habe zwei long Werte in meinem MFC Programm, idUser und status sind ebenfalls long Werte. Eigentlich dürfte es doch kein Problem sein so diese beiden Spalten zu Vergleichen. Aber wenn ich mir das Vergleichen im Debug ansehe, dann kommt als Ergebnis ein komisches Zeichen raus. idUser und status haben aber vor dem Vergleichen die richtigen Werte 😕
    Ich hoffe das Problem wurde verstanden und mir kann jemand helfen.

    gruß Silver



  • Du kannst long nicht per +Zeichen in einen String stopfen. 🙄
    Nimm Format mit %d als Formatzeichen, dann klappts.

    strSQL.Format(_T("[ID] = %d"), lID);
    


  • Das übergeben per +Zeichen von Integer bzw. Longwerte ist nicht möglich. Du musst hier die Format Funktion dafür nutzen.

    SqlString.Format("SELECT * FROM tbl_Vermietung WHERE Benutzer = '%s' and status=%d",idUser, status);
    


  • guenni81 schrieb:

    SqlString.Format("SELECT * FROM tbl_Vermietung WHERE Benutzer = '%s' and status=%d",idUser, status);

    Wieso machst du Benutzer = '%s' und status = %d ?? Benutzer ist doch auch ein long Wert und beide Spalten zeigen auf ein Textfeld. Müssten die nicht beide den gleichen Wert %d zugewiesen bekommen?



  • Silvercreast schrieb:

    guenni81 schrieb:

    SqlString.Format("SELECT * FROM tbl_Vermietung WHERE Benutzer = '%s' and status=%d",idUser, status);

    Wieso machst du Benutzer = '%s' und status = %d ?? Benutzer ist doch auch ein long Wert und beide Spalten zeigen auf ein Textfeld. Müssten die nicht beide den gleichen Wert %d zugewiesen bekommen?

    Dann muss dies natürlich auch ein %d sein. Mein Fehler 😃



  • Vermutlich hat Guenni Strings als ID und nicht aufgepasst. 😉
    Nimm einfach %d bei beiden, das sollte für dich richtig sein. 🙂

    beide Spalten zeigen auf ein Textfeld

    Aber es sind long?



  • estartu schrieb:

    Du kannst long nicht per +Zeichen in einen String stopfen. 🙄
    Nimm Format mit %d als Formatzeichen, dann klappts.

    strSQL.Format(_T("[ID] = %d"), lID);
    

    Du hast wie immer Recht 🙄 . Das kommt von diesem ganzen Copy & Paste.
    Ich benutze nämlich so eine Kontrolle auch bei meiner Login Kontrolle und dort habe ich nur String's.
    Meinst du mit [ID] meinen Benutzer und den Status???



  • Silvercreast schrieb:

    estartu schrieb:

    Du kannst long nicht per +Zeichen in einen String stopfen. 🙄
    Nimm Format mit %d als Formatzeichen, dann klappts.

    strSQL.Format(_T("[ID] = %d"), lID);
    

    Du hast wie immer Recht 🙄 . Das kommt von diesem ganzen Copy & Paste.
    Ich benutze nämlich so eine Kontrolle auch bei meiner Login Kontrolle und dort habe ich nur String's.
    Meinst du mit [ID] meinen Benutzer und den Status???

    estartu meint mit ID deinen Benutzer 😃



  • Ok 😃
    Aber nun bekomme ich bei meinem Open() ne Exeption: "Datentypen in Kriterienausdruck unverträglich"

    JaJa da hab ich se wieder meine geliebte Exeption



  • guenni81 schrieb:

    Silvercreast schrieb:

    Meinst du mit [ID] meinen Benutzer und den Status???

    estartu meint mit ID deinen Benutzer 😃

    Guenni: Falsch
    Silvercreast: Richtig 😉

    Wegen der Exception: Zeig bitte mal den GENAUEN fertig gebastelten String (kannste ja kopieren).



  • Meinst du diesen :

    SqlString.Format("SELECT * FROM tbl_Vermietung WHERE Benutzer = '%d' and status=%d",idUser, status);
    

    Und das ist das darauf folgende Open:

    if( lease.Open( CRecordset::forwardOnly, SqlString ) == TRUE )
    


  • Mach die ' ' weg. Das ist doch kein String. 🙄



  • Oh ja ich seh es .
    Hast du eigentlich mal gezält wie oft du den Verzweiflungssmilie ( 🙄 ) bei mir schon genutzt hast ?? 😃
    Ich glaube das kann man gar nicht mehr zählen.



  • Hey, solange ich nicht mit 😡 anfange ist alles in Ordnung. 😉


Anmelden zum Antworten