DB (insert)



  • Hi @ all

    Ich versuche gerade auf ne DB zuzurgreifen:

    CDatabase db;
      db.Open("ODBC;DSN=pruef-db");
      db.ExecuteSQL("INSERT INTO pruef (rolnr) VALUES (fmax)");
    db.Close();
    

    Ich kriege immer die Meldung dass 1 Paramenter erwartet, aber zuwenig übergeben wurde.
    Wenn ich anstatt der Variable fmax ein String hab ('BLA'), dann schreibt er es rein.
    Warum kann ich nicht den Ihnhalt der Variable fmax in die DB schieben ???

    Gruß



  • Hallo !

    So

    db.ExecuteSQL("INSERT INTO pruef (rolnr) VALUES (fmax)");
    

    ist "INSERT INTO pruef (rolnr) VALUES (fmax)" ein kompletter String.
    Den Variableninhalt musst du in den String einbauen.
    Probier das mal aus:

    db.ExecuteSQL("INSERT INTO pruef (rolnr) VALUES (" + fmax + ")");
    

    oder wenn er jetzt meckert, dann den String vorher zusammen bauen:

    CString cSQL = "INSERT INTO pruef (rolnr) VALUES (" + fmax + ")";
    db.ExecuteSQL(cSQL);
    

    Tschüss

    Edit:
    Nochwas:
    Das da oben sollte eigentlich klappen, wenn fmax ein Zahlenwert (int oder so) ist. Wenn es ein String ist, müssen noch die hier '' eingebaut werden:

    CString cSQL = "INSERT INTO pruef (rolnr) VALUES ('" + fmax + "')";
    

    [ Dieser Beitrag wurde am 24.09.2002 um 11:52 Uhr von isabeau editiert. ]



  • Hi

    leider klappt es immer noch nicht !!
    Compilerfehler: Zwei Zeiger koennen nicht addiert werden

    Noch andere Vorschläge ????



  • Ist fmax überhaupt ein String ?
    Wenn nicht, dann muss das Ding vorher umgewandelt werden:
    Ungefähr so:

    CString cTemp;
    cTemp.Format("%d", fmax); // bei int
    cTemp.Format("%g", fmax); // bei Kommazahlen (oder war es %f ?)

    Und dann rein in den anderen String:

    CString cSQL = "INSERT INTO pruef (rolnr) VALUES (" + cTemp+ ")";
    db.ExecuteSQL(cSQL);

    Hoffe, das klappt...



  • Achso, das klappt nur mit strings !!!!!

    Wie ist es wenn ich in der DB vordeffinierte int Felder habe ???

    Gruß



  • Deine SQL-Anweisung ist ein String. Wenn du auf diese Weise int-Werte in Datenbank-int-Felder schreiben willst, musst du die int-Werte in Strings umwandeln und in die String-SQL-Anweisung einbinden. In der Datenbank werden sie dann trotzdem als int-Wert gespeichert.

    Z.B.:

    int x = 5;
    
    CString cTxt;
    cTxt.Format("%d", x);
    
    CString cSQL;
    cSQL = "INSERT INTO pruef (rolnr) VALUES (";
    cSQL += cTxt;
    cSQL += ")"; // in cSQL steht jetzt die SQL-Anweisung: INSERT INTO pruef (rolnr) VALUES (5)
    
    ...
    
    db.ExecuteSQL(cSQL); // führt die SQL-Anweisung (s.o.) aus
    

    Wenn man eine SQL-Anweisung schreiben will, die einen String in die Datenbank schreibt, muss man eben in der SQL-Anweisung die ' mit einbauen.

    Edit:
    schon wieder die Code-Tags vergessen...

    [ Dieser Beitrag wurde am 24.09.2002 um 14:20 Uhr von isabeau editiert. ]



  • Das Problem mit den Argumenten, die ngeblich fehlen, hab ich auch bei meiner ODBC-Db. Ich öffne die per

    CDBSet m_db;   //CDBSet kommt von CRecordset
    m_db.Open(CRecordset::dynaset, "[content_latein]", CRecordset::readOnly);
    

    Weiß einer, wo da ein Argument fehlt?


Anmelden zum Antworten