QT連接多種數據庫f方法及測試

?

QT提供了對多種數據庫的訪問支持,對SQL Server也可以通過ODBC來進行訪問。
要想順利訪問SQL Server。 首先要保證以下幾點:
1. QT編譯時已經編譯了QtSql
2. 編譯了ODBC插件。可以通過 configure -plugin-sql-odbc來保證,也可以單獨編譯~/src/plugins/sqldrivers/odbc
qmake -t vclib odbc.pro
qmake
nmake
編譯后,在~/plugins/sqldrivers/下應該有qsqlodbcd4.dll(debug)或qsqlodbc4.dll
此時,可以用下面的程序,測試一下你的QT目前支持哪些數據庫訪問。
#include?<QApplication>
#include?<QSqlDatabase>
#include?<QStringList>
#include?<QDebug>

int?main(int?argc,?char* argv[]) {
??? QApplication app(argc, argv);
????
??? qDebug() <<?"Available drivers:";
??? QStringList drivers = QSqlDatabase::drivers();
??? foreach(QString driver, drivers)?
??????? qDebug() <<?"/t"?<< driver;
????
??? QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
??? qDebug() <<?"ODBC driver valid?"?<< db.isValid();
}

如果輸出中有
Available drivers:?
"QSQLITE"?
"QODBC4"?
"QODBC"?
ODBC driver valid? true
就說明已經可以成功支持ODBC了。
3. 要連接數據庫,有3種方式:
http://hi.baidu.com/wenjiejia/blog/item/1cd8ef11cbce4ecea7ef3f4b.html(詳情)

QT連接數據庫 是應用開發的常用基礎操作。經過實驗,我總結了一些例程。這些例程可以連接各種數據庫。
ps:這里只是我覺得好用的方法。QT另外提供了更高級的方法,如有需要請自己嘗試。

連接數據庫需要的頭文件:
#include <QSqlDatabase>
#include <QSqlQuery>

1、連接微軟的Access----------------------------------------------------------------------------------------------
QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC");
ldb.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=system.mdb;UID=;PWD=xiaozhuset");
bool ok = ldb.open();
//新定義一個查詢集合,并指定 鏈接關鍵字。 如果有多個連接,可以隨意指定一個你需要的。
QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb);??? ????
if(ok)
{
bool isok=mquery.exec("select * from sql_set;");
if (!isok)
{
ldb.close();
return -1;
}??? ???

//這個是必須的,因為查處的結果集當前位置不在第一條記錄上。
mquery.next();

QString sHostName=mquery.value(1).toString();
QString sDatabaseName=mquery.value(2).toString();
QString sUserName=mquery.value(3).toString();
QString sPassword=mquery.value(4).toString();

//清除結果集
mquery.clear();
// 如果該連接不再使用,就可以關閉。
ldb.close();

//這里是將從數據庫讀出的數據寫到一個list控件里
ui.list_out->insertItem(ui.list_out->count(),sHostName);
ui.list_out->insertItem(ui.list_out->count(),sDatabaseName);????

}
else
{?
// 打開本地數據庫失敗,
QMessageBox::critical(0, QObject::tr("讀取Access數據庫錯誤!"),db.lastError().text());
return -1;
}????


2、連接mssql2000 數據庫--------------------------------------------------------------------------------------------
QString strDatabaseName = QString("DRIVER={SQL Server};Server=(%1);Database=%2").arg("local").arg(sDatabaseName);????

db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc數據庫驅動?
db.setHostName(sHostName);
db.setPort(1433);
db.setDatabaseName(strDatabaseName); // 我們之前建立的數據庫連接關鍵字
db.setUserName(sUserName);?
db.setPassword(sPassword);?
bool ok = db.open(); //嘗試連接數據庫
if(ok)
{?
menuset_set->db=db;
// 這里用sa已經成功連上數據庫??? ??? ????
return 0;
}
else
{?
// 打開數據庫失敗,
QMessageBox::critical(0, QObject::tr("數據庫連接錯誤!"),db.lastError().text());
return -2;
}??? ????
mssql2000數據庫連接的使用和Access連接使用方法一樣。
QSqlQuery mquery=QSqlQuery::QSqlQuery(db);??? ????
bool ok1=mquery.exec("select * from CarteMenu;");
if (ok1==false)return -1;
QString menu_mkey=mquery.value(13).toString();
QString strmenu_lang=mquery.value(3).toString();
//清除結果集
mquery.clear();

