Access Datenbank mit Visual C++ Express Edition schreiben



  • Hallo,

    ich brauch hilfe. Und zwar muss ich in eine Access Datei schreiben, das ganze soll mit Visual C++ 2005 Express Edition gelöst werden. Es soll keine ODBC Treiber verwendet werden! Die Anwendung sollte möglichst ohne zusätzliche Komponenten laufen.

    Vielen Danke für Eure Mühe und Hilfe.

    Viele Grüße
    Hubibi



  • Hubibi schrieb:

    Und zwar muss ich in eine Access Datei schreiben, das ganze soll mit Visual C++ 2005 Express Edition gelöst werden. Es soll keine ODBC Treiber verwendet werden! Die Anwendung sollte möglichst ohne zusätzliche Komponenten laufen.

    Hmm... dann kannst Du nicht in eine Access Datenbank schreiben.

    Und wenn Du in C++/CLI postst, wirst Du zumindest das .NET-Framework mitgeben müssen. Und wenn Du es dann schon hast, dann könntest Du auch ADO.NET (System.Data.*) verwenden.



  • Egal, her damit.

    Wichtig ist momentan nur das kein ODBC verwendet wird.
    Gibt es da nicht diese Microsoft Jet Komponente die mit Office in der Regel mit installiert wird?





  • Wenn ich die Solution Datei öffnen will meckert er immer:

    Die Awendunge für xxxx.csproj ist nicht installiert!

    Außerdem finde ich in dem ganzen Ordner keine einzige .cpp bzw. .h Datei, fehlt da nicht was?

    mfg



  • Hubibi schrieb:

    Wenn ich die Solution Datei öffnen will meckert er immer:
    Die Awendunge für xxxx.csproj ist nicht installiert!
    Außerdem finde ich in dem ganzen Ordner keine einzige .cpp bzw. .h Datei, fehlt da nicht was?

    Ich gebs zu... das Beispiel war noch für die Beta 2... und läuft jetzt nicht mehr...
    Schau doch einfach auf Codeproject, da gibt es viele Beispiele für ADO.NET. Die meisten sind zwar in C#, sollten sich aber einfach auf C++/CLI ummappen lassen.



  • Mir scheint es so als würde man für all diese Tutorials die MFC brauchen, welche bei der Express Edition nicht dabei ist...



  • Hubibi schrieb:

    Mir scheint es so als würde man für all diese Tutorials die MFC brauchen, welche bei der Express Edition nicht dabei ist...

    Nein. Für ADO.NET brauchst Du nur das .NET-Framework und dann nimm die Klasse "OleDbConnection":
    http://msdn2.microsoft.com/en-US/library/system.data.oledb.oledbconnection.aspx



  • Ahhh, der letzte Post hat mir geholfen!

    Danke!



  • Ich habe nun folgenden Code

    // Bloß nicht die schreckliche Visual C++ Syntax vergessen
    			 //String ^MeinString = gcnew String("ichbinstring");
    
    			 // Datenbank Connection String, in Original Anwendung *.ini Datei lesen  
    			 String ^sDBConnectionString = gcnew String("");
    			 // Excel Connection String , www.connectionstrings.com			
    			 sDBConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\Programmieren\\XLSTestAnwendung\\patients.mdb;User Id=admin;Password=;"; 
    
    			 String ^sInsertCommand = gcnew String("INSERT INTO tblCaregiversDE");
    			 sInsertCommand = sInsertCommand+" (CaregiverID, Prefix, FirstName, LastName, Title, HospName, HospDepartment, Street, ZIPCode, City, Country, PhoneDaytime, PhoneMobile, PhoneEvening, EMail, Fax, CostCenter)";
    			 sInsertCommand = sInsertCommand+" VALUES ";
    			 sInsertCommand = sInsertCommand+"('12', 'Herr','"+name->Text+"', 'meier', '', 'UniKlinik', 'IT-Department', 'MeineSrt 70', '91058', 'Erlangen', 'Germany', '09131541121', '017745121', '0913151124', 'adfasdf@asdf.de', '', '')";
    			 // Objekt für die Datenbank Verbindung instanzieren
    			 OleDbConnection ^Connection = gcnew OleDbConnection(sDBConnectionString);
    			 OleDbCommand ^Command = gcnew OleDbCommand(sInsertCommand);
    			 Command->Connection=Connection;
    			 Connection->Open();
    			 Command->ExecuteNonQuery();
    			 Connection->Close();
    
    			 String ^sQueryCommand = gcnew String("SELECT LastName FROM tblCaregiversDE");
    			 Command->CommandText = sQueryCommand;
    			 //OleDbDataReader ^DataReader = gcnew OleDbDataReader();
    			 OleDbDataReader ^reader = gcnew OleDbDataReader(Command->ExecuteReader());
    
    		     while (reader->Read())
                 {
    				 MessageBox::Show(reader[0]->ToString());  
                 }
    			 reader->Close();
    

    Dabei möchte ich Daten am Schluss aus einer Access Datei lesen. Der Compiler meckert mir dabei allerdings folgendes an:
    e:\programmieren\xlstestanwendung\xlstestanwendung\Form1.h(122) : error C3673: "System::Data::OleDb::OleDbDataReader": Die Klasse hat keinen Kopierkonstruktor.

    in folgender Zeile: OleDbDataReader ^reader = gcnew OleDbDataReader(Command->ExecuteReader());

    Was mache ich falsch?

    Und überhaupt was ist den gcnew und das ^ für eine komische neue Syntax? Ich habe das ganze so verstanden, das gcnew den Speicher besser verwaltet und ungenutzte Objekte gleich wieder löscht usw., lieg ich da richig?

    Vielen Danke für Eure Hilfe
    Grüße und Gute Nacht Hubibi



  • Hubibi schrieb:

    in folgender Zeile: OleDbDataReader ^reader = gcnew OleDbDataReader(Command->ExecuteReader());

    Mach einfach:

    OleDbDataReader ^reader = Command->ExecuteReader();
    

    Hubibi schrieb:

    Und überhaupt was ist den gcnew und das ^ für eine komische neue Syntax? Ich habe das ganze so verstanden, das gcnew den Speicher besser verwaltet und ungenutzte Objekte gleich wieder löscht usw., lieg ich da richig?

    Du verwendest C++/CLI, das ist eine erweiterung von C++ und basiert auf den .NET-Framework. Das wiederum hat einen garbage-collector, welcher z.B. selber dafür sorgt, wann der Speicher wieder freigegeben werden kann.


Anmelden zum Antworten