# [C++] Datenbanken



## mer (19. Januar 2011)

Hallo,

Ich habe ein Projekt in dem ich mit rund 100 Daten von 100 Personen arbeiten muss, also speichern lesen, etc. Das schreit nach SQL. Aus diesem Grund hab ich mir MySQL angeschaut. Das Problem ist nur, dass es mir nicht gelungen ist, eine Datenbank mit VC zu erstellen. Außerhalb von VC ist es mir auch nicht gelungen, da sich CMD-Fenster direkt schließen, wenn sie nicht ins Internet dürfen (was sie nicht sollen, Da das Programm nur die Datenbank von der Festplatte lesen soll)

Hier die Frage:
Welche Version von MySQL braucht man für eine Datenbank die nur auf dem EINEN Computer arbeiten soll. Außerdem wäre ein Link zu einem Tutorial der die Verwaltung einer Datenbank mit C++ erklären wurde sehr hilfreich.

Entschuldigung für die vielen Fragen in meinem ersten Beitrag und Danke für jede Antwort.


----------



## ComFreek (19. Januar 2011)

Du musst dir zuerst den MySQL Server downloaden und dann einen sogenannten Connector entweder für C oder C++.

Ein Tutorial habe ich gerade nicht auf Lager aber du kannst ja mal nach "MySQL C++ Tutorial" suchen.


----------



## MCoder (19. Januar 2011)

Hallo,

also für die geringe Datenmenge scheint mir ein Kaliber wie MySQL und Co. etwas überdimensioniert. Schaue dir doch mal SQLite an. Das ist eine sogenannte Embedded Database, d.h. du kannst die Datenbankengine direkt als Sourcecode in deinem Projekt einbinden. Der Vorteil: Damit das Ganze lauffähig ist, benötigst du nur deine Exe und die Datenbankdatei und keinen Datenbankserver nebst entsprechenden Treibern für den Client.

Gruß
MCoder


----------



## mer (19. Januar 2011)

Hab ich schon alles gemacht. Welche Einstellungen brauch ich im VC 2008 und welche Dateien muss ich includieren. Zuletzt noch die Frage, wo ich die C++ Befehle finde mit denen ich auf die Datenbank zugreifen kann, bzw. erstellen kann?

Danke im voraus.


@MCoder: Ist nur ein vorläufiges programm. Deswegen ist es zwar noch überdimensioniert, aber macht doch Sinn.


----------



## ComFreek (20. Januar 2011)

Du müsstest die DLL oder statische Bibliothek deinem Programm hinzufügen bzw. mitlinken.
Müsstest du irgendwo unter Einstellungen im VC zu finden (benutze VC nicht).
Außerdem brauchst du noch die Headerdatei, in der die Funktionen der DLL definiert sind, diese bindest du per #include ein.


----------



## mer (23. Januar 2011)

Ich habe zuletzt versucht meine probleme selbst zu lösen; leider ohne Erfolg.

Jetzt versuch ich den folgenden Befehl zum laufen zu bringen:

```
MYSQL* mysql;
    mysql = mysql_init(NULL);
```
In der Headerdatei stehen:

```
#pragma comment(lib, "libmysql.lib") 
#include <winsock.h> 
#include <winsock2.h>
#include <C:\Program Files\MySQL\MySQL Server 5.5\include\mysql.h>
```
Bei den zusätzlichen Abhängigkeiten hab ich:

"C:\Program Files\MySQL\MySQL Server 5.5\lib\libmysql.lib"
"C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\debug\mysqlcppconn.lib"

Trotzdem kommt die Fehlermeldung:


```
1>SAS_ProgrammDlg.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_init@4" in Funktion ""protected: virtual void __thiscall CSAS_ProgrammDlg::DoDataExchange(class CDataExchange *)" (?DoDataExchange@CSAS_ProgrammDlg@@MAEXPAVCDataExchange@@@Z)".
```

Kann mir jemand sagen, welche Bibliotheken ich noch hinzufügen, welche Headerdateien und / oder welche Befehle ich nutzten sollte muss.

Danke im Voraus.


----------



## random-access (24. Januar 2011)

Hallo mer,

hast du die debug oder die release erstellt?

Gruß random.


----------



## mer (24. Januar 2011)

