Selecting data from mysql using qt?



  • i am trying to select data from mysql db using qt. here is my code
    @
    #include <QApplication>
    #include <QSqlDatabase>
    #include <QSqlError>
    #include <QSqlQuery>
    #include <QDebug>
    //#include <QString>
    //#include "../connection.h"
    #include "db.h"

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("testTwo");
    db.setUserName("root");
    db.setPassword("");
    db.setHostName("localhost");
    
    //bool ok = db.open();
    
    QSqlQuery query;
    query.exec&#40;"SELECT * FROM testTable"&#41;;
    while(query.next(&#41;&#41; {
        QString firstName = query.value(0&#41;.toString();
        QString secondName = query.value(1).toString();
        qDebug() << firstName << secondName;
    }
    return a.exec(&#41;;
    

    }
    @

    this piece of code displays this error
    @
    invalid use of incomplete type ‘struct QVariant’ main.cpp 25
    forward declaration of ‘struct QVariant’ qobject.h 66
    invalid use of incomplete type ‘struct QVariant’ main.cpp 26
    forward declaration of ‘struct QVariant’ qobject.h 66
    @
    please help how can i solve this problem?



  • Line no. 22 and 23, can just be replaced with ...

    @
    QSqlQuery query("SELECT * FROM testTable");
    @

    But also, do check the documentation for QSqlQuery, where it is recomended NOT to use SELECT *



  • now i changed it to this
    @
    query.exec("SELECT firstname,lastname FROM testTable");
    @
    still the same errors

    and i am following this link "Your text to link here...":http://doc.trolltech.com/4.7/sql-sqlstatements.html



  • Maybe an "#include <QVariant>" is missing at the top?

    T.



  • Why not just

    @#include <QtCore>
    #include <QtSql>@

    and not worry about every single class you use?



  • That can be a solution only when you're testing something. So, in this case, I agree with you, let's avoid such worries.

    But if your project grows up, it's better to include what's needed, otherwise your compilation time can increase a lot.

    T.



  • i add #include <QVariant>

    now it is saying
    @
    QSqlQuery::exec: database not open
    @



  • Try to use QSqlQuery::lastError() for find problem



  • what is the problem now in my code why it is not opening database?



  • Did you leave

    @
    //bool ok = db.open();
    @

    commented?



  • well i changed my code to this and added lastError as well

    @
    #include <QApplication>
    #include <QSqlDatabase>
    #include <QSqlError>
    #include <QSqlQuery>
    #include <QDebug>
    #include <QString>
    #include <QVariant>
    //#include <QtCore>
    //#include <QtSql>
    //#include "../connection.h"
    #include "db.h"

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("testTwo");
    db.setUserName("root");
    db.setPassword("");
    db.setHostName("localhost");
    
    //bool ok = db.open();
    
    QSqlQuery query;
    query.exec&#40;"SELECT firstname,lastname FROM testTable"&#41;;
    while(query.next()) {
        QString firstName = query.value(0).toString();
        QString secondName = query.value(1).toString();
        qDebug() << "First Name: " << firstName << "Last Name:" << secondName;
        qDebug() << db.lastError();
    }
    return a.exec&#40;&#41;;
    

    }
    @

    it still says QSqlQuery::exec: database not open



  • it is still as commented
    [quote author="Antonio Di Monaco" date="1286818410"]Did you leave

    @
    //bool ok = db.open();
    @

    commented?[/quote]



  • Try uncomment line 23



  • i uncomment line 23 and comment everything below line 23 then it just says
    @
    Starting /home/zafar/c++/dbExample-build-desktop/dbExample...
    @

    and stucks there



  • OH! You use SQL code before
    a.exec()
    !
    Are you sure?

    Create standart QT GUI application and wrote sql code in mainwindow module.



  • i am new to qt. how can i create Qt Gui App and do you mean i should write sql code in mainwindow.h file?



  • right now i have three files. db.h, db,cpp and main.cpp



  • Run QT Creator.
    Use menu File/new file or project.
    Select QT Gui application.
    ...
    and select SQL checkbox
    ...
    and write sql code in MainWindow.cpp
    ...
    and see SQL Example please



  • well i tried "File/new file or project and select qt gui app" but i ddint find any sql checkbox anywhere in creating new project



  • no coments...
    How can I send you screenshot?



  • you can add pictures here as screenshots or if you want my email address i ll give you that as well for screenshots



  • anyone who can help?





  • well i dont have that option. here is what i get
    when i click file/new file or project then this screenshot
    "Your text to link here...":http://www.freeimagehosting.net/uploads/702f633ae7.png
    then i keep clicking next getting the follwoing screenshots
    "Your text to link here...":http://www.freeimagehosting.net/uploads/ab872acfb8.png
    "Your text to link here...":http://www.freeimagehosting.net/uploads/45c51ab364.png
    "Your text to link here...":http://www.freeimagehosting.net/uploads/84605eae46.png
    "Your text to link here...":http://www.freeimagehosting.net/uploads/84605eae46.png



  • Well, it should make no problem to have SQL query before exec(), at least I don't have any problem with that.

    Let's get back to square one:
    You said if you uncomment the
    @bool ok = db.open();@
    then your program hangs. Can we see the value of 'ok'?
    @qDebug() << ok;@
    My guess is probably you have problems granting the rights in mysql when you've created the table... have you made
    @GRANT ALL ON testTwo.* to 'root'at'localhost' IDENTIFIED BY 'somepassword';@
    (Ouch please replace the 'at' with the 'at' sign, the forum motor uses it for code tags, I don't know how to write it... I hope it's not confusing.
    I'm not sure if you can do it with empty password, I guess yes, but I never do that.)



  • i now put password for root at localhost.
    when i place qDebug() << ok then it displays this
    @
    false
    QSqlQuery::exec: database not open
    @

    false might be the value of ok.



  • Are you able to connect to your DB from shell?



  • i dont know how to connect to my DB from shell. I install xampp which is easy for me to manage my databases.
    how can i connect from shell?



  • @mysql -h host -D dbname -u user@

    I guess your can omit host parameter if you are connecting to localhost. You might need to specify "-p password" switch also (depends on mysql configuration).



  • i think i did not install any mysql client. bcause it displays this output
    @
    root@zafar-laptop:/# mysql -h localhost -D testTwo -u root -p xxxxxx
    The program 'mysql' can be found in the following packages:

    • mysql-client-core-5.1
    • mysql-client-5.0
    • mysql-cluster-client-5.1
      Try: apt-get install <selected package>
      @


  • Run
    @dpkg --list | grep mysql@
    and post the output for this command.



  • here it is
    @
    root@zafar-laptop:/# dpkg --list | grep mysql
    ii libmysqlclient-dev 5.1.41-3ubuntu12.6 MySQL database development files
    ii libmysqlclient16 5.1.41-3ubuntu12.6 MySQL database client library
    ii mysql-common 5.1.41-3ubuntu12.6 MySQL database common files (e.g. /etc/mysql

    @



  • How did you create your database? I don't see any mysql server either.



  • well i download xampp and install it. i created database using phpmyadmin.



  • i install xampp in this folder /opt/lampp

    and my database is in /opt/lampp/var/mysql



  • Ok, I see. What is the location of your XAMPP installation? try to find the mysql binary there. And use the whole path (since I assume it is not in PATH) when connecting, i.e.

    @/path/to/xampp/bin/mysql -D dbname -u username@

    UPD: Didn't notice the location of xampp. then try (I guess it would be like this) @/opt/lampp/bin/mysql@



  • now here it what it says
    @
    root@zafar-laptop:/# /opt/lampp/bin/mysql -D testTwo -h localhost -u root -p 123456
    Enter password:
    ERROR 1049 (42000): Unknown database '123456'
    @
    i am providing the right pw



  • Try not passing -p switch. I guess you will be prompted to type in your password.
    or
    @/opt/lampp/bin/mysql -u root testTwo@



  • now it output is Access Denied
    @
    root@zafar-laptop:/# /opt/lampp/bin/mysql -u root testTwo
    ERROR 1045 (28000): Access denied for user 'root'at'localhost' (using password: NO)
    @



  • I'm sorry i just confused you with my last post.

    @/opt/lampp/bin/mysql -u root -p 123456 testTwo@

    I thought that mysql would prompt you but it didn't.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.