# Datenbankprogrammierung und C++



## marcel_t (28. August 2006)

Hallo,

ich habe bereits nach Themen gesucht die mir weiterhelfen könnten, doch leider nichts gefunden.

Ich arbeite für die Uni an einem Projekt.
Wir sollen ein Programm programmieren, in welchem man Cocktails eingeben kann, diese abgespeichert werden und der Nutzer des Programms diese abrufen kann. Natürlich wird das Programm wesentlich komplexer, mir geht es darum wie wir anfangen können.

Die Idee ist das Arbeiten mit einer Datenbank.
Die angewande Programmiersprache für dieses Projekt ist C++.

Wie gehe ich an dieses Projekt ran? Wie soll ich die Datenbank programmieren? Gibt es dafür Programme?
Kann mir jemand eine kleinen Einstieg geben, der vielleicht schon Erfahrungen damit hat oder sich auskennt Das nötige Wissen speziell für mein Projekt würde ich mir selber anlernen..

Viele Dank im Vorraus..

Mfg
 Marcel


----------



## Thomas Kuse (29. August 2006)

Welche Datenbank, welches Betriebssystem, ist schon ein C++ Framework (MFC, Qt, xWidgets ... ) ausgesucht?


----------



## Navy (29. August 2006)

Als erstes Lastenheft, dann Pflichtenheft, dann Implementation.

Das hilft Euch einen Überblick über Eure Arbeit zu bekommen. Gerade das Lastenheft ist wichtig um zu wissen was ihr braucht und was nicht. Im Pflichtenheft kommen dann Konzepte, Möglichkeiten und vor allem die Datenmoddelierung dran. Ihr werdet sehen, daß das Programmieren später "nur" das Handwerk ist.


----------



## marcel_t (31. August 2006)

Das mit den Heften werden wir so machen, da es uns auch vorgegeben ist ein Pflichtenheft zu führen.

@Thomas Kuse:
Welche Datenbank würdest du denn empfehlen?!
Microsoft Windows XP ist das Betriebssystem.
C++ Framework sagt mir leider nichts. Was ist die Bedeutung davon und wozu brauchen wir das?

Gibt es denn irgendwo eine Einleitung über C++ und Datenbankprogrammierung Habe nichts gefunden..


----------



## CSANecromancer (31. August 2006)

marcel_t hat gesagt.:
			
		

> @Thomas Kuse:
> Welche Datenbank würdest du denn empfehlen?!
> Microsoft Windows XP ist das Betriebssystem.
> C++ Framework sagt mir leider nichts. Was ist die Bedeutung davon und wozu brauchen wir das?



Ich bin mal so frei und antworte auch ein wenig. 

Framework ist die Bibliothek, die verwendet wird, um unter Windows etwas anzuzeigen. Es geht nicht ganz einfach, dem Betriebssystem zu sagen "Ich will jetzt ein Fenster haben und da soll was rein". Dafür sind eine Menge Aufrufe an das Betriebssystem notwendig. Um genau diese immer und immer wiederkehrenden Aufgaben zu erleichtern (und viele andere) sind Frameworks eingeführt worden. Hier ein paar der gängigsten:

MFC: Stammt von Microsoft und wird u.a. verwendet in Visual Basic, Visual C++, Delphi
.net: Stammt auch von Microsoft und wird von vielen als die heisseste Erfindung seit Brot in Scheiben gehandelt. Wird vornehmlich in C# und Delphi .net verwendet.
VCL: Ein Framework von Borland. Ist etwas einfacher zu bedienen und programmieren als die MFC, liegt aber nicht so nahe am Betriebssystem.
qt: Framework, mit dem (auch) gut unter Linux programmiert werden kann.

Mit den Rahmenbedingungen C++, Windows und "kleines Projekt" würde ich als Datenbank sogar so weit gehen und MS Access empfehlen, da dir meisten dir wohl zu Visual C++ raten werden. 
Unter der VCL ist andererseits das Arbeiten mit Paradox-DBs ganz kuschelig und mit Delphi .net habe ich momentan im Hintergrund eine Oracle 10 XE am Laufen.

Meiner Meinung nach solltest du dich erst einmal auf folgende Punkte festlegen:
- Framework (siehe dazu oben)
- IDE: Visual Studio, Borland Studio, Eclipse oder etwas ganz anderes?
- Datenbank: MS Access, MySQL, Paradox, Oracle?

