Люди только не пинайте по лицу ногами! Знаю что вопрос обсуждался сотни раз. Но никак не получается у меня подключиться к базе Oracle 10g! Использую коммерческую Qt 4.2.0 (проинтегрированная в VS 2005), ну соответственно Windows XP, поставил клиента Oracle 10g (XEClient, c:\XEClient).
1) Создал папку в c:\XEClient, network\admin туда поместил файл tnsnames.ora, со следующим содержимым:
db_name=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip_adres)(PORT = 1521)))
(CONNECT_DATA =(SERVER = DEDICATED)(SID = db_name)))
2) Собрал драйвер для Oracle:
2.1. В командной строке VS 2005 command Prompt, прописал следующее:
set INCLUDE=%INCLUDE%;c:\XEClient\oci\include
set LIB=%LIB%;c:\XEClient\oci\lib\msvc
cd %QTDIR%\src\plugins\sqldrivers\oci
qmake -o Makefile oci.pro
nmake
В папке C:\Qt\4.2.0\plugins\sqldrivers, появились файлы: qsqloci.dll, qsqloci.dll.manifest, qsqloci.lib.
3) Создал проект Qt application.
3.1. Создал файл для подключения connection.h.
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setUserName("user_name");
db.setPassword("password");
db.setHostName("ip");
db.setPort(1521);
db.setDatabaseName("db_name");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs OCI support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
return false;
}
return true;
}
#endif
3.2. Создал файл testdb.pro
TARGET = DB
HEADERS = testdb.h connection.h
SOURCES = main.cpp testdb.cpp
FORMS = db.ui
build_all:!build_pass {
CONFIG -= build_all
CONFIG += debug_and_release
}
3.3. в папку c:\Windows\system32, положил oci.dll из клиента
3.4. откомпилировал
в VS 2005 prompt набрал set PATH=%PATH%;c:\XEClient\bin
затем qmake -o Makefile testdb.pro
затем nmake
Проверял на SqlPlus (клиента Oracle), коннект происходит, базу вижу и работаю с ней. НО ПРИЛОЖЕНИЕ МОЕ testdb.exe подсоединяться к базе не хочет!:( Захожу под debug и смотрю output, подцепляет ли мое приложение драйвер в итоге нахожу там строчки:
'testdb.exe': Loaded 'C:\Qt\4.2.0\plugins\sqldrivers\qsqloci.dll', Binary was not built with debug information.
'testdb.exe': Loaded 'C:\WINDOWS\system32\oci.dll', Binary was not built with debug information.И в конце необъяснимым образом вот эти строки:
QSqlDatabase: QOCI driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC QPSQL7 QPSQL.
Делаю вывод, что все же приложение мое не подгружает драйвер, ВОПРОС ПОЧЕМУ, ведь он подгружает нужные DLL?
Пробую после сборки драйвера запустить приложение тролей из demos (sqlbrowser.exe). В списке появляется драйвер, но при попытке подключения к базе выдается следующее сообщение:
Failed to open database: QOCI: Unable to logon
ORA-12154: TNS:could not resolve the connect identifier specified( Люди помогите пожалуйста, что я делаю не так? Запарился прям уже:(