您的位置:首页 > 编程语言 > Qt开发

Qt远程连接Oracle数据库

2013-06-02 14:45 197 查看
一:代码

[cpp] view
plaincopyprint?

/**连接Oracle数据库
*数据库名:abc
*表名:my_oracle
*用户名:system
*密码:123
*端口号:(默认)1521
*/
void MainDialog::connectOracle(QString sIp, int iPort, QString sDbNm, QString sUserNm, QString sPwd)
{
db = QSqlDatabase::addDatabase("QOCI");
db.setHostName(sIp);
db.setPort(iPort);
db.setDatabaseName(sDbNm);
db.setUserName(sUserNm);
db.setPassword(sPwd);
if (db.open())
{
QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接成功!"), tr("确定"));
}
else
{
QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接失败!"), tr("确定"));
qDebug() <<"error_Oracle:\n" << db.lastError().text();
}
}

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

问题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)将整个程序发到客户端。

原文链接:/article/2964161.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: