QT提供了對多種數(shù)據(jù)庫的訪問支持,對SQL Server也可以通過ODBC來進行訪問。
要想順利訪問SQL Server。 首先要保證以下幾點:
1. QT編譯時已經(jīng)編譯了QtSql
2. 編譯了ODBC插件。可以通過 configure -plugin-sql-odbc來保證,也可以單獨編譯~\src\plugins\sqldrivers\odbc
qmake -t vclib odbc.pro
qmake
nmake
編譯后,在~\plugins\sqldrivers\下應(yīng)該有qsqlodbcd4.dll(debug)或qsqlodbc4.dll
此時,可以用下面的程序,測試一下你的QT目前支持哪些數(shù)據(jù)庫訪問。
#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 就說明已經(jīng)可以成功支持ODBC了。
3. 要連接數(shù)據(jù)庫,有3種方式:
參考下面的連接:QT連接ODBC數(shù)據(jù)庫
要注意的就是連接數(shù)據(jù)庫時使用的數(shù)據(jù)庫名,和sqlite等是不同的,并不是直接寫入數(shù)據(jù)庫名稱。
而是DSN名。
如果你已經(jīng)設(shè)置好了DSN,可以直接輸入DSN名。 如果沒有,可以采用DSN連接字符串直接連接ODBC數(shù)據(jù)庫。
例如:
//下面例子連接到10.0.0.2上的sql server名為temp的數(shù)據(jù)庫上。 程序中指定此連接的名稱為dbTemp
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "dbTemp");
db.setHostName("10.0.0.2"); //如果dsn中已經(jīng)含有SERVER,可以省略此句
QString dsn = QString::fromLocal8Bit("DRIVER={SQL SERVER};SERVER=10.0.0.2;DATABASE=temp");
//如果已經(jīng)設(shè)定DSN,可以寫為QString::fromLocal8Bit("SQLSERVER_DSN")
db.setDatabaseName(dsn);
//即使dsn中已經(jīng)設(shè)置了UID和PASSWD,仍然需要執(zhí)行setUserName和setPassword的步驟
db.setUserName("sa");
db.setPassword("xxxxxx");
if(!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
如果dsn名設(shè)錯,將會在db.open()時出現(xiàn)“[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified QODBC3: Unable to connect”
“[Microsoft][ODBC 驅(qū)動程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認驅(qū)動程序 QODBC3: Unable to connect”錯誤。
其他類型數(shù)據(jù)庫應(yīng)該修改dsn字符串與其相適應(yīng):
下面是ODBC和OLEDB的連接字符串寫法:
ODBC連接
適合數(shù)據(jù)庫類型 連接方式
access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"
dBase "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"
oracle "Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"
MSSQL server "Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"
MS text "Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"
Visual Foxpro "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"
MySQL "Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"
SQLite "Driver={SQLite3 ODBC Driver};Database=D:\SQLite\*.db"
PostgreSQL "Driver={PostgreSQL ANSI};server=127.0.0.1;uid=admin;pwd=pass;database=databaseName"
OLEDB連接
適合的數(shù)據(jù)庫類型 連接方式
access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;user id=admin;password=pass;"
oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"
MS SQL Server "Provider=SQLOLEDB;data source=machinename;initial catalog=dbname;userid=sa;password=pass;"
MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties'text;FMT=Delimited'"
參考:
http://www.gamedev.net/community/forums/topic.asp?topic_id=523765
http://www.qtcn.org/bbs/read.php?tid=12414
http://www.qtcn.org/bbs/read.php?tid=7197&keyword=SQL%20Server
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。