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
[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
相关文章推荐
- Qt远程连接Oracle数据库
- PLSQL连接远程ORACLE数据库
- PL/SQL Developer 连接远程Oracle数据库
- ASP.NET连接远程Oracle数据库,提示试图加载格式不正确的程序
- 使用PLSQL连接远程的Oracle数据库
- Java中通过JDBC远程连接Oracle数据库
- 在没有安装oracle数据库的情况下用PL/SQL远程连接
- Oracle数据库的创建以及远程连接(PL/SQL Developer远程连接数据库)
- Ubuntu使用Oracle客户端(sqlplus)远程连接Oracle数据库
- .net程序远程连接Oracle数据库
- C#远程连接Oracle数据库(通过System.Data.OracleClient)
- QT连接接Oracle数据库大盘点
- PL/SQL Developer远程连接Oracle数据库(可以使用)
- PLSQLDeveloper连接远程Oracle数据库
- 使用QT连接Oracle数据库总结
- PLSQL Developer远程连接oracle数据库经验
- 远程连接oracle数据库
- PL/SQL Developer 连接远程Oracle数据库
- linux下qt开发的mysql工具远程连接问题总结
- oracle tns 文件,方便连接远程oracle数据库