视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
QT连接SQL
2025-09-25 17:42:16 责编:小OO
文档
QT连接SQL Server(ODBC)

2009-03-23 14:22

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 

#include 

#include 

#include 

int main(int argc, char* argv[]) {

    QApplication app(argc, argv);

    

    qDebug() << "Available drivers:";

    QStringList drivers = QSqlDatabase::drivers();

    foreach(QString driver, drivers) 

        qDebug() << "\" << driver;

    

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

    qDebug() << "ODBC driver valid?" << db.isValid();

}

如果输出中有

Available drivers: 

  "QSQLITE"  

  "QODBC4" 

  "QODBC" 

ODBC driver valid? true

就说明已经可以成功支持ODBC了。

3. 要连接数据库,有3种方式:

参考下面的连接:QT连接ODBC数据库

要注意的就是连接数据库时使用的数据库名,和sqlite等是不同的,并不是直接写入数据库名称。

而是DSN名。 

如果你已经设置好了DSN,可以直接输入DSN名。 如果没有,可以采用DSN连接字符串直接连接ODBC数据库。

例如:

//下面例子连接到10.0.0.2上的sql server名为temp的数据库上。 程序中指定此连接的名称为dbTemp

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "dbTemp");

db.setHostName("10.0.0.2"); //如果dsn中已经含有SERVER,可以省略此句

QString dsn = QString::fromLocal8Bit("DRIVER={SQL SERVER};SERVER=10.0.0.2;DATABASE=temp");

//如果已经设定DSN,可以写为QString::fromLocal8Bit("SQLSERVER_DSN")

db.setDatabaseName(dsn);

//即使dsn中已经设置了UID和PASSWD,仍然需要执行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名设错,将会在db.open()时出现“[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified QODBC3: Unable to connect”

“[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3:Unable to connect”错误。

其他类型数据库应该修改dsn字符串与其相适应:

下面是ODBC和OLEDB的连接字符串写法:

ODBC连接

适合数据库类型 连接方式

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连接

适合的数据库类型 连接方式

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'"

下载本文
显示全文
专题