Bei beiden funktioniert es nicht. Die Fehlermeldung kommt vom Debug. Beim Release kommt eine andere Fehlermeldung, aber im Prinzip mit dem gleichen Inhalt.


----------



## random-access (24. Januar 2011)

Binde mal die Debug libs (eigentlich immer "*d.libraries") ein wenn du im debug startest und im release die release, also die ohne 'd' am ende.

Gruß random.


----------



## mer (24. Januar 2011)

Entweder ich bin blind, oder ich finde die Libraries nicht. Das einzige was ich finde sind Debug-Ordner mit *.lib, deren Einbindung aber keinen Effekt bringen.

Was mich aber wundert, ist dass ich keine Header-Datei vom Connector includen muss (bzw. kann, bei denen ich es ausprobiert habe)

mer


----------



## random-access (25. Januar 2011)

Hallo mer,

normalerweise findest du die zu inkludierenden Header in "\sql\MySQL Server <Version>\include\mysql.h"

Wenn dieses Verzeichnis nicht existiert und du nicht an einen anderen Ort installiert hast, hast du warscheinlich eine Version installiert, in der keine Sourcen vorhanden sind.

Gruß, random.


----------



## mer (25. Januar 2011)

mer hat gesagt.:


> In der Headerdatei stehen:
> 
> ```
> #pragma comment(lib, "libmysql.lib")
> ...


Diese Headerdatei habe ich ja includiert, aber es funktioniert trotzdem nicht. Der Ordner und die Datei gibt es auch. Somit sollte das nicht das Problem sein.


----------



## ComFreek (25. Januar 2011)

Ich denke, dass es immer noch ein Problem mit der Library ist.
Hast du zufällig XAMPP? Denn wenn ich die Lib vom Ordner [xampp]\mysql\lib\ inkludiere funktioniert es bei mir.


----------



## mer (25. Januar 2011)

Ja, mit XAMPP funktioniert es einwandfrei. Heute oder Morgen probier ich dann den ein oder anderen Befehl aus und hoffentlich stürz ich dann nicht wieder in ein solches Loch.

Danke ComFreek und random-access für eure Hilfe.
mer


----------



## mer (25. Januar 2011)

Da dachte ich ich hätte keine Probleme mehr, aber folgendes ist noch geblieben.

Im Internet finde ich Beschreibungen wie man mit MySQL++ oder anderen ähnlichen Erweiterungen MySQL in C++ verwenden kann.

Sind die befehle irgendwo aufgelistet? (in Headerdateien bin ich noch nicht fündig geworden)
Kann man die Orginalbefehle mit einem Präfix verwenden?

Danke im Voraus.


----------



## random-access (26. Januar 2011)

Hallo mer,

normalerweise liefern APIs ihre Schnittstellenbeschreibung in Form einer Dokumentation mit anstatt im Sourcecode.

Falls keine dabei sein sollte würde ich dir schlichtweg eine andere API empfehlen 

Habe sehr gute Erfahrungen mit Qt gemacht. Das würdest du hier Qt-Download finden, es gibt zusätzlich dazu noch eine Visual Studio Integration.

Das einzig problematische nach der installation ist das du die qmysql.lib für debug und release in Abhängigkeit zu deiner MYSQL-Installation erstellen musst.

Dokumentation und Softwareumfang sind exzellent, jedoch ziemlich sicher zu viel für deine Anforderungen.

Jedoch wieder zurück zu deiner eignetlichen Frage:
mysql++ Referenz
mysql++ Tutorial

Gruß, random.


----------



## ComFreek (26. Januar 2011)

Ich denke, dass das Nutzen von Qt nur wegen eines MySQL-Interfaces sich einfach nicht lohnt.



> normalerweise liefern APIs ihre Schnittstellenbeschreibung in Form einer Dokumentation mit anstatt im Sourcecode.


Vielleicht meint er Beispielcode neben der API selbst.


----------



## random-access (26. Januar 2011)

ComFreek hat gesagt.:


> Ich denke, dass das Nutzen von Qt nur wegen eines MySQL-Interfaces sich einfach nicht lohnt.


 


random-access hat gesagt.:


> Dokumentation und Softwareumfang sind exzellent, jedoch ziemlich sicher zu viel für deine Anforderungen.





Beispiel Code gibts im UserManual bei dem oben geposteten "mysql++ Referenz"-Link.

Gruß, random.


----------

