in c++ verbindung zu einer Access 2007 Datenbank herstellen
-
Hallo zusammen,
ich muss in meinem Programm eine Verbindung zu einer Access-Datenbank herstellen und hab da gewissen Probleme bei.
Ich habe bereits von Microsoft ein Code-Beispiel gefunden und dies funktioniert soweit auch allerdings kann ich somit nur Daten abfragen.
Daher wollte ich fragen, ob jemand einen guten Link hat wo dies erklärt wird oder ihr mir helfen könnt meinen bisherigen Code zu erweitern, so dass ich auch INSERT und UPDATE befehle ausführen kann.Gruß Lukas
Hier mein Code von dem ich oben geschrieben habe.
Leider habe ich auch Probleme diesen 100%ig zu verstehen daher ist für mich die Abänderung auch etwas schwierig.
Aufruf der Funktion in der main....#import <C:\Program Files\Common Files\System\ado\msado15.dll> \ rename( "EOF", "AdoNSEOF" ) #include <iostream> #include <tchar.h> using namespace std; // Data Access Method used in this sample const char* DAM = "ADO"; // Connection string for ADO _bstr_t bstrConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\geraete1.accdb;"; int vSelect() { // Initialize the Component Object Module Library (COM) HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { cout<<DAM<<": Failed to CoInitialize() COM."<<endl; return hr; } // COM errors are handled by C++ try/catch block try { ADODB::_ConnectionPtr pConn("ADODB.Connection"); hr = pConn->Open(bstrConnect, "admin", "", ADODB::adConnectUnspecified); if (SUCCEEDED(hr)) { cout<<DAM<<": Successfully connected to database. Data source name:\n " <<pConn->GetConnectionString()<<endl; // Prepare SQL query. _bstr_t query = "SELECT Lagerliste.[Geräte-Nr], Lagerliste.[Beschreibung] FROM Lagerliste;"; cout<<DAM<<": SQL query:\n "<<query<<endl; // Excecute the query and create a record set ADODB::_RecordsetPtr pRS("ADODB.Recordset"); hr = pRS->Open(query, _variant_t((IDispatch *) pConn, true), ADODB::adOpenUnspecified, ADODB::adLockUnspecified, ADODB::adCmdText); if (SUCCEEDED(hr)) { cout<<DAM<<": Retrieve schema info for the given result set: "<<endl; ADODB::Fields* pFields = NULL; hr = pRS->get_Fields(&pFields); if (SUCCEEDED(hr) && pFields && pFields->GetCount() > 0) { for (long nIndex=0; nIndex < pFields->GetCount(); nIndex++) { cout<<" | "<<_bstr_t(pFields->GetItem(nIndex)->GetName()); } cout<<endl; } else { cout<<DAM<<": Error: Number of fields in the result set is 0."<<endl; } cout<<DAM<<": Fetch the actual data: "<<endl; int rowCount = 0; while (!pRS->AdoNSEOF) { for (long nIndex=0; nIndex < pFields->GetCount(); nIndex++) { cout<<" | "<<_bstr_t(pFields->GetItem(nIndex)->GetValue()); } cout<<endl; pRS->MoveNext(); rowCount++; } cout<<DAM<<": Total Row Count: "<<rowCount<<endl; } pRS->Close(); pConn->Close(); cout<<DAM<<": Cleanup. Done."<<endl; } else { cout<<DAM<<": Unable to connect to data source:"<<bstrConnect<<endl; } } catch(_com_error& e) { cout<<DAM<<": _com_error: "<<e.Description()<<endl; } // Release the Component Object Module Library (COM) CoUninitialize(); return hr; }
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi Luke@Tal,
wenn Du C++-Builder verwendest kannst Du die Komponenten aus dbGo nehmen, und ansonsten würde ich Dir das Buch ADO-Programmierung von David Sceppa empfehlen (Basiert auf VB).
Ich selber habe mir auch sehr mit ADO und Delphi von Andreas Kosch geholfen, da ich mit Delphi arbeite. Was er schreibt ist recht weiterhelfend und im C++Builder genau so anzuwenden.
Wenn Du mit anderen Umgebungen arbeitest, schau doch mal ob es was zu dbGo vergleichbares gibt.
Vielleicht kannst Du Dir auch irgendwo den Kosch ausleihen, der beschreibt nicht nur wie es mit dbGo geht, sondern auch wie man mit den darunter liegenden MS-Objekten arbeitet.Gruß Mümmel