C++ und MySQL
lima-city → Forum → Programmiersprachen → C/C++ und D
abfrage
ahnung
anleitung
code
datei
datenbank
einbinden
file
http
installation
layout
modeln
not
problem
show
treiber
type
url
verbindung
windows
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also am besten wäre es per Post was an ein PHP- Script zu schicken, da man ein Computerprogramm leicht mit nem assambler durchsuchen kann und es wäre doch peinlich dort dein Login für die Datenbank zu finden.
Also der C++ Builder von Codegear kann das glaube einwandfrei, ist in erster Linie auch dafür entwickelt worden. -
An ein PHP-Skript schicken? Das ist doch Schwachsinn:
1. Du musst einen Webserver im Hintergrund laufen haben
2. PHP ist selbst in C (oder in C++) geschrieben
3. Das braucht viel zu viel Leistung -
Ich hatte das damals mit dem Borland C++-Builder über ein Datagrid und ein Query gemacht... aber ich glaube, das waren Borland-Eigene Bibliotheken... lief aber super (hatte diese Paradox7 Tabellen gebaut... lief schön schnell bis zu einer bestimmten größe...)
und natürlich brauch man eine schnittstelle oder socket... -
Hallo Leute,
ich habe ungefähr das selbe Problem wie stef264. Allerdings nutze ich qt und möchte daher nicht noch irgendwelche Bibliotheken hinzufügen, das Qt ja eine mächtige ist.
Also, habe ich in den Referenzen nachgeschaut und momentan habe ich dies erlernt:
#include <Qt/QtSql> #include <QtGui> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; QSqlDatabase db = QSqlDatabase::database("QMYSQL"); db.setHostName("mysql.lima-city.de"); db.setDatabaseName("meine Database"); db.setPassword("mein_passwort"); db.setUserName("USER185443"); db.setPort(3306); db.setConnectOptions(/*"weiß nicht welche!"*/.); if(db.open()) { QSqlQueryModel *model = new QSqlQueryModel; model->setQuery("SELECT user_pass, ID FROM wp_user"); model->setHeaderData(0, Qt::Horizontal, QMainWindow::tr("Name")); model->setHeaderData(1, Qt::Horizontal, QMainWindow::tr("MD5-Passwort")); QTableView *view = new QTableView; view->setModel(model); view->show(); } w.show(); return a.exec(); }
Ja ich habe schon in den Code geschrieben, dass ich keine Ahnung habe, welche Verbindungsoptionen ich benötige, deshalb habe ich sie Auf default gestellt. Es liegt aber schon an meiner der Verbindung, das sagt zumindest meine if-Abfrage, und nicht an dem QSqlQueryModel.
Ich weiß aber nicht, ob es daran liegt, oder an etwas anderem.
Könnte eure Hilfe gebrauchen.
grüße,
spuglisi
EDIT:
Ich habe festgestellt, dass der Treiber nicht geladen werden kann. Muss ich den jetzt erst installieren? Benutze Ubuntu.
Beitrag zuletzt geändert: 18.9.2010 19:04:22 von spuglisi -
spuglisi schrieb:Ja ich habe schon in den Code geschrieben, dass ich keine Ahnung habe, welche Verbindungsoptionen ich benötige, deshalb habe ich sie Auf default gestellt. Es liegt aber schon an meiner der Verbindung, das sagt zumindest meine if-Abfrage, und nicht an dem QSqlQueryModel.
Ich weiß aber nicht, ob es daran liegt, oder an etwas anderem.
EDIT:
Ich habe festgestellt, dass der Treiber nicht geladen werden kann. Muss ich den jetzt erst installieren? Benutze Ubuntu.
Hi spuglisi,
der Treiber für MySql musst du dir erst runterladen. Musst dir halt denjenigen für Linux besorgen.
Qt liefert jedoch standardmäßig die Treiber für SQLight mit (abgespeckte Version von MySQL, die für die
meisten Anwendungen locker ausreicht). Da muss man nix noch extra installieren.
Für die Anbindung verschiedener Datenbanken unter den verschiedenen Betriebssystemen findest du
in der Qt Reference (ist natürlich auf Englisch, da kommt man bei Qt nicht drumherum!) -> hier
Speziell solltest du dir dort das Kapitel How to Build the QMYSQL Plugin on Unix and Mac OS X. Dort ist eine Kurzbeschreibung zu finden, wie du den Treiber einmalig installieren kannst und ihn dann immer wieder mit Qt verwenden kannst.
Ich habs aber bisher nur einmal unter Windows installiert... ich musste einwenig herumprobieren bis es geklappt hat... aber das schaffst du sicherlich auch mit der Kurzbeschreibung... viel Glück.^^
Ja ich habe schon in den Code geschrieben, dass ich keine Ahnung habe, welche Verbindungsoptionen ich benötige, deshalb habe ich sie Auf default gestellt.
Kannst du normalerweise auch erstmal weglassen. Die Verbindung dürfte auch so schon aufgebaut werden. Am Besten du schaust mal in die Qt Dokumentation für die QSqlDatabase-Klasse rein. Da findest du schon eine Menge Antworten drin. Siehe hier.
PS: Kleiner Tipp von mir: diese Qt-Doku ist dein größter Freund. Dort findest du für solche Anwendungen wie du sie brauchst die meisten Antworten! (--> Englisch-Kenntnisse erforderlich! Unbedingt üben, sonst kommt man nicht weiter.) Übrigens lernt man schon Englisch, in dem man die Wörter, die man in der Doku nicht versteht mal nachschlägt... (Mach ich auch immer so )
Beitrag zuletzt geändert: 18.9.2010 20:19:06 von tangoal -
Hm.wenn ich die Anleitung befolge, kommen immer sehr viele Fehlermeldungen:
user@ubuntu:~/qt/qt/src/plugins/sqldrivers/oci$ qmake "INCLUDEPATH+=$ORACLE_HOME/rdbms/public $ORACLE_HOME/rdbms/demo" "LIBS+=-L$ORACLE_HOME/lib -lclntsh -lwtc9" oci.pro user@ubuntu:~/qt/qt/src/plugins/sqldrivers/oci$ make g++ -c -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtSql -I/usr/include/qt4 -I/rdbms/public -I/rdbms/demo -I. -o main.o main.cpp main.cpp:42:30: error: qsqldriverplugin.h: No such file or directory main.cpp:43:25: error: qstringlist.h: No such file or directory In file included from main.cpp:44: ../../../sql/drivers/oci/qsql_oci.h:45:30: error: QtSql/qsqlresult.h: No such file or directory ../../../sql/drivers/oci/qsql_oci.h:46:30: error: QtSql/qsqldriver.h: No such file or directory ../../../sql/drivers/oci/qsql_oci.h:47:46: error: QtSql/private/qsqlcachedresult_p.h: No such file or directory In file included from main.cpp:44: ../../../sql/drivers/oci/qsql_oci.h:55: error: ‘QT_BEGIN_HEADER’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:68: error: expected class-name before ‘{’ token ../../../sql/drivers/oci/qsql_oci.h:73: error: ISO C++ forbids declaration of ‘QOCIDriver’ with no type ../../../sql/drivers/oci/qsql_oci.h:73: error: expected ‘,’ or ‘...’ before ‘*’ token ../../../sql/drivers/oci/qsql_oci.h:75: error: ISO C++ forbids declaration of ‘QString’ with no type ../../../sql/drivers/oci/qsql_oci.h:75: error: expected ‘,’ or ‘...’ before ‘&’ token ../../../sql/drivers/oci/qsql_oci.h:77: error: ‘QVariant’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:80: error: ‘ValueCache’ has not been declared ../../../sql/drivers/oci/qsql_oci.h:81: error: ISO C++ forbids declaration of ‘QString’ with no type ../../../sql/drivers/oci/qsql_oci.h:81: error: expected ‘,’ or ‘...’ before ‘&’ token ../../../sql/drivers/oci/qsql_oci.h:84: error: ‘QSqlRecord’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:85: error: ‘QVariant’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:93: error: expected class-name before ‘{’ token ../../../sql/drivers/oci/qsql_oci.h:94: error: ISO C++ forbids declaration of ‘Q_OBJECT’ with no type ../../../sql/drivers/oci/qsql_oci.h:95: error: expected ‘;’ before ‘friend’ ../../../sql/drivers/oci/qsql_oci.h:98: error: expected ‘)’ before ‘*’ token ../../../sql/drivers/oci/qsql_oci.h:99: error: ‘QObject’ has not been declared ../../../sql/drivers/oci/qsql_oci.h:101: error: ‘DriverFeature’ has not been declared ../../../sql/drivers/oci/qsql_oci.h:102: error: ISO C++ forbids declaration of ‘QString’ with no type ../../../sql/drivers/oci/qsql_oci.h:102: error: expected ‘,’ or ‘...’ before ‘&’ token ../../../sql/drivers/oci/qsql_oci.h:109: error: ISO C++ forbids declaration of ‘QSqlResult’ with no type ../../../sql/drivers/oci/qsql_oci.h:109: error: expected ‘;’ before ‘*’ token ../../../sql/drivers/oci/qsql_oci.h:110: error: ‘QStringList’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:111: error: ‘QSqlRecord’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:112: error: ‘QSqlIndex’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:113: error: ‘QString’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:115: error: ‘QVariant’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:116: error: ‘QString’ does not name a type ../../../sql/drivers/oci/qsql_oci.h:126: error: ‘QT_END_NAMESPACE’ does not name a type main.cpp:57: error: ‘QOCIDriverPlugin’ has not been declared main.cpp:57: error: ISO C++ forbids declaration of ‘QOCIDriverPlugin’ with no type main.cpp: In function ‘int QOCIDriverPlugin()’: main.cpp:58: error: only constructors take base initializers main.cpp:60: warning: no return statement in function returning non-void main.cpp: At global scope: main.cpp:62: error: expected constructor, destructor, or type conversion before ‘*’ token make: *** [main.o] Fehler 1
Anscheinend ist die Makefile-Datei nicht richtig konfiguriert, weil make nicht mal QString kennt!
hm. woran kann das liegen? Habe ich was vergessen?
EDIT:
OOPS, falscheAnleitung gelesen...
Nun gut, ich habs jetzt auch mal unter Windows probiert, allerdings gibt es da noch probleme, vor allem mit dem nmake, der meckert, dass es keine g++-exe gibt, da hat der ja auch recht, denn diese heißt mingw32-g++. Gbit es nicht so ne shell von mingw? (Also nicht nur der Compiler) das würde mir bestimmt einiges erleichtern.
Beitrag zuletzt geändert: 19.9.2010 11:36:31 von spuglisi -
spuglisi schrieb:Nun gut, ich habs jetzt auch mal unter Windows probiert, allerdings gibt es da noch probleme, vor allem mit dem nmake, der meckert, dass es keine g++-exe gibt, da hat der ja auch recht, denn diese heißt mingw32-g++. Gbit es nicht so ne shell von mingw? (Also nicht nur der Compiler) das würde mir bestimmt einiges erleichtern.
Unter Windows: Deine Qt-Installation liefert noch eine Qt Command Prompt mit. Findest du z.B. unter "Start -> Programme -> Qt" (oder wie du es auch immer genannt hast^^).
Dort müsstest du dann den Befehl aus der Doku eintragen. Dort musst du ggf. nicht qmake ausführen (wie es in der Doku beschrieben ist), sondern dieses mingw32. Ansonsten dürfte alles gleich sein. Unter Windows habe ich es mal gemacht. Ich habe mir dazu auch mal was aufgeschrieben, aber gerade nicht parat. Müsste ich auf meinem Laptop haben und nicht auf meinem Rechner... ich guck mal die nächsten Tage... -
tangoal schrieb:
Ich habe mir dazu auch mal was aufgeschrieben, aber gerade nicht parat. Müsste ich auf meinem Laptop haben und nicht auf meinem Rechner... ich guck mal die nächsten Tage...
Also, die Installation war kein Problem, nur wie soll ich den Treiber jetzt einbinden? Ich habe da jetzt nämlich 4 Object-Dateien. Soll ich die jetzt einfach als Lib einbinden?
Außerdem funktioniert das QSQLITE auch nicht. Der Treiber ist zwar installiert, aber anscheinden kann er keine Verbindung aufbauen (open liefert zwar keine Fehlermlermeldung, aber das liegt ja daran, dass open nur checkt ob der Treibe verfügbar).
Ich zeige dir mal den Quellcode:
#include <QtGui> #include <Qtsql> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; QHBoxLayout *layout = new QHBoxLayout; QLabel *label = new QLabel; QLineEdit *line = new QLineEdit; QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setHostName("mysql.lima-city.de"); db.setUserName("richtiger-benutzername"); db.setPassword("richtiges-passwort"); db.setPort(3306); db.setDatabaseName("richtige-datenbank"); qDebug() << db.isValid(); db.connectOptions(); if(!db.open()) label->setText(db.lastError().text() + db.driverName().toAscii()); else { QSqlQuery query("SELECT name FROM myfo_user"); while (query.next()) { QString country = query.value(0).toString(); line->insert(country); } } layout->addWidget(label); layout->addWidget(line); w.setLayout(layout); w.show(); return a.exec(); }
Der Textline wird kein Text hinzugefügt. Meine Query-Abfrage ist jedoch richtig, oder? Was kann ich tun?
Beitrag zuletzt geändert: 20.9.2010 19:36:29 von spuglisi -
Dieser Code funktioniert (bei mir auf jeden Fall). Du musst natürlich für den Usernamen und das Passwort natürlich diejenigen nehmen, die du unter Verwaltung > Addons > Datenbank-Zugang findest (aber das machst du ja auch^^). Deine Datenbanken und deren Namen werden dort auch aufgelistet.QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("mysql.lima-city.de"); db.setPort(3306); db.setUserName("Deine UserID"); db.setPassword("Dein Passwort"); db.setDatabaseName("deine Datenbank"); bool ok = db.open(); if (ok) { // Ok, Datenbank wurde erfolgreich geöffnet und kann verwendet werden. } else { // Hm, Verbindung zur Datenbank konnte nicht hergestellt werden. }
Ansonsten kannst du noch abfragen, welche Tabellen sich in der Datenbank befinden:
Wenn dein Quellcode fehlerfrei kompiliert, dann sollte die Installation des Treibers erfolgreich gewesen sein.QStringList tablenames = db.tables();
Falls es doch noch Probleme geben sollte, dann habe ich hier die Anleitung für dich, mit der ich das auch mal hingekriegt habe. Habs endlich wieder gefunden :-)
--> http://www.qtcentre.org/wiki/index.php?title=Building_the_QMYSQL_plugin_on_Windows_using_MinGW. -
Also langsam ist das ja zum verzeifeln, weder kann sich QSLITE die Daten fetchen, noch kann der MySQL-Driver installiert werden...:( Ich habe mit jetzt bestimmt schon 10 solche Tutorials angeschaut, und niemals erden ddl-Dateien sondern nur o-Dateien gebiltet...:(
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage