SQL String, Abfrage auf DB



  • Hi,

    Ich habe folgendes Problem :
    Ich habe eine Accesstabelle (Tab1). Diese besitzt 3 Spalten ( Zahl, Text, Textt). In der ersten Spalte stehen Zahlen und in den zwei Text Spalten steht entweder " ja " oder garnichts. Ich will dass mein Programm erst eine Abfrage anhand einer Zahl durchführt (nummer)und nur dann ein return 0 zurückgibt wenn in einer der zwei, oder in beiden Textsplalten nichts steht!

    bissher habe ich folgenden Code :

    _TCHAR sqlString[]=_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE 'nummer'=true  "); 
    m_pRS->Open(dbOpenSnapshot,sqlString);  
    
    COleVariant a;
    CString c;
    
         m_pRS->GetFieldValue("text",a);
    // m_pRS->GetFieldValue("2",a); habe ich auch schon versucht!
    
       a = c;
    
    AfxMessageBox(c);
    

    ich wollte eigentlich dass (zum Testen) in der variable c der inhalt der des Feldes aus der Textspalte steht!! bekomme aber nie was raus 😞



  • versuch mal:
    _TCHAR sqlString[]=_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE nummer=-1;");



  • Nein dess muss natürlich WHERE Zahl = nummer heißen aber ich bekomm trotzdem nichts in der Ausgabe 😞



  • Okay, dann versuchs mal so:

    CString strSql;
    strSql.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE zahl=%d;"), nummer);
    

    Nun musst du das nur mit der neuen Variable aufrufen - ich brauchte halt den Format Befehl.
    🙂



  • was bedeutet " zahl = %d "??
    ich wollte ja die Zeile in der die nummer vorhanden ist! Wenn ich dass nache deinem Vorschlag mache Sagt er mir nur : "kein aktueller Datensatz"!! woran kann dass liegen?



  • 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... 🙄


Anmelden zum Antworten