`
tcspecial
  • 浏览: 911300 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

QTDS freetds访问MSSQL

阅读更多

       上文介绍在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,将配置文件放于指定目录下,然后在程序中设置该环境变量即可,这样便于程序部署.

     freetds.conf

 

三. 测试运行

// 在程序中设置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");
}

 

运行截图:

 

 

  • 大小: 23.8 KB
  • 大小: 6.9 KB
分享到:
评论

相关推荐

    windows QTDS连接MSSQL

    标题中的“Windows QTDS连接MSSQL”指的是在Windows操作系统环境下,使用QTDS(Quartz Transaction Data Services)作为中间件来连接Microsoft SQL Server的过程。QTDS是Qt框架的一部分,允许Qt应用程序与SQL数据库...

    Qt6.2搭配QtDS,采用QML作为UI界面,C++与QML交互处理逻辑,开发的多功能串口助手,供学习使用

    通过`QQmlContext`,我们可以将C++的对象暴露给QML,使得QML可以直接调用C++的函数和访问其属性。此外,还可以使用`QQmlComponent`动态创建QML对象,这在构建动态UI时非常有用。 QtDS是Qt的可视化设计工具,它允许...

    ehci_def.rar_REvision_ehci

    3. **队列元素(QTDs和QHs)**:QTDs(Queue Transfer Descriptors)描述了USB事务的具体细节,而QHs则管理QTDs并指明了传输的方向和类型。 4. **中断机制**:EHCI支持中断和轮询模式,开发者需要理解如何设置中断...

    usb host controller ehci 详解

    EHCI驱动程序负责维护这些结构体的实例,并将它们映射到硬件寄存器,这样硬件就可以访问和使用这些结构体中的数据。 在Linux系统中,EHCI驱动通常位于drivers/usb/host目录下,例如ehci-hcd.c文件中实现了EHCI主机...

    EHCI参考教程

    - **EHCI数据结构分类**: EHCI规范中的数据结构主要包括周期表(调度)、异步表(调度)、队列首部(QHs)和队列元素传输描述符(qTDs)。 - **调度表**: 周期表(调度)负责处理中断和同步传输;异步表(调度)则...

    汤姆逊V6设置

    这样做是为了让电脑从路由器自动获取网络参数,以便能够访问配置界面。 接下来是进入路由器的配置界面。打开浏览器,这里我们以IE为例,但其他如Chrome、Firefox等现代浏览器也适用。在地址栏输入192.168.1.254并按...

    EHCI数据结构的实现-飞思卡尔USB模块.pdf

    文档详细阐述了EHCI数据结构,包括队列头部(QH)和队列元素传输描述符(qTDs),以及如何使用这些数据结构实现USB主机功能。QH负责定义传输使用的USB地址和端点号,包含指向当前qTD的指针、qTD覆盖区域...

    多普达D600活力版SPL修复软件

    标题中的“多普达D600活力版SPL修复软件”指的是针对多普达D600手机的一个特别版本的系统程序加载器(System Program Loader,简称SPL)的修复工具。SPL是手机固件中的一部分,它在设备启动时运行,负责加载操作系统...

Global site tag (gtag.js) - Google Analytics