2011-08-11 3 views
1

Maintenant, je travaille sur le projet Qt et j'ai besoin de support MySQL. MySQL a été installé sur une machine virtuelle (Virtual Box) sur Ubuntu Server. Voici ce que je fais:Problème avec l'interaction qt + mysql

int main(int argc, char** argv) 
{ 
    QApplication app(argc, argv); 
    QSqlDatabase hospital_db = QSqlDatabase::addDatabase("QMYSQL"); 
    hospital_db.setHostName("192.168.56.10"); 
    hospital_db.setDatabaseName("hospital_db"); 
    hospital_db.setUserName("usr1"); 
    hospital_db.setPassword("123"); 
    if(!hospital_db.open()) { 
     qDebug() << "\nFailed connect to MySQL"; 
    }; 

    QTableView *tView = new QTableView; 
    QSqlTableModel model; 

    model.setTable("my_table"); 
    model.setEditStrategy(QSqlTableModel::OnManualSubmit); 
    if (!model.select()) { 
     QMessageBox msgBox; 
     QString err(model.lastError().text()); 
     msgBox.setText(err); 
     msgBox.exec(); 
    } 
    model.setHeaderData(0, Qt::Horizontal, QObject::tr("ID")); 
    model.setHeaderData(1, Qt::Horizontal, QObject::tr("Name")); 
    model.setHeaderData(2, Qt::Horizontal, QObject::tr("Address")); 
    model.setHeaderData(3, Qt::Horizontal, QObject::tr("Phone")); 

    tView->setModel(&model); 
    tView->show(); 

    QSqlDatabase::removeDatabase("my_table"); 
    return app.exec(); 
} 

J'obtiens l'erreur « Impossible de trouver la table my_table ». La table my_table est créée correctement. Voici la suite de SHOW FIELDS OF my_table:

+----------------+-----------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+----------------+-----------+------+-----+---------+----------------+ 
| hosp_id  | int(11) | NO | PRI | NULL | auto_increment | 
| hosp_name  | char(100) | NO |  | NULL |    | 
| hosp_address | char(100) | NO |  | NULL |    | 
| hosp_ph_number | char(8) | NO |  | NULL |    | 
+----------------+-----------+------+-----+---------+----------------+ 

Et enfin voici general_log de MySQL:

| 2011-08-11 12:21:54 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Connect  | [email protected] on hospital_db | 
| 2011-08-11 12:21:54 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Init DB  | hospital_db       | 
| 2011-08-11 12:21:54 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Query  | SET NAMES utf8      | 
| 2011-08-11 12:21:54 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Field List | my_table       | 
| 2011-08-11 12:21:54 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Field List | my_table       | 
| 2011-08-11 12:21:54 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Query  | show index from my_table    | 
| 2011-08-11 12:22:01 | usr1[usr1] @ [192.168.56.1] |  36 |   0 | Quit   |          | 

Alors, Qu'est-ce que je fais mal?

+0

Est-ce que "QSqlTableModel model" ne devrait pas être lié à hospital_db? –

Répondre

0

Eh bien, semble que j'ai eu quelques problèmes avec les autorisations sur le côté serveur. Maintenant tout va bien.

+0

C'est ce que j'aurais deviné. Vous deviez accorder des autorisations à des connexions non locales, n'est-ce pas? –

+0

@Jonny Dee: vous avez absolument raison)) – qutron

0

Vous faites

model.setTable("mytable"); 

mais selon votre SQL le nom de la table est "my_table". Ils sont différents !

+0

Vous avez raison, mais c'est une erreur de copier-coller. – qutron