SQL String, Abfrage auf DB



  • hi
    probier mal das so :

    void  XY::Test (CString sInhalt)
    {
    
    	_TCHAR sqlString[]=_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = '" + sInhalt +"' AND (Text <> "" OR Textt <> "");
    
    .....
    
    }
    

    kommt halt drauf an ob in der DB "" oder Null drin steht



  • Schau dir mal printf an, da steht, was %d macht. 🙂

    wenn in nummer z.B. 5 drin steht, wäre der String
    nummer = 5

    Die Meldung: Kein aktueller Datensatz heißt, das nichts gefunden wurde.
    Du solltest mal auf EOF abfragen. 🙄



  • Also wenn ich dass so mache Zeigt er mir an : "Datentypen in Kriterienausdruck unverträglich."

    CString sqlString; 
    
    		sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = 'nummer' AND (Text "" OR Textt "")")); 
    
    		m_pRS->Open(dbOpenSnapshot,sqlString);  
    
    		if( m_pRS->IsEOF( ) ) 
    			{		
    				COleVariant a,b;
    				CString c;
    
    				m_pRS->GetFieldValue("Text",a);
    
    				a = c;
    
    		        AfxMessageBox(c);
    		}
    


  • Klar geht das nicht, weil du Stgt's Lieblingsfehler abgeschrieben hast. 🙄

    Wenn, dann versuch es mal so:

    sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = \'%d\' AND (Text <> \"\" OR Textt <> \"\")"), nummer);
    

    Falls nummer ein Text ist, verwende bitte %s statt %d.

    Und ich würde statt
    Text <> ""
    ein
    Text NOT IS NULL
    bevorzugen.

    Achja: Ist Zahl (also das Feld in der Datenbank) eine Zahl oder ein Text?
    So wie du abfragst scheint es ein Text zu sein, aber der Name spricht dagegen. 😕



  • welchen Fehler? den \"\" ?



  • Jupp, der Compiler denkt doch sonst, dass der Formatstring da schon zu Ende ist. 🙂

    Schau doch mal aufmerksam die Farben in der Zeile von dir an. Die "" sind schwarz (was sie als Quelltext kennzeichnet) und nicht rot (was sie als String kennzeichnen würde).
    🙂



  • In der Spalte "Zahl" steht eine nummer. diese will ich ja abfragen

    bewkomme immer wieder dei Fehlermeldung

    :
    "Datentypen in Kriterienausdruck unverträglich."



  • ich seh nur dass das weg muss
    sqlString.Format und deine where bedingung anders lauten muss 😉



  • Dann frag es bitte ohne Anführungsstriche ab.
    Wer meckert eigentlich? Der Compiler? Oder die Datenbank, wenn du die Abfrage machst?

    Zeig nochmal die aktuelle Version des Query. 🙂



  • Die Datenbank meckert, weil Zahlen nun mal nicht mit Apostroph umschlossen werden.
    da: ...WHERE Zahl = 'nummer'...
    da auch: ...WHERE Zahl = \'%d\'...



  • @isabeau: Es könnte ja auch eine Zahl sein, die als Text gespeichert wird - hatten wir heute ja auch schon. (Der Thread mit der Farbe in der ini.)



  • Ich werde noch verückt!!

    wenn ich

    sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = \'%d\' AND (Text NOT IS NULL OR Textt NOT IS NULL)"), nummer);
    		m_pRS->Open(dbOpenSnapshot,sqlString);
    

    schreibe sagt mit die Ausgabe " Syntaxfehler in Abfrageausdruck 'Zahl='3295420' AND (Text NOT IS NULL OR Textt NOT IS NULL)'."

    Vielleicht liegt es daran nummer ist ein CString mit dem wert "123" aber wie kommt der dann auf 3295420???



  • @ estartu_de: Stimmt.

    Tommy005 schrieb:

    In der Spalte "Zahl" steht eine nummer.

    Ich war so frei, "nummer" als Zahlenwert zu interpretieren. "nummer" als Text habe ich mal ausgeschlossen.
    Die Fehlermeldung weist aber auch unauffällig 😃 darauf hin, dass die Datentypen nicht passen:
    "Datentypen in Kriterienausdruck unverträglich."
    Also vermute ich mal, dass es kein String ist...
    P.S.:
    nicht NOT IS NULL sondern IS NOT NULL, oder ?



  • Ich hab doch gesagt, dass du %s nehmen sollst, wenn nummer ein string ist... 🙂
    Außerdem würde ich noch Klammern setzen:

    sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = \'%s\' AND ((Text IS NOT NULL) OR (Textt IS NOT NULL))"), nummer);
    

    Ansonsten hilft nur ruhig bleiben. *kopftätschel* 😉



  • isabeau schrieb:

    P.S.:
    nicht NOT IS NULL sondern IS NOT NULL, oder ?

    *schäm*
    DAS ist mein Standardfehler... 🙄



  • Okay !!
    Sorry ich bin leicht gestresst 🙄 !! Naja ich muss jetzt weg *leider*! trotzdem vielen Dank für euere Hilfe! Werde mich gleich morgen früh nochmal dran versuchen 🙂 !!Des muss doch zu schaffen sein 🕶 !

    Also wünsch euch noch einen schönen Tag !! bis morgen vielleicht

    und nochmal Danke!

    Gruß Tommy



  • Juten Morgen,

    also ich sitze jetzt schon seit 2 Stunden drann aber ich komme nie in meine If-Anweisung rein 😞

    CString sqlString,d; 
    
    sqlString.Format(_T("SELECT Zahl,Text ,Textt  FROM Tabelle1 WHERE Zahl = \'%s\'AND ((Text IS NOT NULL) OR (Textt IS NOT NULL))"), nummer); 
    
    m_pRS->Open(dbOpenDynaset,sqlString);  //habe es auch schon mit dbOpentable & dbObenSnapshot probiert
    		AfxMessageBox("Nach dem öffnen");
    
    		if( m_pRS->IsEOF( ) ) 
    			{	
    
    			COleVariant a;
    			CString c;
    			AfxMessageBox("is in der if bedinung drinnen");
    			m_pRS->GetFieldValue("Text",a);
    
    		         a = c;
    
    		        AfxMessageBox(c);
    		}
    
    	}
    

    hat jemadn eine Ahnung woran dass liegen könnte ??

    meine Datenbank hat ja nur 1 Tabelle "Tabelle1" und 3 Spalten.

    Spalte 1 "zahl" ----> Typ Text (da ich einen Cstring übergebe)
    Spalte 2 "Text" ----> Typ Text (beinhaltet entwerder "ja" oder nichts)
    Spalte 3 "Textt"----> Typ Text (beinhaltet entwerder "ja" oder nichts)



  • Deine if-Abfrage prüft ab, ob kein Datensatz vorhanden ist. Wenn keiner vorhanden ist, wird dieser in der if-Abfrage ausgelesen.
    Richtig wäre abzuprüfen, ob nicht EndOfFile ist.



  • Okay aber daran liegt es nicht :-(! Mit

    if( !m_pRS->IsEOF( ) )
    

    geht er auch nicht rein! Also wird meine Abfrage wohl kein ergebnis liefern



  • muss es nicht heißen
    if(!m_pRs->EndOfFile)
    also ein "!"


Anmelden zum Antworten