Qt远程连接Oracle数据库

一:代码

[cpp] view plaincopyprint?
    1. /**连接Oracle数据库 
    2.   *数据库名:abc 
    3.   *表名:my_oracle 
    4.   *用户名:system 
    5.   *密码:123 
    6.   *端口号:(默认)1521 
    7. */  
    8. void MainDialog::connectOracle(QString sIp, int iPort,  QString sDbNm, QString sUserNm, QString sPwd)  
    9. {  
    10.     db = QSqlDatabase::addDatabase("QOCI");  
    11.     db.setHostName(sIp);  
    12.     db.setPort(iPort);  
    13.     db.setDatabaseName(sDbNm);  
    14.     db.setUserName(sUserNm);  
    15.     db.setPassword(sPwd);  
    16.     if (db.open())  
    17.     {  
    18.         QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接成功!"), tr("确定"));  
    19.     }  
    20.     else  
    21.     {  
    22.         QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接失败!"), tr("确定"));  
    23.         qDebug() <<"error_Oracle:\n" << db.lastError().text();  
    24.     }  
    25. }  

二:连接过程遇到的问题。

问题1:

QSqlDatabase: QOCI driver not loaded

QSqlDatabase:available drivers: QSQLITE QODBC3 QODBC

(1)出错原因:本连接是通过QMYSQL驱动,而Qt本身并没有QOCI驱动(只有QSQLITE QODBC3 QODBC),

       所以就需要自己编译QOCI

(2)编译QOCI驱动。

   1.go to "Qt Command Prompt" window. (开始-程序-对应的qt项里面去找)。

   2.qmake "INCLUDEPATH+=c:\oracle\oci\include" "LIBS+=-Lc:\oracle\oci\lib\msvc" oci.pro

   3.qmake "INCLUDEPATH+=D:\oracle_setup\app\admin\product\11.1.0\db_3\OCI\include" "LIBS+=-LD:\oracle_setup\app\admin\product\11.1.0\db_3\OCI\lib\msvc" oci.pro

   4.mingw32-make


问题2:

出现错误:

D:\qt_sdk\qt\src\plugins\sqldrivers\oci>mingw32-make
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'
mingw32-make[1]: Nothing to be done for `all'.
mingw32-make[1]: Leaving directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'
mingw32-make -f Makefile.Release all
mingw32-make[1]: Entering directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'
mingw32-make[1]: Nothing to be done for `all'.
mingw32-make[1]: Leaving directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'

出错原因:这个问题表示QOCI驱动已经被编译过了!!!

 

问题3:

"ORA-12541: TNS: 无监听程序
Unable to logon"

(1)原因:服务里边的OracleOraDb11g_home3TNSListenener未启动。

(2)解决:启动OracleOraDb11g_home3TNSListenener.


问题4:

服务里边的OracleOraDb11g_home3TNSListenener启动后总是自己关闭,导致一直无法监听

(1)原因:因为昨天关机之前我改了主机名。

(2)解决:打开listener.ora内容:
         将(ADDRESS = (PROTOCOL = TCP)(HOST = 原主机名)(PORT = 1521))
         改为:(ADDRESS = (PROTOCOL = TCP)(HOST = 新主机名)(PORT = 1521))
         ok啦!/
         再启动服务。
         启动tnslsnr,成功啦!

 

问题5:

"ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID
Unable to logon"

解决:打开tnsnames.ora内容:
     将(ADDRESS = (PROTOCOL = TCP)(HOST = 原主机名)(PORT = 1521))
     改为:(ADDRESS = (PROTOCOL = TCP)(HOST = 新主机名)(PORT = 1521))
     ok啦

 

问题6:

安装Oracle数据库时报错:ORA-28056: Writing audit records to Windows Event Log failed安装Oracle数据库时报错:ORA-28056: Writing audit records to Windows Event Log failed

解决办法:

1、打开windows 事件查看器

2、在左侧应用程序上点击右键,打开属性。

3、当达到最大文件时,选择按需要改写事件;同时点击清除日志按钮。

4、点击确定。

5、重新运行database configuration assistant,配置数据库。

 

问题7:

ORA-12560: TNS: 协议适配器错误

3个原因,找到对应的解决问题:

1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。

2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的database SID.

3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下输set oracle_sid=XXXX,XXXX就是你的database SID.
经过以上步骤,就可以解决问题

 

 

三:远程连接

(1)建一个sqldrivers文件夹,将oraociei11.dll放进去。

(2)到工程的exe文件同目录下,把sqldrivers文件夹和oci.dll放进去。

(3)将整个程序发到客户端。

你可能感兴趣的:(Qt远程连接Oracle数据库)