Wenn du diese Punkte geklärt hast, *dann* kannst du anfangen, gezielt nach Tutorials zu suchen. Aber ich fürchte eine Anleitung á la "So programmiert man in jedem Betriebssystem mit C++ eine Ansteuerung aller möglichen Datenbanken" wirst du im Netz wirklich nicht finden. Dagegen wurde ich mit der Suche nach "Wie binde ich eine Oracle DB mittels ADO-Komponenten innerhalb von Delphi .net ein?" durchaus fündig (ADO-Komponenten sind Teile des VCL-Frameworks, das nur so am Rande  ).


----------



## marcel_t (31. August 2006)

Vielen Dank für diesen Einstieg. Er hat mir gut weitergeholfen. Du darfst gerne so frei sein und mir ein weiteres mal helfen.. 

Nun meine Frage: Wie binde ich eine Ms Access DB mittels Komponenten innerhalb von Visual Studio 2005 ein? und welche Komponente ist empfehlenswert hierfür?


----------



## CSANecromancer (1. September 2006)

marcel_t hat gesagt.:
			
		

> Vielen Dank für diesen Einstieg. Er hat mir gut weitergeholfen.


Gern geschehen. 



			
				marcel_t hat gesagt.:
			
		

> Du darfst gerne so frei sein und mir ein weiteres mal helfen..


Mal schauen.



			
				marcel_t hat gesagt.:
			
		

> Nun meine Frage: Wie binde ich eine Ms Access DB mittels Komponenten innerhalb von Visual Studio 2005 ein? und welche Komponente ist empfehlenswert hierfür?


Hrgn. Genau ein Treffer. Ich muß dir leider gestehen, daß ich es, wann immer es sich in irgendeiner Weise bewerkstelligen lässt, einen Riesenbogen um die MS-Tools mache. Das hat nichts mit einem objektiven "MS ist Rotz" zu tun sondern rein mit subjektiven Vorlieben. Ich mag weder MFC, .net noch die Visual-Dinger von MS. Irgendwo hier fliegt noch ein Projekt in MS Visual-Format herum, das ist allerdings fertig und ich muß es nur warten und nicht neu basteln.

Von daher kann ich dir da leider keine detaillierte Hilfe anbieten, andere hier im Forum aber garantiert. Aber ich habe mir gerade mal den Spaß gemacht, mir die Komponenten angesehen und mit den VCL-Dingern verglichen, die ich gerade benutze. Ausgehend von den nachfolgend beschriebenen Schritten findest du garantiert genügend Beispiele, Tutorials und auch Sourcefragmente, die dir weiterhelfen können.

*EINE BITTE AN ALLE MFC-CRACKS: Wenn ich hier groben Unfug schreibe, bitte schnellstmöglich korrigieren! Danke!  *

1. Die Datenbank (DB) muß angelegt werden. Da ich hier kein Access habe, kann ich diesen Schritt leider bereits nicht nachvollziehen, aber die _Theorie_ dürfte die gleiche sein, wie wenn ich eine MySQL- oder Oracle-DB aufsetze (ja, ich weiß, daß sich der Setup dieser drei DBs grundlegend voneinander unterscheidet. Es geht ja auch nur darum, daß einfach mal eine DB hingeklatscht gehört.).

2. In der DB sollten mal (wenigstens grob) die entsprechenden Tabellen angelegt werden. Vorgehensweise dazu kann der Access-Hilfe entnommen werden.

3. In deinem Formular (ich hoffe doch, daß du mit Formularen arbeitest, sonst schreibe ich das hier umsonst  ) brauchst du ein paar Komponenten, als welche ich jetzt da mal auf Anhieb sehe:

- OleDbConnection: Mit diesem Teil baust du erst einmal eine Verbindung zwischen deinem Programm und der Datenbank auf. Ich kann dir aber leider nicht sagen, ob du dazu einen Connectionstring aufbauen musst oder ob das Studio schon fix und fertig entsprechende Konfigurationen für Access kennt.

- OleDbDataAdapter: Ich zitiere aus der Hilfe:


> The OleDbDataAdapter serves as a bridge between a DataSet and data source for retrieving and saving data. The OleDbDataAdapter provides this bridge by using Fill to load data from the data source into the DataSet, and using Update to send changes made in the DataSet back to the data source.


