初学QT,连接数据库走了一圈弯路,不过总算折腾出来了,其间参考网文无数,就不一一列举了,先将我实现的代码贴出来,供有需要的人参考:
1. 首先,确定你的QT己编译好ODBC驱动,测试代码如下:
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "/t" << driver;
如果结果中有ODBC,OK,说明ODBC已经可以用了。
2. 连接ACCESS, 代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "test2");
db.setConnectOptions("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3");
QString dsn = QString("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=E:/Work/QT_T001/db/Test.mdb");
db.setDatabaseName(dsn);
bool ok = db.open();
QSqlQuery query = QSqlQuery(db);
if(ok) {
qDebug() << "Access Connect OK!";
query.exec("insert into tblTest(F_cName,F_cSex) values('Test2', 'F')");
qDebug() << db.lastError().text();
} else {
qDebug() << "Access Connect Fail!";
qDebug() << db.lastError().text();
}
注:核心问题是DBQ=E:/Work/QT_T001/db/Test.mdb 连接字符串中需用反斜杠
2. 连接SQLSERVER, 代码如下:
QSqlDatabase dbconn = QSqlDatabase::addDatabase("QODBC");
QString dsn = QString("Driver={sql server};server=127.0.0.1;database=Test;uid=sa;pwd=wang");
dbconn.setDatabaseName(dsn);
dbconn.setHostName(QString("127.0.0.1"));
dbconn.setPort(1433);
dbconn.setUserName(QString("sa"));
dbconn.setPassword(QString("wang"));
QTextCodec *BianMa = QTextCodec::codecForName ("GBK");
bool r = dbconn.open();
if (r) {
qDebug() << "SQL Server 2000 Connect OK!";
QSqlQuery query = QSqlQuery(dbconn);
query.exec(BianMa->toUnicode("Insert into [tblTest] (F_cName,F_cSex) values('李四','女')"));
qDebug() << query.lastError().text();
qDebug() << dbconn.lastError().text();
} else {
qDebug() << dbconn.lastError().text();
}
注:qDebug() << query.lastError().text();可以告诉你详细的出错信息,照着解决就好了。
以上代码,QT4.5.3 SQLSERVER2000、2005测试OK。