日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

qt连接mdb_【原创】QT数据库学习和以连接Access为例

發布時間:2023/12/20 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt连接mdb_【原创】QT数据库学习和以连接Access为例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt能夠實現對不同數據的支持,例如常見的oracl、MySql、Sql

Server、Access等等。首先Qt是通過QSqlDabase來創建數據庫的連接,下面是創建一個QSqlDabase的實例:

db.setHostName(“XXX”); //設置主機名

db.setDabaseName(“XXX”);//設置數據庫名

db.setUserName(“XXX”);//設置用戶名

db.setPassword(“XXX”);//設置密碼

if(!db.open())//打開數據庫連接

{

//error

}

上面的第一行中”QSQLITE”是對應數據庫的驅動名稱,也就說訪問不同的數據庫對應的驅動是不一樣的。通常可以通過以下代碼:

QStringList drivers = QSqlDabase::drivers();

Foreach(QString driver,drivers)

qDebug()<

這樣就可以知道自己版本的qt有幾種不同的驅動。我的版本是Qt5.3,下面是在幫助文檔看到Qt支持的所有驅動。例如我們常見的access數據庫對應的是QODBC,MySql的驅動是QMYSQL,Oracle數據的驅動是QOCI。

現在我們要了解一個數據庫,就是上面例子”QSQLITE”所對應的數據庫。它所連接的是SQLite數據庫,是一種輕型的文件型數據庫,主要應用于嵌入式領域而且支持跨平臺,Qt的默認數據連接就是SQlite數據。SQlite沒有對應的數據庫系統,它通過我們寫的代碼直接編譯可生成這樣的一個數據庫文件。例如上面的代碼執行完后QSqlDabase

db = QSqlDabase::addDatabase(“QSQLITE”);

db.setHostName(“XXX”); //設置主機名

db.setDabaseName(“XXX”);//設置數據庫名

db.setUserName(“my.db”);//設置用戶名

db.setPassword(“XXX”);//設置密碼

if(!db.open())//打開數據庫連接

{

//error

}

就在我們編譯生成Debug文件夾看到一個my.db的文件。

但實際上我們通常要訪問一個比較常見的數據庫,例如Access數據庫。下面來介紹Qt怎么訪問Access。

首先我們在要執行QSqlDabase db =

QSqlDabase::addDatabase(“QODBC”);這條語句,注意到此時的驅動已經換成了QODBC,接著關鍵的是db.setDabaseName(“XXX”);這條語句。可能剛開始天真的以為只要把驅動名稱換成QODBC,然后我們新建一個access文件名稱為命名為File.mdb,然后執行db.setDabaseName(“File.mdb”);這條語句就能訪問access數據庫文件了,但實際上是不行的。在幫助文檔查看setDabaseName屬性,你會發現這里有詳細的說明如何訪問access的例子。

For the QOCI (Oracle) driver, the database name is the TNS

Service Name.

For the QODBC driver,

the?name?can either be a

DSN, a DSN filename (in which case the file must have

a.dsnextension),

or a connection string.

For example, Microsoft

Access users can use the following connection string to open

an.mdbfile

directly, instead of having to create a DSN entry in the ODBC

manager:

...

