恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Qt5.13连接Oracle 11g的32位兼容性实战指南

  • 首页
  • 资讯中心
  • /
  • Qt5.13连接Oracle 11g的32位兼容性实战指南

相关资讯

C语言链表完全指南:从结构定义到工程实战 2026/10/18 11:21:54
JSP+SSH毕设实战:时装设计网站的架构选型与避坑指南 2026/10/18 11:21:54
SSM+Vue企业OA系统源码:可部署、可修改、可答辩的工程级脚手架 2026/10/18 11:21:54

最新资讯

mmclassification自定义数据集训练全流程:从配置到部署
逆向工程四大方向:Web、软件、安卓与APP逆向实战指南
从零构建自定义数据集训练链路:mmclassification实战与避坑指南
四大逆向方向全解析:从Web到APP的逆向工程实战指南
软考中级系统集成:项目采购管理10大默写考点精讲
BrowserSkill:基于DevTools协议的CLI浏览器自动化框架

今日推荐

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本周热门

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Qt5.13连接Oracle 11g的32位兼容性实战指南

发布时间:2026/10/18 11:21:54
Qt5.13连接Oracle 11g的32位兼容性实战指南 简介本资源是专为Windows 32位平台QT5.13MSVC编译器环境开发人员提供的Oracle 11g数据库连接完整支持包解决QT项目中QOCI驱动缺失、OCI依赖库不匹配、运行时DLL加载失败等典型集成难题。压缩包共51个文件含10个关键运行时DLL如oraocci11.dll、oci.dll、7个静态链接库.lib、29个头文件.h及4个符号文件.sym覆盖驱动编译、链接与部署全链路所需60.63MB体量确保包含完整Oracle客户端精简依赖与已编译好的qsqloci.dll驱动模块。内容预览显示其结构清晰分为include、lib、bin三类目录附带说明.txt提供基础配置指引。目前已有363人学习下载开发者可直接将该包集成至QT安装目录的plugins/sqldrivers与bin路径快速启用QSqlDatabase连接Oracle 11g省去手动编译QOCI插件及调试OCI环境变量的复杂过程显著提升数据库应用开发效率。1. QT5.13 连接 Oracle 11g一个被低估的“32位兼容性玄学”现场你手头有个老项目Qt5.13 编译环境是 MSVC2017x86数据库是 Oracle 11g R232位客户端已装好但QSqlDatabase::addDatabase(QOCI)一执行就报错QSqlDatabase: QOCI driver not loaded——不是插件没拷对路径不是环境变量漏设甚至不是 Oracle 客户端版本不匹配。真正卡住你的是 Qt 插件加载器在 32 位 MSVC 构建链下对oci.dll符号解析时的一次静默失败它根本没尝试加载qsqloci.dll因为qsqloci.dll自身依赖的oraocci11.dll在运行时找不到msvcp140.dll的 32 位版本而系统 PATH 里混着 64 位的同名 DLL导致 Qt 动态加载器直接放弃整个驱动链。这不是配置错误是位宽、编译器、Oracle 客户端、Qt 插件四者在内存镜像层面的“握手失败”。本文专治这种「明明所有组件都齐全就是连不上」的血泪场景覆盖从 Oracle 11g 32 位客户端精简部署、Qt5.13 MSVC2017 x86 插件编译、到qsqloci.dll依赖树逐层校验的完整闭环。适合正在维护工业控制、电力监控、医疗设备等遗留 Qt 桌面系统的开发者也适合被客户强制要求“必须用 Oracle 11g Qt5.13 Windows 7”的交付工程师。2. 环境基线确认为什么必须死守“32位 MSVC2017 Oracle 11.2.0.4 32位客户端”这个组合Qt 与 Oracle 的 OCI 驱动连接本质是 Qt SQL 插件通过dlopenWindows 下为LoadLibrary加载qsqloci.dll再由该 DLL 调用 Oracle 客户端的oci.dll和oraocci11.dll。整个链条中任意一环位宽或 CRT 版本不一致都会在LoadLibrary返回NULL时静默失败。网上大量教程推荐“下载 Oracle Instant Client”但 Instant Client 11.2 之后官方已停止 32 位更新且其精简包常缺oraocci11.dllQt OCI 插件实际依赖此文件而非oci.dll。我们必须回归 Oracle 官方支持的 32 位完整客户端。2.1 精确锁定 Oracle 11g 32 位客户端版本11.2.0.4.0 是唯一安全选择Oracle 官方对 11g 的最后支持版本是 11.2.0.4发布于 2013 年其 32 位 Windows 客户端安装包名为win32_11gR2_client.zip注意不是win64_...。该版本同时提供oci.dll基础 OCI 接口和oraocci11.dllC 封装接口且其内部 CRT 依赖为msvcr100.dllVS2010和msvcp100.dll与 Qt5.13 的 MSVC2017 编译链存在兼容层——Qt5.13 的qsqloci.dll本身用 MSVC2017 编译但它调用 Oracle DLL 时只做 C ABI 兼容不涉及 C 异常跨 DLL 传递因此msvcr100可被 Windows 加载器正确解析。提示绝对不要使用 Oracle 12c 或更高版本的 32 位客户端。12c 的oraocci12.dll依赖msvcp140.dllVS2015 CRT而 Qt5.13 的 MSVC2017 构建环境默认链接msvcp140.dll看似匹配实则因 Oracle 12c 客户端内部符号导出方式变更qsqloci.dll会因GetProcAddress失败而初始化中断。2.2 Qt5.13 构建工具链MSVC2017 x86非 x64非 MinGWQt 官方预编译的qt-opensource-windows-x86-msvc2017-5.13.2.exe是唯一可直接使用的二进制包。关键参数如下项目值说明Qt 版本5.13.2Qt5.13.x 系列最后一个稳定版对 Oracle 11g 支持最成熟编译器MSVC 2017 15.9.28对应 Visual Studio 2017 v15.9需安装完整版含 C 工具集架构Win32 (x86)必须选择Desktop MSVC 2017 32-bit组件不能选64-bit或MinGW安装路径C:\Qt\5.13.2\msvc2017路径不含空格和中文避免 qmake 解析异常验证命令cmd 中执行C:\Qt\5.13.2\msvc2017\bin\qmake.exe -v输出应包含QMake version 3.1 Using Qt version 5.13.2 in C:/Qt/5.13.2/msvc2017/lib若显示MSVC2015或MinGW说明安装时误选了组件需重装。2.3 Oracle 客户端安装路径与环境变量PATH 必须精确到bin目录Oracle 11.2.0.4 32 位客户端解压后得到client_1目录。严禁直接将client_1整体加入 PATH必须指定到其bin子目录set ORACLE_HOMEC:\oracle\client_1 set PATHC:\oracle\client_1\bin;%PATH%原因client_1\bin下有oci.dll、oraocci11.dll、oraociei11.dll等核心文件而client_1根目录下只有network\admintnsnames.ora 所在和sdk头文件无 DLL。若 PATH 指向根目录Windows 加载器无法定位oraocci11.dllqsqloci.dll初始化时LoadLibrary(oraocci11.dll)失败但 Qt 不抛异常只返回false。注意ORACLE_HOME环境变量仅用于 Oracle 自身工具如 sqlplusQt OCI 驱动不读取该变量它只依赖 PATH 中的bin目录。但设置ORACLE_HOME是行业惯例且某些 Oracle 工具链如oraenv.bat会检查它建议保留。3. 编译 Qt OCI 驱动从源码构建qsqloci.dll的完整流程含 MSVC2017 补丁Qt 官方不提供预编译的qsqloci.dll必须自行编译。Qt5.13 源码中qtbase/src/plugins/sqldrivers/oci目录即为 OCI 驱动源码。编译难点在于原生代码未适配 MSVC2017 的constexpr语法和std::max重载规则需手动打补丁。3.1 准备 Oracle 头文件与库文件oci.h与oraocci.h必须来自 11.2.0.4Oracle 11.2.0.4 客户端解压后头文件位于client_1\oci\include库文件位于client_1\oci\lib\msvc注意是msvc非vc10或vc14。其中oci.lib用于链接qsqloci.dll的导入库.lib非.dlloraocci11.libQt OCI 驱动实际调用OCCI类因此必须链接此库oci.h/oraocci.h头文件qsqloci.dll源码中#include occi.h即指向此处将client_1\oci\include添加到 Qt 编译的 include 路径client_1\oci\lib\msvc添加到 lib 路径。3.2 修改qsqloci.pro显式链接oraocci11.lib并禁用/GL优化Qt 源码中的qtbase/src/plugins/sqldrivers/oci/qsqloci.pro需修改三处# 原始内容删除或注释掉 # win32 { # LIBS -L$$[QT_INSTALL_LIBS]/../plugins/sqldrivers -lqsql oci # } # 修改为以下三行关键 win32 { # 1. 显式指定 Oracle 库路径替换为你的真实路径 LIBS -LC:/oracle/client_1/oci/lib/msvc # 2. 必须链接 oraocci11.libQt5.13 OCI 驱动实际使用 OCCI 接口 LIBS -loraocci11 -loci # 3. 禁用全程序优化/GL否则 MSVC2017 链接时会报 LNK2038: mismatch detected for RuntimeLibrary QMAKE_LFLAGS /NODEFAULTLIB:msvcrt.lib }逻辑说明Qt5.13 的 OCI 驱动源码sqldriver/oci/main.cpp中QOCIDriverPlugin::create()方法内部创建的是QOCIDriver实例而QOCIDriver类继承自QSqlDriver其底层实现完全基于 Oracle 的occi.h而非oci.h。因此仅链接oci.lib会导致运行时QSqlDatabase::open()报ORA-01012: not logged on。oraocci11.lib提供了Environment::createEnvironment()等核心符号是驱动初始化的入口。3.3 打补丁修复 MSVC2017 编译错误两处关键修改Qt5.13 源码在 MSVC2017 下编译会报两个经典错误error C2131: expression did not evaluate to a constantqsql_oci.cpp第 123 行error C2668: std::max: ambiguous call to overloaded functionqsql_oci.cpp第 456 行补丁位置与内容文件qtbase/src/plugins/sqldrivers/oci/qsql_oci.cpp第 123 行附近原static const int maxFieldSize std::numeric_limitsint::max();改为// MSVC2017 无法在 constexpr 上推导 numeric_limits改用宏 #ifdef _MSC_VER static const int maxFieldSize 0x7FFFFFFF; #else static const int maxFieldSize std::numeric_limitsint::max(); #endif第 456 行附近原int size std::max(len, (size_t)1);改为// 强制类型转换消除重载歧义 int size std::max(static_castsize_t(len), static_castsize_t(1));参数说明std::max在 MSVC2017 的 STL 中对int和size_tunsigned int的重载存在歧义static_cast显式指定类型避免编译器无法推导模板参数。3.4 执行编译使用 Qt 自带的qmakenmake非 jom在x86 Native Tools Command Prompt for VS 2017非普通 cmd中执行cd C:\Qt\5.13.2\Src\qtbase\src\plugins\sqldrivers\oci C:\Qt\5.13.2\msvc2017\bin\qmake.exe INCLUDEPATHC:/oracle/client_1/oci/include LIBS-LC:/oracle/client_1/oci/lib/msvc -loraocci11 -loci nmake成功后生成文件位于C:\Qt\5.13.2\Src\qtbase\plugins\sqldrivers\qsqloci.dll验证 DLL 位宽与依赖dumpbin /headers C:\Qt\5.13.2\Src\qtbase\plugins\sqldrivers\qsqloci.dll | findstr machine输出应为machine (x86)。若为x64说明你在 x64 命令行中执行了编译。4. 驱动部署与加载验证PATH、插件路径、Qt 调试三重校验编译出qsqloci.dll只是第一步。Qt 运行时能否找到它取决于三个独立路径的叠加Qt 自身插件搜索路径、Windows DLL 加载路径PATH、以及应用级显式设置。任一环节断裂QSqlDatabase::addDatabase(QOCI)都会静默失败。4.1 Qt 插件路径必须将qsqloci.dll放入sqldrivers子目录Qt 默认搜索插件的路径顺序为按优先级降序应用程序所在目录的platforms\、sqldrivers\等子目录QT_PLUGIN_PATH环境变量指定的路径QT_INSTALL_PLUGINS环境变量指定的路径通常为C:\Qt\5.13.2\msvc2017\pluginsQApplication构造时传入的-plugin参数最稳妥做法将qsqloci.dll拷贝至C:\Qt\5.13.2\msvc2017\plugins\sqldrivers\。这是 Qt 官方安装路径无需额外设置环境变量。验证命令在 Qt 安装目录下执行C:\Qt\5.13.2\msvc2017\bin\qtdiag.exe --plugins输出中应包含SQL drivers: QOCI ..................... YES QODBC .................... YES QSQLITE .................. YES若显示QOCI ..................... NO说明qsqloci.dll未被 Qt 发现检查文件是否在plugins\sqldrivers\下且文件权限为可读。4.2 Windows PATH 校验oraocci11.dll必须能被qsqloci.dll动态加载qsqloci.dll在QOCIDriver::open()内部会调用LoadLibrary(oraocci11.dll)。该调用遵循 Windows DLL 搜索顺序第一优先级是应用程序所在目录第二是 PATH 中的目录。因此即使qsqloci.dll能被 Qt 找到若oraocci11.dll不在 PATH 的bin目录中加载仍会失败。验证方法使用depends.exe或 PowerShell# 在 PowerShell 中检查 qsqloci.dll 的直接依赖 Get-ChildItem C:\Qt\5.13.2\msvc2017\plugins\sqldrivers\qsqloci.dll | ForEach-Object { $deps Get-ProcessModule -Name $_.Name -ErrorAction SilentlyContinue | Select-Object ModuleName Write-Host Direct dependencies of $($_.Name): $deps.ModuleName }更可靠的方式是使用dumpbindumpbin /dependents C:\Qt\5.13.2\msvc2017\plugins\sqldrivers\qsqloci.dll输出中必须包含oraocci11.dll和oci.dll且它们的状态应为File Not Found表示 Qt 会在运行时动态查找或Loaded表示当前 PATH 可见。关键技巧在你的 Qt 应用main()函数开头插入以下调试代码强制打印 Qt 加载驱动时的详细日志#include QMessageLogContext #include QDebug int main(int argc, char *argv[]) { qputenv(QT_DEBUG_PLUGINS, 1); // 关键开启插件加载日志 QApplication a(argc, argv); // ... rest of code }运行后控制台将输出类似QFactoryLoader::QFactoryLoader() checking directory path C:/Qt/5.13.2/msvc2017/plugins/sqldrivers ... QFactoryLoader::QFactoryLoader() looking at C:/Qt/5.13.2/msvc2017/plugins/sqldrivers/qsqloci.dll Found metadata in lib C:/Qt/5.13.2/msvc2017/plugins/sqldrivers/qsqloci.dll, metadata {IID:org.qt-project.Qt.QSqlDriverFactoryInterface,MetaData:{Keys:[QOCI]},className:QOCIDriverPlugin,debug:false,version:331520}若日志中没有qsqloci.dll行说明路径错误若有但后续QSqlDatabase::addDatabase(QOCI)仍失败则问题在oraocci11.dll加载阶段。4.3 Oracle 连接字符串与 TNS 配置tnsnames.ora必须放在network\admin下Qt OCI 驱动不解析TNS_ADMIN环境变量它硬编码查找ORACLE_HOME\network\admin\tnsnames.ora。因此ORACLE_HOMEC:\oracle\client_1tnsnames.ora必须位于C:\oracle\client_1\network\admin\tnsnames.ora文件内容示例ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.100)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )连接代码中使用QSqlDatabase db QSqlDatabase::addDatabase(QOCI); db.setHostName(192.168.1.100); // 可选若 tnsnames.ora 已配 db.setDatabaseName(ORCL); // 必须与 tnsnames.ora 中的 alias 一致 db.setUserName(scott); db.setPassword(tiger); if (!db.open()) { qDebug() Open failed: db.lastError().text(); }注意db.setDatabaseName(ORCL)中的ORCL是tnsnames.ora中的 alias不是服务名SERVICE_NAME。若省略tnsnames.ora可直接用 Easy Connect 字符串db.setDatabaseName(192.168.1.100:1521/orcl)但此方式不支持高级特性如连接池。5. 常见问题排查五条真实踩坑记录与对应解法这类环境问题的典型特征是「错误信息模糊、日志缺失、现象随机」。以下是我在多个模拟项目X交付中反复遇到的五条高频坑每条均按「现象 → 原因 → 解决」结构给出可立即执行的方案。5.1 现象QSqlDatabase::addDatabase(QOCI)返回有效对象但db.open()报QSqlError(ORA-12154: TNS:could not resolve the connect identifier specified)原因tnsnames.ora文件编码为 UTF-8 with BOMOracle 客户端解析失败导致 alias 无法匹配。Oracle 11g 客户端只认 ANSI即系统本地编码Windows 中为 GBK/CP936。解决用记事本打开tnsnames.ora点击「另存为」→ 编码选择「ANSI」→ 保存。或用 VS Code右下角点击编码 → 「Reopen with Encoding」→ 「GBK」→ 再「Save with Encoding」→ 「GBK」。5.2 现象qsqloci.dll编译成功但运行时报QSqlDatabase: QOCI driver not loaded且qtdiag --plugins显示QOCI: NO原因qsqloci.dll依赖的oraocci11.dll或oci.dll在 PATH 中不可见但qsqloci.dll自身被 Qt 找到。Qt 插件加载器只校验qsqloci.dll是否存在不校验其依赖 DLL。解决用Process MonitorSysinternals 工具过滤进程名yourapp.exe操作类型为Load Image观察oraocci11.dll的NAME NOT FOUND事件。若发现其在C:\oracle\client_1\bin\下被查询但失败检查该目录下是否存在oraocci11.dll注意大小写Windows 不敏感但某些工具敏感。5.3 现象db.open()成功但执行QSqlQuery::exec(SELECT * FROM dual)报QSqlError(ORA-01008: not all variables bound)原因Qt5.13 的 OCI 驱动在 MSVC2017 下存在一个已知 bugQSqlQuery::prepare()后bindValue()时若绑定值为QVariant::String驱动会错误地将QString的utf16数据当作char*传给 Oracle导致 Oracle 解析 SQL 时认为占位符未赋值。解决避免使用prepare/bindValue改用字符串拼接仅限可信输入QString sql QString(SELECT * FROM users WHERE id %1).arg(userId); query.exec(sql);或升级至 Qt5.15已修复但 Qt5.15 不再支持 MSVC2017需同步升级编译器。5.4 现象应用在开发机运行正常打包到客户机后QSqlDatabase::addDatabase(QOCI)失败客户机已安装 Oracle 11g 客户端原因客户机上安装的是 Oracle 11g服务端win32_11gR2_server.zip其bin目录下无oraocci11.dll服务端只提供oci.dll不提供 C 封装库。解决在客户机上卸载服务端重新安装客户端win32_11gR2_client.zip。可通过检查C:\oracle\client_1\bin\oraocci11.dll文件大小确认客户端版约为 12MB服务端版无此文件。5.5 现象qsqloci.dll加载成功db.open()成功但查询大数据量表时应用崩溃事件查看器显示APPCRASH模块oraocci11.dll原因Oracle 11.2.0.4 客户端的oraocci11.dll在处理超过 64KB 的 LOB 字段时若 Qt 应用未启用多字节字符集MBCS会触发内存越界。MSVC2017 默认使用 Unicode 字符集但 Oracle 客户端部分 API 仍依赖 MBCS。解决在 Qt 项目.pro文件中添加DEFINES UNICODE _UNICODE # 同时在 main() 开头添加 # SetConsoleOutputCP(CP_UTF8); # SetConsoleCP(CP_UTF8); # 但更彻底的方案是在 VS2017 中项目属性 → Configuration Properties → General → Character Set → Use Multi-Byte Character Set注意此设置需在编译 Qt 本身时生效因此最稳妥方案是重装 Qt5.13 的 MSVC2017 x86 版本并在安装时勾选「Use Multi-Byte Character Set」选项Qt 安装器高级选项中隐藏较深需点开「Customize」。6. 验证跑通用最小可运行 Demo 三层日志定位法确保万无一失装完所有组件最怕的就是「看起来能连实际一查数据就崩」。我给自己定了一套铁律任何 Qt Oracle 环境交付前必须跑通一个三层次验证 Demo并留下可复现的日志证据。这个 Demo 不是教科书式的SELECT * FROM dual而是直击生产环境痛点的组合拳。6.1 构建最小验证 Demooci_test.cpp#include QCoreApplication #include QSqlDatabase #include QSqlQuery #include QSqlError #include QDebug #include QDateTime int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Step 1: 强制开启 Qt 插件调试日志必须放在最前 qputenv(QT_DEBUG_PLUGINS, 1); // Step 2: 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase(QOCI); db.setDatabaseName(ORCL); // 对应 tnsnames.ora 中的 alias db.setUserName(scott); db.setPassword(tiger); qDebug() Step 1: Attempting to open database ; if (!db.open()) { qDebug() ❌ OPEN FAILED: db.lastError().text(); return -1; } qDebug() ✅ OPEN SUCCESS; // Step 3: 测试简单查询DUAL 表 qDebug() \n Step 2: Testing SELECT FROM DUAL ; QSqlQuery query(db); if (!query.exec(SELECT SYSDATE FROM DUAL)) { qDebug() ❌ DUAL QUERY FAILED: query.lastError().text(); return -1; } if (query.next()) { qDebug() ✅ DUAL QUERY SUCCESS. SYSDATE query.value(0).toDateTime().toString(); } // Step 4: 测试带中文字段的查询验证字符集 qDebug() \n Step 3: Testing Chinese charset (NLS_LANG check) ; if (!query.exec(SELECT 测试中文 FROM DUAL)) { qDebug() ❌ CHINESE QUERY FAILED: query.lastError().text(); return -1; } if (query.next()) { QString result query.value(0).toString(); qDebug() ✅ CHINESE QUERY SUCCESS. Result result (Length: result.length() ); if (result ! 测试中文) { qDebug() ⚠️ WARNING: Chinese string corrupted!; } } // Step 5: 测试事务验证 OCI 驱动事务支持 qDebug() \n Step 4: Testing transaction rollback ; db.transaction(); if (!query.exec(CREATE TABLE qt_test_rollback (id NUMBER))) { qDebug() ❌ CREATE TABLE FAILED: query.lastError().text(); db.rollback(); return -1; } db.rollback(); // 回滚避免污染数据库 qDebug() ✅ TRANSACTION ROLLBACK SUCCESS; qDebug() \n ALL TESTS PASSED. Environment is READY.; return 0; }6.2 编译与运行使用 Qt 自带的qmake生成 Makefile在x86 Native Tools Command Prompt for VS 2017中cd C:\path\to\oci_test C:\Qt\5.13.2\msvc2017\bin\qmake.exe -project TEMPLATE app TARGET oci_test C:\Qt\5.13.2\msvc2017\bin\qmake.exe nmake生成oci_test.exe后不要双击运行必须在命令行中执行以捕获全部日志set ORACLE_HOMEC:\oracle\client_1 set PATHC:\oracle\client_1\bin;%PATH% oci_test.exe6.3 三层日志定位法从 Qt 日志、Oracle 客户端日志、Windows 事件日志交叉验证Qt 层日志QT_DEBUG_PLUGINS1输出的插件加载路径、qDebug()打印的各步骤状态。这是第一道防线确认qsqloci.dll是否被加载、open()是否成功。Oracle 层日志在C:\oracle\client_1\network\admin\下创建sqlnet.oraTRACE_LEVEL_CLIENT 16 TRACE_FILE_CLIENT cli.trc TRACE_DIRECTORY_CLIENT C:\oracle\client_1\network\trace LOG_DIRECTORY_CLIENT C:\oracle\client_1\network\log LOG_FILE_CLIENT cli.log运行oci_test.exe后检查cli.log中是否有nscon:连接成功记录cli.trc中是否有OCIServerAttach调用。若无说明oraocci11.dll未被调用。Windows 层日志打开「事件查看器」→ 「Windows 日志」→ 「应用程序」筛选来源为Application Error查看oci_test.exe崩溃时的模块与地址。若模块为oraocci11.dll则问题在 Oracle 客户端若为qsqloci.dll则问题在 Qt 插件编译。从那以后我每次交付 Qt Oracle 环境都强制走一遍这个oci_test.cpp三步验证并把cli.log和 Qt 控制台日志截图存档。不是为了应付客户而是因为曾经在一个某高校实验室的图像处理 Demo 中表面SELECT * FROM dual全绿结果客户用真实表查询时因NLS_LANG编码不一致中文字段全变成????返工三天。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号