2013-02-09 61 views
1

我對Qt很新。我試圖使用Qt進行MySQL數據庫連接,並顯示錶信息QSqlTableModel。這裏是我的代碼:使用Qt進行數據庫連接:失敗?

1).pro文件

QT  += core gui sql 

TARGET = sri_qtdb 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp 

HEADERS += mainwindow.h 

FORMS += mainwindow.ui 

2).h文件中

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QDebug> 
#include <QtSql> 
#include <QtGui> 
#include <QtCore> 


namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow { 
    Q_OBJECT 
public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

protected: 
    void changeEvent(QEvent *e); 

private: 
    Ui::MainWindow *ui; 
    QSqlDatabase db; 
    QSqlTableModel *model; 
    //QTableWidget *table; 
}; 

#endif // MAINWINDOW_H 

3).cpp文件

一)的main.cpp

#include <QtGui/QApplication> 
#include "mainwindow.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 

二)mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    this->setCentralWidget(ui->tableView); 
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
    db.setHostName("localhost"); 
    db.setDatabaseName("user"); 
    db.setUserName("root"); 
    db.setPassword("*********"); 
    if(!db.open()){ qDebug()<< "Failed"; } 
    else 
    { 
     model = new QSqlTableModel(this); 
     model->setTable("new_joiners"); 
     model->select(); 
     ui->tableView->setModel(model); 
    } 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::changeEvent(QEvent *e) 
{ 
    QMainWindow::changeEvent(e); 
    switch (e->type()) { 
    case QEvent::LanguageChange: 
     ui->retranslateUi(this); 
     break; 
    default: 
     break; 
    } 
} 

當前可用的驅動:QSQLITE QMYSQL3 QMYSQL

我的輸出總是 「失敗」。我究竟做錯了什麼?

+1

請打印出[上一個錯誤](http://qt-project.org/doc/qt-4.8/qsqldatabase.html#lastError)以獲取有關您的問題的線索。 – Mat 2013-02-09 12:09:44

+0

@Mat是啊釘了它,''qDebug()<< db.lastError();'告訴我,它的數據庫連接問題...解決了它:)謝謝很多... – highlander141 2013-02-09 12:19:26

回答

2

首先,重新檢查您的DB在localhost和所有參數。


檢查,如果你真的需要驅動程序:

QStringList driverList; 
driverList = QSqlDatabase::drivers(); 

if (!driverList.contains("QMYSQL", Qt::CaseInsensitive)) 
    qDebug()<<"No QMYSQL support! Check all needed dll-files!"; 
else 
    qDebug()<<"QMYSQL support is avaiable."; 

編寫代碼,使之具體和使用調試功能。例如,如果你在連接數據庫,輸出一個錯誤以這種方式得到了錯誤:

if(!db.open()) 
{ 
    qDebug()<<"Error while opening DB: " << db->databaseName() 
      << db->lastError(); 
} 

祝你好運!