?
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,“批生成”即可。