3、連接mysql 數據庫
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql數據庫驅動?
db.setHostName("localhost");
db.setDatabaseName("exampledb"); // 數據庫名稱
db.setUserName("sa"); // 用戶名
db.setPassword("1"); // 密碼
bool ok = db.open(); // 嘗試連接數據庫
if(ok)
{?
QSqlQuery myquery;?
if(myquery.exec("select * from employeedb"))
{?
int num = 0;?
if(db.driver()->hasFeature(QSqlDriver::QuerySize))
{
num = myquery.size(); // 如果支持結果影響的行數,那么直接記錄下來
}
else
{
myquery.last(); //否則定位到結果最后
num = myquery.at() + 1;
}
//這里添加數據庫的查詢結果處理操作

}?
else // 如果查詢失敗
{?
QSqlError error = myquery.lastError();
}
}
else // 打開數據庫失敗
{

}

QT4如何連接MS SQL SERVER


1.網上上了很久,其實語法很簡單

??? QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

??? db.setDatabaseName( "DRIVER={SQL Server};SERVER=127.0.0.1;UID=hello;PWD=hello;DATABASE=hello" );

2.要看連接是否正常,若有錯,什么錯,可以這樣寫

??? bool r = db.open();
QSqlError err = db.lastError();
QString s = err.text();

??? 查看S的內容,即可得到錯誤內容。

3.若出錯信息是驅動未加載,那么使用如下方法,可得到本地是否支持該驅動

??? QApplication a(argc, argv);
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)?
qDebug() << "/t" << driver;

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();

4.若是返回結果是未支持該驅動,那么就需要重新編譯sqldrivers,可以在命令行下,先使用configure,再nmake,我找到一個 簡便方法,由于QT4.3.1與MS VS2005支持較好,因此安裝了QT在VS2005上的插件(名稱例如:qt-vsintegration-1.3.1.exe)之后,可以直接在 VS2005中,使用"QT->Open Solution from .pro file",找到QT的安裝目錄中的“projects.pro”,導入后,可發現幾百個Project,“批生成”即可。

轉載于:https://www.cnblogs.com/lvdongjie/p/5286967.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396621.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器如何實現電腦無線橋接,無線路由器WDS橋接成功副路由器下電腦無法上網怎么辦【解決方法】...

摘 要無線WDS橋接設置完成后&#xff0c;在副路由器管理面&#xff0c;運行狀態 無線狀態 中&#xff0c;WDS狀態顯示成功&#xff0c;但電腦通過副路由無法上網。該問題可能與主、副路由器的設置有關&#xff0c;如下圖所示&#xff1a; 解決辦法&#xff1a; 排查一&#xff…

spad 探測器_從光到光子—“單光子”探測器

光電探測器光電探測器是指在光輻射作用下將其非傳導電荷變為傳導電荷的一類器件。在電子學中&#xff0c;二極管是一種具有不對稱傳輸特性的雙端電子元件&#xff0c;在一個方向上對電流具有低(理想為零)電阻&#xff0c;在另一個方向上具有高(理想為無限)電阻。最常見的類型如…

天地圖專題五:在天地圖上繪制電子區域并保存數據

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請注明出處。 上一文章講了如何在天地圖上顯示坐標軌跡。 本文介紹如何在天地圖上繪制電子區域&#xff08;電子范圍或電子柵欄&#xff09;&#xff0c;并且&#xff0c;我們要將我們繪制的電子區域的坐標數據保存到數…

Mysql中natural join和inner join的區別

假設有如下兩個表TableA&#xff0c;TableB TableA TableB Column1 Column2 Column1 Column3 1 2 1 3TableA的Column1列名和TableB的Column1列名相同。 SELECT * FROM TableA INNER JOIN TableB USING (Column1) SEL…

微信和支付寶的服務器在哪里,手機恢復出廠設置,里面支付寶與微信怎么辦?原來數據在這里...

當手機使用一段時間之后&#xff0c;因為硬件落后會出現卡頓、內存不足等情況&#xff0c;這個時候提高手機速度最直接的一個辦法就是恢復出廠設置&#xff0c;雖然不能從根源上解決問題&#xff0c;但是還是可以湊合個半年時間的。那么這個時候就出現一個問題&#xff0c;手機…

python線上編輯問題_python django - static文件處理與線上部署測試

static文件相關操作涉及&#xff1a;a. 文件位置與訪問路徑映射b. setting.py與static相關配置STATIC_URLSTATIC_ROOTSTATICFILES_DIRSc. html中對于static文件引用方式d. python manage.py collectstatic1. 開發環境-目錄結構2. setting.py 設置STATIC_URL /static/# STATIC_…

android arcgis 繪制圓_arcgis for android 定位 圓

不多說直接代碼 &#xff0c;群里人共享的方法一&#xff1a; /*** 繪制圓,配合 cleargraphicLayer()清除** param center 圓心* param radius 半徑* param alpha 填充的透明度 0-100* param fillColor 填充的顏色*/public void DrawCircle(Point center, double radius, int a…

CreateSolidBrush

