OK jetzt mal ganz kurz und knackig mein Problem mit ODBC
-
Hatte das schon richtig gemacht, musste das nur so um ändern wie du es in deinem letzten Beispiel geschrieben hattest:
trSQL = "Insert into tabelle(Spalte1, Spalte2, Spalte3) values('test','test','test')";
Wobei ich aber weiterhin nen CString strSQL benutzen kann.
Nur da wo du Insert into tabelle schreibst, muss ich da net einfach meinen Tabellennamen aus Access angeben????
-
Der Compiler sagt mir nämlich als Ausgabetabelle nicht gefunden, wenn ich schreibe Insert into tblDatenbank(......)
-
klar muss da dein tabellenname rein
ich merke schon, du lernst schon noch SQL. Das solltest du dir mal genauer ansehen. Dann kannst du deine ganzen Infos deiner Sammlung in Tabellen speichern und einfach nen Select drauf loslassen und brauchst das Ergebnis nur noch anzeigen lassen - sogar schon sortiert
http://www.sql-und-xml.de/sql-tutorial/insert-zum-einfuegen-von-zeilen.html
-
Ich hab von SQL keine ahnung, hab nur mit Access zu tun gehabt. Und dort war das einzige wirkliche was mit SQL richtig zu tun hatte abfragen erstellen.
Aber wieso sagt mir der Compiler das er meine Datenbanktabelle nicht finden kann??
-
Ok Fehler gefunden jetzt bekomme ich aber wenn ich abspeichern will ne komische Meldung:
Debug Assertion Failed
Dann nennt der den Pfad meiner Datenbank
Dann kommt File: dbcore.cpp
line:512Was heisst das??
-
Drück "Wiederholen", zeig den Code, wo du landest.
(Achte besonders auf Kommentare und die Zeichenfolge Assert.)
-
HILFE!!!!!!!!
Jetzt bin ich total verwirrt ich krieg eine Fehlermeldung nach der anderen.
z.B. Unbehandelte Ausnahme bei 0x5f7023e3 (MFCD42D.DLL) in Musik_Datenbank.exe: Benutzerhaltepunkt.
oder : Eine Ausnahme "Unbehandelte Win32 - Ausnahme"ist in Musik_Daten.exe aufgetreten
Was nun????
-
Startest du mit F5? Siehst du irgendwelchen Quellcode, wo das Wort AssertIsWindow oder ASSERT oder so vorkommt?
-
Der Debug stop bei: ASSERT(m_bTransactionPending);
-
Der ganze Abschnitt sieht so aus:
BOOL CDatabase::CommitTrans() { ASSERT_VALID(this); ASSERT(m_hdbc != SQL_NULL_HDBC); if (!m_bTransactions) return FALSE; // BeginTrans must be called first #ifdef _DEBUG ASSERT(m_bTransactionPending); #endif _AFX_DB_STATE* pDbState = _afxDbState; RETCODE nRetCode; AFX_SQL_SYNC(::SQLTransact(pDbState->m_henvAllConnections, m_hdbc, SQL_COMMIT)); BOOL bSuccess = Check(nRetCode); // Turn back on auto commit AFX_SQL_SYNC(::SQLSetConnectOption(m_hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON)); DEBUG_ONLY(m_bTransactionPending = FALSE); return bSuccess; }
-
Na, dann ist doch schon einfacher:
// BeginTrans must be called first #ifdef _DEBUG ASSERT(m_bTransactionPending); #endif
Was sagt dir der Kommentar? Hast du BeginTrans aufgerufen?
-
Hmmm Hups
-
Oh sch... SOOORRYY - das hab ich in meinem Beispiel total vergessen
bitte nicht haun
-
Ok da du mich hier ja so zusagen durch gebrügelt hast damit ich das verstehe und da ich nur noch eine Frage habe lass ich dich in ruhe und frag dich ganz lieb
-
Falsche Antwort Tow-B
Du musst sagen, dass das volle Absicht war, wegen des Lerneffektes.
-
Wieso speichert der Compiler :
strSql = "Insert into tbl_Datenbank(Regal,Interpret, Titel, Rubrik, CD) values('NewSong.Shelf','NewSong.Interpreter','NewSong.Title','NewSong.Rubric','NewSong.CD')";
Nicht den Inhalt von z.B. NewSong.Shelf sondern NewSong.Shelf an sich ab???
Oder besser wie schaff ich es das er den Inhalt von NewSong.Shelf abspeichert??In NewSong.Shelf usw. stehen die eingetragenen Daten des Benutzers drin die dieser abspeichern will.
-
hehe
so un nu kommen wir dahin wo wir am anfang schon sein wollten
von welchem Typ ist NewSong.Shelf ?
Ist das ein struct mit CStrings?
in etwa so:struct song { CString Shelf; ...; };
Alles was beim CString zwischen den "" steht ist ein String. Wenn du nun eine Variable dahineinfügen willst hast du mal wieder mehrere Möglichkeiten (ist das nicht schön?
)
Am einfachsten isses wenn die Variablen auch CStrings sind, dann geht das ganz einfach mit dem +operator.
CString strText1, strText2, strErgebnis; strErgebnis = "Hier kommt Text1:" + strText1 + " und hier Text2: " + strText2 + ". So das wars"
Falls deine Variablen einen anderen Typ haben musst die Methode Format() des CStrings benutzen. Für ints zum Beispiel:
int nZahl=0; CString strText; strText.Format("Zahl: %i", zahl);
ob du wirklich richtig stehst..
edit: das Semikolon ist für den Lerneffekt
-
Um dir genau zu erklären was NewSong ist:
MusicPiece NewSong; NewSong.Interpreter = GetText( m_Interpreter ); //m_Interpreter.GetWindowText( temp ); //NewSong.Interpreter = LPCTSTR( temp ); NewSong.Title = GetText( m_Title ); NewSong.Rubric = GetText( m_Rubric ); NewSong.Shelf = GetText( m_Shelf ); NewSong.CD = GetText( m_CD );
MusikPiece ist diese Class:
class MusicPiece { public: std::string Interpreter; std::string Title; std::string Rubric; std::string CD; std::string Shelf; public: MusicPiece(); virtual ~MusicPiece(); }; typedef std::vector< MusicPiece > MusicPieceVector;
Also denke ich mal das ich mit format arbeiten muss
(Lernreffekt)
Danke nochmals für deine Hilfe, du hast mir ganz schön weiter geholfen
Hmm muss nur noch einen Fehler beheben dann sollte es funktionieren.
Fehlermeldung:
C:\Dokumente und Einstellungen\Dors\Desktop\C++ Projekte\Musik_Datenbank\MusicManagement.cpp(205) : error C2059: Syntaxfehler : ';'Hmm mal sehen was das sein könnte
Gruss Silver
-
Hi nochmal,
ich bin mal so frei und zitiere mich mal eben selber, hatte das nämlich vor ca 10 Postings schon geahntTow-B.de schrieb:
benutz mal CString und nicht std::string
Wenn du den std::string behalten willst geht das glaub ich mit:
CString text; std:string wert; text.Format("%s", wert);
Habe das jetzt aber selber noch nicht getestet
-
Hi
ich habe mittlerweile ne andere Lösung gefunden:void MusicManagement ::StoreDB(MusicPiece NewSong) { CDatabase music_data; CString SqlString; CString strErgebnis; // Open the database music_data.Open( "MUSIK" ); music_data.BeginTrans(); SqlString.Format( "%s,%s,%s,%s,%s", NewSong.Shelf.c_str(),NewSong.Interpreter.c_str(),NewSong.Title.c_str(),NewSong.Rubric.c_str(),NewSong.CD.c_str()); strErgebnis = "Insert into tbl_Datenbank"; strErgebnis += (LPCTSTR)SqlString; music_data.ExecuteSQL(strErgebnis); // SQL absenden music_data.CommitTrans(); // daten festschreiben music_data.Close(); }
Jetzt gibt der mir keinen Fehler mehr aus, sagt mir aber wenn ich auf den Speicherbutton drück : " Syntaxfehler in der INSERT INTO - Anweisung ".
Da häng ich zur Zeit fest, ich kann mit der Fehlermeldung nichts anfangen.
HINWEIS: Die Fehlermeldung kommt aks MessageBox der Compiler sagt das alles in Ordnung ist.