1. 程式人生 > >QT5 Access資料庫連線方法

QT5 Access資料庫連線方法

申明:作者本人也是QT新手,大一學生學軟體一年,如有錯誤望包涵

1.首先需要在.pro中加入 QT += sql
2. .cpp中(最好都新增)
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlQuery>
3.資料庫連線程式碼(在標頭檔案中申明connectDB())
void Widget::connectDB()
{
QString sDbNm = "C:/Users/jos/Desktop/MdsDB.accdb";//資料庫檔案
/************* 此處資料庫路徑得修改成自己的! *********/

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");//設定資料庫驅動
QString dsn = QString("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; FIL={MS Access};DBQ=%1;").arg(sDbNm);//連線字串
db.setDatabaseName(dsn);//設定連線字串
db.setUserName("");//設定登陸資料庫的使用者名稱
db.setPassword("");//設定密碼
bool ok = db.open();
if (!ok) {
QMessageBox messageBox;
messageBox.setText("Database error");
messageBox.exec();
db.close();
}
}
4. 可能遇見無法找到sql***一類的報錯,我的解決辦法就是新建一個工程,重新新增所有檔案,然後複製以前的程式碼貼上進新的工程。如果是dialog,就新建一個設計師介面,它會自動新增標頭檔案,source檔案和ui介面,只需複製原來的.ui檔案覆蓋到新工程目錄下。
5. 連線資料庫(就是呼叫connectDB()函式)
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connectDB();
}
*注意*connectDB()已經將資料庫開啟而且沒有關閉資料庫,所以在其他函式裡不要再使用connectDB();正常情況下直接操作資料庫就行了。
6. 操作資料庫,使用sql語句,提供幾種操作方法:
(一)QSqlQuery query;
          query.prepare("SELECT * FROM table");
          query.exec();
(二) QSqlQuery query;
       query.exec("SELECT * FROM table");

(三)注意這種方法可以靈活改變sql語句
QString psd=xxxxx;
QString name=xxxxx;
QSqlQuery query;
query.prepare("UPDATE userinf SET userpsd=? where username=?");//修改資料
query.bindValue(0,psd);//替換第一個問號內容
query.bindValue(1,name);//替換第二個問號內容
query.exec();
(四)相似的方法
QString time=xxxxx;
QString path=xxxxx;
QSqlQuery query;
query.prepare("INSERT INTO table(uploadtime, picture) "
"VALUES (?, ?)");//插入語句
query.addBindValue(time);
query.addBindValue(path);
query.exec();
query.clear();//這個是清除執行得到的內容,如果資料不使用了可以清除掉

 
7. 使用資料(提供一種使用texe edit的)
QSqlQuery query;
query.prepare("select * from talentteammain");
query.exec();
while (query.next())/遍歷查詢的資料
            {
ui->textEdit_id->setText(query.value(0).toString());
ui->textEdit_open->setText(query.value(1).toString());
             }
query.clear();//Text Edit控制元件中顯示你得到的資料