brauche hilfe mit ADO und WinApi ohne MFC
-
Naja, was bekommst du denn für eine Fehlermeldung?
Und wie sieht die Tabelle aus mit der du das Versuchst? Und die Parameter die du an die Funktion mitgibst?
Grundsätzlich sieht der Code nämlich nicht falsch aus.Auf jeden Fall solltest du wenn du mit ADO arbeitest etwas SQL lernen, dann kannst du solche einfachen Inserts ganz einfach selbst schreiben...
-
mhm Die Fehlermeldeung er bringt eigentlich nur symbole und wenn ich sie in einen int wert umwandle bringt er eine zahl 1483280
das ist der wert den ich einfuegen wollte
data.AddItemToTable("Data","Password,Age,EmailAddress","'lime','29','Troy@hotmail.com'","User", "'spike'");
Achja die Tabelle:
Die Tabelle heist: Data
Feld 1 : User
Feld 2 : Passwort
Feld 3 : Age
Feld 4 : EmailAddressin der tabelle ist kein wert eingefuegt wurden
-
Hm, weiss nicht, sieht nicht falsch aus (abgesehen davon dass der Code etwas schrecklich ist, aber funktionieren müsste es eigentlich denke ich).
Du solltest aber auf jeden Fall den _com_error by Reference fangen, und den cast auf char* wegmachen. Du bekommst von _com_error::ErrorMessage entweder ein const char* oder ein const wchar_t* zurück -- damit sollte die DataException eigentlich glücklich sein.
Ansonsten, du bekommst mit _com_error::Description oft eine gute Beschreibung was nicht gepasst hat. Je nach Provider halt, SQL Server z.B. liefert da sehr hilfreiche Sachen.
Sonst probier doch einfach den Code Schritt für Schritt im Debugger durchzusteppen, und guck dir z.B. "commandString" an bevor das weggeschickt wird.
-
mhm hast recht probier mal alles durch? :xmas1:
-
Wenn Du schon low-Level arbeitest würde ich Dir OLEDB statt ADO empfehlen.
-
Verstehe nich ganz

-
Verstehe nich ganz

-
ADO ist eine ActiveX COntrol das auf OLEDB basiert. Du willst Win32 pur haben ohne MFC, dann kannst Du auch im Datenbank Zugriff einen Level tiefer gehen auf OLEDB.
Ich würde Dir in jedem Falle raten zumindest ATL zu verwenden, sonst wird der Umgang sowohl mit ADO als auch mit OLEDB zum K(r)ampf.
-
Du Scheinst dich da auszukennen winapi pur scheint mir momentan noch leicht hab mal mit MFC Herumexperimentiert aber hab total abgeloost, mit datenbank programmierung hab ich erst angefangen habs erst mit ner txt Db versucht doch mit der zeit brauchte ich doch ne etwas bessere version access schien mir da richtig da ich mfc nich besonders gut kann hab nur mal im internet nur ADO oder ODBC Beschreibung gefunden hast zum Tehma OLEDB nen guten tip bsp.: Buch
THX :xmas1:
ATL? Bin Beginner - Hab den begriff schon mehrmals gehoert aber weis nicht was es so recht ist,wie mann schon sagt programmieren lernt mann nicht im handumdrehen und ich versuch mein glueck darin, das erklaert vieleicht meinen schlechten ?oder Schrecklichen code, aussagen im internet zu folge braucht mann ohne vorkenntnisse mehr als 40 wochen die ich bei weiten ueberschritten hab , hab aber auch nicht immer zeit
thx
-
habe mir mal mühsehlich eine Funktion zusammengestellt, wo ich mein Prog mit einem SQL-Server verbinden kann. Sollte je nach DNS auch mit anderen DB's funktionieren.
Wobei sich mit der Datenbank zu verbinden ist noch das kleinste Übel dabei. Schwierig wird es, wenn es um Daten geht. Wenn du hier noch einen Bsp. brauchst - einfach melden.
Gruß, Winnie
PS: Für den Code übernehme ich natürlich keine Haftung :), da ich mir es selber "zusammengezimmert" habe (abgeschaut beim Logging vom ODBC und nur die wichtigsten genommen).
bool MyODBC::Connect(SQLCHAR * scDNS) { short iStrLen2; char sOutCnnString[1000]; SQLRETURN hr; // // Treiber // hr = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv); if (SqlSuccess(hr) != true) { MessageBox(mParentApp , "ODBC-Treiber - Fehler!", "ODBC" , MB_OK | MB_ICONERROR ); return false; } // // ODBC-Version // hr = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); if (SqlSuccess(hr) != true) { MessageBox(mParentApp , "ODBC-Version - Fehler!", "ODBC" , MB_OK | MB_ICONERROR ); Disconnect(); return false; } // // Connection // hr = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); if (SqlSuccess(hr) != true) { MessageBox(mParentApp , "ODBC-Connection - Fehler!", "ODBC" , MB_OK | MB_ICONERROR ); Disconnect(); return false; } // // Verbindung zur Datenbank // hr = SQLDriverConnect( hDbc, NULL, scDNS, SQL_NTS , (SQLCHAR *)sOutCnnString, 100 , &iStrLen2, SQL_DRIVER_COMPLETE ); if (SqlSuccess(hr) != true) { MessageBox(mParentApp , "Verbindung fehlgeschlagen!", "SQL-Server" , MB_OK | MB_ICONERROR ); Disconnect(); return false; } return true; } void MyOdbc::Disconnect() { if (hDbc != NULL) { SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); } if (hEnv != NULL) SQLFreeHandle(SQL_HANDLE_ENV, hEnv); }
-
Ascharan schrieb:
da ich mfc nich besonders gut kann hab nur mal im internet nur ADO oder ODBC Beschreibung gefunden hast zum Tehma OLEDB nen guten tip bsp.: Buch
Ich kenne nicht ein gutes Buch bzgl. DB-Zugriff und C++. Alle haben irgend einen Hau!
OLEDB and ODBC von Wood steht bei mir im Schrank.
Database prohgramming with VC6 in 21 Days von Robinson, steht auch hier rum. Aber gut? Na ja!Ascharan schrieb:
ATL? Bin Beginner - Hab den begriff schon mehrmals gehoert aber weis nicht was es so recht ist,wie mann schon sagt programmieren lernt mann nicht im handumdrehen und ich versuch mein glueck darin, das erklaert vieleicht meinen schlechten ?oder Schrecklichen code, aussagen im internet zu folge braucht mann ohne vorkenntnisse mehr als 40 wochen die ich bei weiten ueberschritten hab , hab aber auch nicht immer zeit
thxAls Beginner Dich auf templates wie ATL loszulassen ist natürlich heftig. Aber dennoch. Die Wizards machen viel.
Wenn man weiß wie es geht, ist es simpel und effektiv
:xmas1:
-
habe im msdn mal nach atl geschaut das hats in sich ,hey Winnie01 gutes angebot komme gern darauf zurueck werd heut mal alles durchdenken meld mich spaeter nochmal
-
@ Martin Richter
Kann das sein das bei der parameter uebergabe fehler sind zum einfuegen hat das bsp. den code gehabtData.AddItemToTable("Data","Password,Age,EmailAddress","'lime','29','Troy@hotmail.com'","User", "'spike'");