SQL-Problem - Insert funktioniert nicht



  • @Boa: Wegen dem "+": siehe Beitrag von Isabeau
    Werd deine Variante mal probieren!

    @Isabeau: Bei dem CDaoRecordset hatte ich das DAO nur vergessen zu tippen und die .mdb hatte ich anonymisiert 😉

    Isabeau schrieb:

    Oder aber auch wenn in der Zeile "m_nFields = 12;" eine falsche Anzahl Felder steht.

    Was meinst du damit genau?

    Das man Insert nicht beim Open verwenden darf, hab ich noch nie gehört. Werd ich aber mal näher überprüfen. Vielleicht liegts ja daran.



  • Aloha,

    aber das braucht es doch normalerweise gar nicht bei einer INSERT INTO Anweisung ?

    INSERT INTO MeineTabelle(string1,string2, string3) VALUES ('Ich', 'bin','BOA')
    

    reicht...

    Ich verstehe die irre vielen "+"-Zeichen vor und hinter den Variablen einfach net ?
    Ich meine, kann ja auch ne mögliche Schreibweise sein, ist mir neu, wie gesagt...

    Grüße

    BOA



  • BOA schrieb:

    INSERT INTO MeineTabelle(string1,string2, string3) VALUES ('Ich', 'bin','BOA')

    Dann würde ich aber immer "Ich", "bin" und "BOA" in die Tabelle schreiben, was ja auch nicht Sinn der Sache ist. Soweit ich weiss sind diese ganzen ", ' und + Teile der Syntax einer Membervariable in einem SQL. Die Membervariable übergibt das, was im Dialog eingegeben wurde. Also das, was letztendlich in die Datenbanktabelle geschrieben werden soll.

    Ich lass mich da aber gerne eines besseren belehren! Schliesslich läuft es bei mir ja (noch) nicht... 😉



  • Aloha,

    yup, Du hast natürlich Recht. Wer lesen (und denken) kann ist klar im Vorteil.
    Wenn Du Variablen übergeben willst ist das korrekt.

    Ok, da Du jetzt Dir aber ne Klasse angelegt hast, nutze diese, Du hast ja schließlich jetzt Membervariablen...

    rs.AddNew();                   <--- rs ist Deine Recordset
    rs.m_variable1 = string1;      <--- die m_variable1 ist in Deiner Header von CTabelleProjekt, wenn Du alles korrekt per Klassenassi angelegt hast !
    rs.m_variable2 = string2;
    rs.m_variable3 = string3;
    rs.Update();
    

    Und schwups, isses drinne...

    Ich nutze die DB.ExecuteSQL immer bei Konstanten, und die Membervariablen bei Variablen ( <-- lol ).

    Grüße

    BOA



  • Ok, werd das mal probieren. Hab immer noch keine lauffähige Lösung!

    Ein paar Fragen dazu:
    Wie mach ich dem klar, dass "string1" eine Spalte in der Tabelle ist? Bei mir sieht das so aus:

    rs.m_Projekt_ID = Projekt_ID
    

    m_Projekt_ID ist die Membervariable und Projekt_ID ist die Spalte der Tabelle.

    Ausserdem sind die Spalten Projekt_Beginn und Projekt_Ende Datumstypen. Können die COleTimeDate sein, oder ist irgendein Datentyp zwingend?

    Danke dir schonmal für die Hilfe!



  • Aloha noch einmal,

    im Prinzip brauchst Du niemanden etwas klar machen. 😉

    Durch Dein Erstellen Deiner Klasse CTabelleProjekt hast Du ja Membervariablen für einen Recordset angelegt. Jede Membervariable repräsentiert eine Spalte Deiner Access Tabelle.

    Nach Deinem bisherigen Quelltext wäre es so korrekt.

    UpdateData(TRUE);
    CDaoDatabase db;
    
    if(db.Open("Database.mdb")){
    
       CTabelleProjekt rs(&db);
       if(rs.open()){
    
            rs.AddNew();
            rs.m_projekt_ID = m_projekt_ID;    <--- rs.m_projekt_ID ist die Spalte, in der m_projekt_ID eingetragen wird. 
                                               <--- m_projekt_ID ohne rs ist der Textstring aus dem Editfeld.
            rs.variable2 = m_ProjektBeschreibung;
            rs.variable3 = m_Buchungsnummer;
            rs.variable4 = m_ProjektBeginn;
            rs.variable5 = m_ProjektEnde;
            rs.Update();
    
            rs.Close();
       }else{
    
            AfxMessageBox("Konnte Recordset nicht öffnen");
    
       db.Close();
    }else{
    
       AfxMessageBox("Konnte DB nicht öffnen");
    
    }
    

    Bei COleDateTimes kann ich es nicht sagen, ich arbeite immer mit CTime, die erkennt er ohne Probs.
    Einfach mal testen.

    Grüße

    BOA



  • COleDateTime geht auch. In der Header-Datei von CTabelleProjekt einfach COleDateTime als Datentyp vor die Member m_Projekt_Beginn und m_Projekt_Ende schreiben (da steht jetzt bestimmt CTime oder sowas). Allerdings kannst du da keine CStrings rein schreiben. Wenn du das versuchst, kommt genau die Fehlermeldung vom Anfang des Threads.



  • isabeau schrieb:

    Allerdings kannst du da keine CStrings rein schreiben. Wenn du das versuchst, kommt genau die Fehlermeldung vom Anfang des Threads.

    Aloha,

    yup, die Datentypen sollten schon übereinstimmen. 😉

    Grüße

    BOA



  • Juhu, jetzt klappts!

    Ich danke euch für eure geduldige Hilfe! 👍

    LeByDo! 😃



  • Aloha,

    👍

    Beste Grüße

    BOA


Anmelden zum Antworten