kostenloser Webspace werbefrei: lima-city


C++ und MySQL

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    stef264

    stef264 hat kostenlosen Webspace.

    Kann man mit C++ irgendwie auf eine MySQL Datenbank zugreifen? Ich habe auf der MySQL Seite geschaut da gibt es so einen Connector doch ich weiß nicht ob dass das richtige und beste ist ;-)

    Wer nett wenn ich einen Codesnippet dazu bekommen würde :-)

    MFG Stef
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m**********n

    Das auf der MySQL Seite funktioniert: einfach runterladen, in deinem Projekt die libs einbinden und die Headerfiles includieren. Die Referenz findet man auch auf der MySQL-Seite und ähnelt PHP.

    PS: Sry, Codebeispiel hab ich keins da liegen, aber Openbook gibts auch noch: Klick!
  4. 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.
  5. m**********n

    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
  6. 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...
  7. s******i

    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
  8. 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
  9. s******i

    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
  10. 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...
  11. s******i

    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
  12. 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.
    }
    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.

    Ansonsten kannst du noch abfragen, welche Tabellen sich in der Datenbank befinden:
    QStringList tablenames = db.tables();
    Wenn dein Quellcode fehlerfrei kompiliert, dann sollte die Installation des Treibers erfolgreich gewesen sein.

    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.
  13. s******i

    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...:(
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!