[聲明] WINGDIAPI HBRUSH WINAPI CreateSolidBrush(COLORREF color); [功能] 初始化一個指定顏色的畫刷。畫筆可以隨后被選為任何設備上下文的當前刷子。 [參數表] color 畫刷的顏色[返回值] Long&#xff0c;如函數執行成功&#xff0c;就返回指向新畫筆的一個句柄&#xff1b…

mysql insert 不需要日志_MySQL數據庫性能優化(1)「轉」

1、MySQL概述從本文開始我們將討論建立在塊存儲方案之上的關系型數據庫的性能優化方案和集群方案。關系型數據庫的選型將以創業公司、互聯網行業使用最廣泛的MySQL數據為目標&#xff0c;但是MySQL的安裝過程和基本使用方法等知識并不在我們討論的范圍內。后續幾篇文章我們首先…

javascript面試題以及對所涉及到的知識點的總結

前言 這幾天將js方面的知識系統的回顧了一遍&#xff0c;但是當嘗試去做一些面試題時覺得解決問題的能力以及效率還是有所欠缺&#xff0c;在這里特意記錄一下所做的面試題并總結所涉及到的相關知識點。 一、面試題、答案以及總結 1、截取字符串abcdefg的efg var str"abcd…

十代主板改win7_技嘉B460主板UEFI+GPT裝win7|10代CPU裝win7 Bios設置

隨著英特爾十代酷睿處理器的全面上市,針對主流用戶的B460平臺成為了大眾主要關注的目標。作為國際一線板卡品牌的技嘉科技針對十代酷睿的特點,推出了B460主板。這塊主板裝win7、win10都可以,但是在裝win7的過程中USB設備不能使用(本站支持最新的B460/Z490等新主板驅動),需要…

Java swing中的keyListener使用事例

最近在學習Java swing&#xff0c;寫了一個域內聊天室&#xff0c;實現用戶登錄ip,端口號之后&#xff0c;進入聊天窗口聊天&#xff1a; 通過菜單條增加了幾個功能&#xff0c;邊框&#xff0c;字體&#xff0c;顏色和文件傳輸。風格里的樣式都可以通過自己選擇來設置。 介紹以…

「前端」History API與瀏覽器歷史堆棧管理

本文由尚妝前端開發工程師欲休撰寫 本文發表于尚妝博客&#xff0c;歡迎訂閱&#xff01; 移動端開發在某些場景中有著特殊需求&#xff0c;如為了提高用戶體驗和加快響應速度&#xff0c;常常在部分工程采用SPA架構。傳統的單頁應用基于url的hash值進行路由&#xff0c;這種實…

Andrew Ng機器學習(一):線性回歸

1.什么是線性回歸&#xff1f; 用線性關系去擬合輸入和輸出。 設輸入為x&#xff0c;則輸出yaxb。 對于多元的情況yb1a1x1a2x2...anxn。 用θ表示系數&#xff0c;可以寫作&#xff1a; 其中&#xff0c;x01。 2.線性回歸有什么用&#xff1f; 對于連續輸入和輸出的問題&#x…

c++虛析構函數

1.為什么基類的析構函數是虛函數&#xff1f; 在實現多態時&#xff0c;當用基類操作派生類&#xff0c;在析構時防止只析構基類而不析構派生類的狀況發生。 下面轉自網絡&#xff1a;源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代碼 #include<i…

ICMP(Internet Control Message Protocol)網際控制報文協議初識

ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制報文協議。它是TCP/IP協議族的一個子協議&#xff0c;用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用…

Linux設置RSA密鑰登錄

一、怎么實現雙向免密登錄 前提 所有服務器/etc/ssh/sshd_config文件的以下三行未被注釋 RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys舉例&#xff1a; 兩臺服務器&#xff1a;192.168.100.134 192.168.1.140免密碼登錄是分用戶的…

python面向對象__str__和__repr__方法

__str__方法 class Animal:def __init__(self,name,color):self.namenameself.colorcolordef __str__(self):resself.name的顏色是self.colorreturn res batAnimal(蝙蝠,黑色) print(蝙蝠的特征:%s % bat) # 蝙蝠的特征:蝙蝠的顏色是黑色 對象輸出或者打印就會執行__str__方法…

函數sprintf真好用

描述&#xff1a;C 庫函數 int sprintf(char *str, const char *format, ...) 發送格式化輸出到 str 所指向的字符串。 聲明&#xff1a; int sprintf(char *str, const char *format, ...) 參數&#xff1a; str -- 這是指向一個字符數組的指針&#xff0c;該數組存儲了 C 字符…

oracle 刪除主鍵_大數據量刪除的思考 4

譯者 湯健 沃趣科技數據庫技術專家出品 沃趣科技在本系列的前一期文章中&#xff0c;我制作了一些圖&#xff0c;突出顯示了按表掃描執行大量刪除操作和按索引范圍掃描執行大量刪除之間的主要區別。根據所涉及的數據模式&#xff0c;選擇正確的策略可能對隨機I/Os的數量、生…