上文介绍在linux下可以通过QODBC来访问SqlServer,我们可以发现QODBC插件内部也是调用 libsybdb.so (sybase客户端访问库,可通过安装sybase得到. freetds是TDS的开源实现库,编译后会在lib目录产生该库),只是将TDS协议用ODBC接口方式再封装了一次而已. 既然内部也是使用的TDS协议,我们为什么要舍近求远用QODBC插件来访问呢? 我们可以直接通过QTDS插件来访问SqlServer,这样效率更高.
一. 编译TDS插件
指定freetds头文件和库路径,通过Freetds来编译TDS插件
cd $QTDIR/src/plugins/sqldrivers/tds qmake "INCLUDEPATH=/usr/local/freetds/include" "LIBS=-L/usr/local/freetds/lib -lsybdb" make
二. 配置sqlserver数据源
Freetds会从按以下顺序搜索freetds.conf配置文件:
1. $(FREETDSCONF) ,搜索系统FREETDSCONF环境变量是否配置
2. ~/.freetds.conf, 如果1没找到,freetds会从用户目录下搜索 .freetds.conf文件
3. $prefix/etc/feetds.conf,如2没找到,则搜索系统prefix环境变量
我们选择方案1,将配置文件放于指定目录下,然后在程序中设置该环境变量即可,这样便于程序部署.
三. 测试运行
// 在程序中设置FREETDSCONF环境变量 QString conf=QString("%1/etc/freetds.conf").arg(getenv("SCADA_ROOT")); char szBuff[256]; strcpy(szBuff,qPrintable(conf)); // 此处调用setenv才行,putenv不通过 setenv("FREETDSCONF",szBuff,1); // 注意:此处 databaseName 和 hostName参数与windows上编码有一定的差异, 否则无法连接数据库 QSqlDatabase db=QSqlDatabase::addDatabase("QTDS"); db.setDatabaseName("sqlscada"); db.setHostName("DataSource1"); // freetds中配置的数据源名称 db.setPort(3304); db.setUserName("sa"); db.setPassword("scada"); if(!db.open()) { qDebug("=== %s",qPrintable(db.lastError().text())); }else { qDebug("==== ok"); }
运行截图:
相关推荐
NULL 博文链接:https://tcspecial.iteye.com/blog/1976855
Qt6.2搭配QtDS,采用QML作为UI界面,C++与QML交互处理逻辑,开发的多功能串口助手,供学习使用
Enhanced Host Controller Interface Specification for Universal Serial Bus <br>1. INTRODUCTION...............................................................................................1 1.1...
汤姆逊V6无线+有线ADSL路由器设置.打开浏览器,本文以IE浏览器为例,在浏览器的地址栏键入192.168.1.254回车。(虽然现在你还不能上网,但只要您使用网线将电脑与路由器的LAN口任意一个连起来即可打开路由器配置界面...
多普达D600,多普达D600活力版SPL修复软件(带说明文档)