Eintrage in eine Access-Datenbank
-
Huhu zusammen!
Ich habe da ein problem mit meinem kleinen proggi.
Ich will einen Eintrage in eine Access-Datenbank machen.
Geht aber nicht, bei der Insert anweisung bekomme ich dann einen Error!
Debug Assertion Failed!CString anweisung; UpdateData(TRUE); CRecordset rs( &db ); anweisung = "INSERT INTO Kontaktverwaltung (name,vorname,tel_priv) VALUES (' "; anweisung += m_name; anweisung += " ',' "; anweisung += m_vorname; anweisung += " ',' "; anweisung += m_tele; anweisung += " '); "; MessageBox(" "+m_name+" , "+m_vorname+" , "+m_tele+" "); if (rs.Open( CRecordset::forwardOnly, _T(" INSERT INTO Kontaktverwaltung (name,vorname,tel_priv) VALUES ('"+m_name+"','"+m_vorname+"','"+m_tele+"'); ") ) == 0) MessageBox("Fehler in der SQL - Abfrage"); UpdateData(FALSE);Das ist meine Funktion.
Hab schon gesucht im Netz, aber nix wirkliches gefunden.
Kann mir da einer helfen?
Danke schonmal im VorrausGreetz GabberMoron
-
Du kannst Open keine INSERT statement übergben.
CRecordset hat für das da eine AddNew Methode.
Siehe FAQ:
http://www.c-plusplus.net/forum/viewtopic.php?t=39099
-
Also muss ich erst Open
dann AddNew();
dann Update();
und dann Close(); machen...
also so hab ich das verstanden....
hmmm ok, das schau ich mir mal an,
wie die Syntax zum AddNew(); und Update();
ist, .....
weiss nämlich net wie ich da den Query einbauen soll
Aber dankeschonmal fuer die schnelle antwort.
Greetz GabberMoron
-
Sorry für Spam...
kann das gerade net umsetzten am Rechner,
bin net @ home....
aber könnte es so gehen???if (rs.AddNew("name","vorname","tel_priv"),('"+m_name+"','"+m_vorname+"','"+m_tele+"') ) == 0) MessageBox("Fehler in der SQL - Abfrage"); else { rs.Update(); MessageBox("Ok wurde gespeichert"); }Oder bin ich da am total falschem Hacken...
Greetz Moron2k
-
bist total falsch.. faq:
m_pSet->AddNew();
Mit diesem Befehl wird ein neuer Datensatz am Ende der DB eingefügt. Nach dieser Zeile kommen die Zuweisungen der Werte an die Member-Variablen der der von CRecordset abgeleiteten Klasse. Sobald alle gewünschten Wert übergeben wurden, wird der Datensatz mit m_pSet->Update(); in die DB geschrieben.
das sieht dann z.B so aus:
rs.AddNew(); rs.m_name = "name"; rs.m_vorname = "vorname"; rs.Update();
-
Hmmm huch achso
dachte das muss da auch mit rein...
also muss ich garkein query schreiben...rs.Open (CRecordset::readOnly) rs.AddNew(); rs.m_name = m_name; rs.m_vorname = m_vorname; rs.m_tele = m_tele; if (rs.Update() == 0) MessageBox("Fehler in der SQL - Abfrage"); else { MessageBox("Ok wurde gespeichert"); } rs.Close();Hmmm und wenn ich das richtig verstanden habe, sollte das da oben dann
wohl nun richtig sein....Danke aber nochmal fuer die Antwort
Greetz GabberMoron
-
bis auf das problem, dass dein Recordset readOnly geöffnet wurde (was sich mit AddNew/Update nicht richtug versteht) sollte es so klappen.
-
Ach du scheisse bin ich ein pansen....
dann nehm ich halt eben forward only...
ich teste das zuhause dann ma
wenn es funzt schreib ich die Lösung nochmal hierrein,
damit andere net nochmal fragen müssen.Danke nochmal fuer deine Schnelle und Gute Hilfe
Greetz GabberMoron
-
Hier werden Sie geholfen.
www.sensorme.de/dateien/odbc.zip
Dies ist eine ODBC-Klasse für Vc++ 7.1 . Hat fast diue gleichen Methoden wie meine Mysql-Wrapper. Für Source brauchst du nur im Forum zu suchen da es fast der gleiche ist wie für ODBC.
-
Hmmm ok
bin nun zuhaus, hab das auch ma aus probiertCRecordset rs( &db ); if ( rs.Open (CRecordset::forwardOnly,_T ("SELECT * FROM Kontaktverwaltung")) == 0) { MessageBox("Connect nicht erfolgreich!"); } else { rs.AddNew(); rs.name = m_name; rs.vorname = m_vorname; rs.tel_priv = m_tele; if (rs.Update() == 0) MessageBox("Fehler in der SQL - Abfrage"); else { MessageBox("Ok wurde gespeichert"); } } rs.Close();Das geht aber auch net da gibt der mir 3 Fehler...
error C2059: Syntaxfehler : 'constant' (bei rs.name)
error C2059: Syntaxfehler : 'constant' (bei rs.vorname)
error C2039: 'tel_priv' : Ist kein Element von 'CRecordset'So mit dem constant komm ich absolut net klar, und sonst irgendwie auch net....
ich raff das alles nicht.
Hab ich da irgendwo einen denk Fehler oder bin ich einfach zu blöd dafür?Greetz GabberMoron
-
Hast du die m_ vor den Recordsetvariablen vergessen ?
-
Wie leg ich den die Recordset Variablen fest?
Muss ich das ins Public der Recordset Class schreiben?
CRecordset name;
CRecordset vorname;
CRecordset tel_priv;Oder wie muss ich das machen?
Greetz GabberMoron
-
ok hab das nun gemacht.
Programm Startet auch .....
dann spackt der aber ab...MessageBox("Hier gehts noch"); rs.AddNew(); rs.p_name = m_name; rs.p_vorname = m_vorname; rs.p_tel_priv = m_tele; MessageBox("Hier gehts noch");Irgendwo da, weil die 2. MessageBox nicht kommt. Die 1. aber,
so und ich hab nun ma wieder keine Ahnung wo der Fehler liegt....
Oder kann es sein, das meine Access DB irgendwie im Arsch ist....
weil ich bekomm immer das selbe.
irgendsoein Speicher Problem glaube ich...Debug Assertion failed!
Kann mir einer helfen?

Greetz GabberMoron