Zu Erläuterung: Das DataSet ist einfach ein Speicherbereich, in dem die Daten, die derzeit von deinem letzten DB-Kommando zurückgegeben wurde, abgelegt werden. Wenn du also z.B. ein DBGrid auf das Formular legen willst und darin immer schön brav die DB-Daten anzeigen willst, dann verknüpfst du das DBGrid nie direkt mit der Datenbank sondern mit dem DataSet. Und das DataSet wird dann eben von dir gefüllt, wie du es brauchst.

-OleDbCommand: Mit dieser Komponente kannst du der DB Befehle erteilen, z.B. SQL-Statements. Soweit ich das jetzt mal überflogen habe, landen die Ergebnisdaten der Statements in einem DataSet. Ich kann dir aber ad hoc nicht sagen, ob die DbCommand-Komponente schon ein eigenes DataSet mitbringt oder erst noch mit einem verknüpft werden muß. Aber das kann dir sicher die MS Hilfe sagen.   

Bei mir in der Komponentenleiste habe ich diese drei Komponenten noch in vier verschiedenen Ausprägungen:
- OleDb*
- SQL*
- Odbc*
- Oracle*

Diese dienen einfach nur zur unterschiedlichen Anbindung verschiedener Datenbanken an dein Program. Bekanntlich führen viele Wege nach Rom. (Tip: Mit einer Diskussion OLE oder ODBC kannst du oft einen gleichen Glaubenskrieg auslösen wie mit der Frage "Windows oder Linux?" :suspekt: )
Dazu habe ich noch (mit 30 Sekunden Suche ;-] ) diesen Link gefunden:
http://www.aspheute.com/artikel/20000419.htm

Die Oracle-Komponenen habe ich halt drauf, weil ich hier (Überraschung!) mit dieser DB arbeite und die Dinger von der Oracle-Installation reingesetzt wurden.

So, mal schauen, ob dir das auch weiter geholfen hat.


----------



## ByeBye 156083 (13. September 2006)

Hi, ich hab ein aehnliches Problem und schliesse mich hier einfach mal an. Weil doppelte Threads muessen ja nicht sein  Bis jetzt steht hier ja schon viel Interessantes.

Bin gerade dabei mir eine Anwendung mit DB-Unterstuetzung zu basteln, nur scheitere ich an diversen Problemen.

Verwendung finden u.a. *MS VS 2005* und* MFC*. Die DB soll * MySQL* ueber *ODBC* werden. Habe apache + mysql lokal installiert, server ist also localhost.

Folgende Probleme sind aufgetreten:

*1.* Der ODBC-Administrator von Windows XP (x64) zeigt mir nur 2 SQL Treiber an. Der MySQL-Connector ist installiert, in Version 3.51 und die 5er Beta. Auch noch diverse andere Treiber, die aber nicht relevant sind. Auch nach dem Hinzufuegen diverser DSN's zeigt er mir nur die beiden SQL-Verbindungen an. Woran kann das liegen? Hat das etwas mit den nachfolgenden Problemen zu tun ?

Das Kuriose dazu folgt jetzt:
*2.* Bei der Projekterstellung im VS zeigt er mir alle installierten Treiber an, auch jene, die in der Win-ODBC-Verwaltung nicht angezeigt werden (s.o.).
Im Server-Explorer von VS habe ich auch schon die DB verbunden, hat einwandfrei funktioniert und laeuft auch.
Sie sind also installiert.

*3.* Ich will ein normales MFC-Projekt anlegen, mit einer DSN.

Hier die MFC-Einstellungen, die ich vornehmen will:
- SDI
- MFC-Standard
- shared DLL
- keine Verbunddokumente
- Datenbankansicht mit Dateiunterstuetzung > ODBC > Dynaset
- Datenquelle > Localhost-MySQL

Ich habe im Projektwizard eine neue System-DSN erstellt (machine data source) , die Verbindungstest funktionieren auch einwandfrei.
PROBLEM: Beim Klicken auf Weiter bekomme ich folgende Fehlermeldung:
"_Sie muessen eine Datenquelle angeben, wenn die Option Datenbankansicht gewaehlt ist._"
Die Datenquelle ist gewaehlt, der Test hat funktioniert, VS hat die Verbindung schon selber hergestellt, per PHP klappt der Zugriff.

Also bei dem 3. Problem seh ich am wenigsten durch.
Habe ich etwas uebersehen? Fehler gemacht? Ich lass mich gerne belehren  ...
Zur Not verwende ich auch ne andere DB, aber kein Access ...
achja,  ... hab ich schon tw. gemacht 

Danke schonmal ...
ps: soll ich doch nen eigenen Thread erstellen ?


----------