db.setDatabaseName("DRIVER={Microsoft Access Driver

(*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");

if (db.open()) {

//

success!

}

...

上面就是說如果采用QOCI驅動,那么database的name要使用TNS服務的名稱。而如果采用QODBC驅動,那么database的name就要采用DNS名稱或者連接字符串這兩種方式。這里的name就是指void

QSqlDatabase::setDatabaseName(const QString &

name)里面這個name參數。然后它給出了采用連接字符串這種方法的例子就是上面那段代碼,其中最關鍵的就是這句:

db.setDatabaseName("DRIVER={Microsoft Access Driver

(*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");

如果你本地的access文件是file.mdb,那么只要把上面DBQ=后面的這個換成你自己的文件,

DBQ = file.mdb,其他都相同,這樣就能成功連接你本地的access數據庫了。到這里雖然能實現預期的目的,但總感覺一頭霧水,我本身對數據庫的了解也僅次于那些sql語句,上面連接字符串的其他部分代表什么含義,ODBC是什么東西,還有另外一種方法中提到的DSN是什么東西都不知道,所以花了一段時間在網上查找相關資料,終于大致了解ODBC,DNS還有應用程序連接數據庫之間的過程原理等。

在百科上ODBC是這樣定義的:開放數據庫互連(Open

Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows

Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規范,并提供了一組對數據庫訪問的標準API(應用程序編程接口)。這樣講很抽象,為了弄懂它來看這張在網上找的圖,如下圖中應用層就是指我們的應用程序,數據層就是我們要訪問的數據庫了,所以你可以簡單把ODBC當作橋梁。ODBC管理器是關鍵的組成,ODBC管理器不是屬于應用層,也不是屬于數據層,也就是說這個ODBC管理器不屬于Qt的范疇,也不屬于Access,它是基于windows系統的一個ODBC部分。它是用來管理不同的數據源,應用程序要訪問數據庫,首先必須在ODBC管理器創建一個數據源。

也就是我們在ODBC管理器設置一些內容后,ODBC管理器就會幫我們把應用層和數據庫之間的道路打通,至于它是怎么打通的,那就是微軟提供的ODBC中的內容,我們不必知道也沒辦法知道,那么ODBC管理器應該設置一些什么東西呢?其實就是設置數據源。

在上面我們曾遇到過DSN,DSN是Data Source Name的縮寫,也就是DSN就是數據源的名稱,那么什么是數據源呢?數據源顧名思義就是數據的來源,它包含數據庫存儲位置、類型及ODBC驅動程序信息等等。我們把這么一個數據的來源用一個名字命名,這個名字就是DSN了。例如我接收到來自上海市XX區XX路XX號的一個快遞,每個快遞都對應一個快遞號例如003945,那么這個數據源就是上面的那條地址,數據源名稱就是快遞號了,當然這是我比較粗的理解,也許很不恰當。

ODBC管理器的作用就是根據數據源提供的數據庫存儲位置、類型及ODBC驅動程序信息,建立起ODBC與一個特定數據庫的聯系,以后程序只需要提供數據源名稱就可以直接訪問數據庫了。如果我們要訪問一個在D:\mydata.mdb這個access數據庫文件,那么你只需要告訴ODBC管理器這個是一個Access數據庫文件,它在的位置是D:\mydata.mdb這個路徑,采用的ODBC驅動,那么ODBC管理器就會自動幫你把你的應用程序和mudata.mdb連接了,而它在內部是怎么實現的我們不需要知道。ODBC管理器在計算機的位置是--控制面板\系統和安全\管理工具。

點擊添加按鈕,出現一個驅動對話框,選擇access對應的驅動如圖然后點擊完成后出現一個對話框,看到了嗎有一個光標處就是填寫數據源名稱也就是DSN,例如我填的是connectDatabase,然后點擊數據庫連接彈出一個選擇數據庫對話框,之后我們在目錄選擇我們要連接的數據庫文件的路徑,然后點擊確定,那么ODBC管理器就幫助我們把應用程序和數據庫連接了,此時記住這個數據源名connectDatabase,然后回到上面QSqlDatabase::setDatabaseName屬性,大致代碼如下:

QSqlDabase db =

QSqlDabase::addDatabase(“QODBC”);//選擇QODBC驅動

db.setDabaseName(“connectDatabase”);//設置數據庫名,我們自己起的數據源名

if(!db.open())//打開數據庫連接

{

//error

}

這時在看參考文檔的這句話:For

example, Microsoft Access users can use the following connection

string to open an.mdbfile

directly, instead of having to create a DSN entry in the ODBC

manager:你會豁然開朗了,要嘛用連接字符串,要嘛去ODBC

manager管理器去設置好數據源,這兩種方法都可以幫助應用程序連接到Access數據庫。通過比較顯然連接字符串的方式要簡單很多了,下面這張表是在網上找到不同數據庫對應的連接字符串的書寫格式,注意如果格式不正確是沒辦法連接到數據庫的。

總結

以上是生活随笔為你收集整理的qt连接mdb_【原创】QT数据库学习和以连接Access为例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。