Russian Qt Forum
Сентябрь 29, 2024, 18:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt 3.3.6 + Oracle 10g XE  (Прочитано 11753 раз)
TukiNov
Гость
« : Февраль 11, 2007, 00:51 »

Приветствую всех.
Есть две проблемки, и очень прошу помочь.
Проблема первая :
Есть линукс, на нём установлена Qt 3.3.6., есть ноутбук с виндой, они объеденены в сеть. На ноуте установлен Oracle 10g XE.
Для того чтобы собрать драйвер QOCI8, взял исходники и библиотеки из дистрибутива Oracle 10g XE, всё собралось на ура, дизайнер драйвер видит, а при запуске программы выдаёт следующее :
Код:

Failed to open database: QOCI: Unable to logon
ORA-12154: TNS:could not resolve the connect identifier specified

причём такое ощущение что он даже не пытается соединиться с ноутом(на нем пакеты не принимаются(фаервола нет)).
Проблема вторая :
Устанавливаю на ноут под виндой QT 3.3.6, использую как компилятор Borland C++ Builder 6, все делаю так же как и в лине, прописываю путь к инклудам оракла, к либам. делаю implib oci.lib oci.dll.
начинаю собирать. получаю следующее :
Код:

MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
    cd oci
    make -f Makefile
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
    ilink32 @MAKE0000.@@@
Turbo Incremental Link 5.60 Copyright (c) 1997-2002 Borland
Error: Unresolved external '_OCILogoff' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIHandleFree' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCITransStart' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIErrorGet' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCITransCommit' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCITransRollback' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIAttrGet' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIParamGet' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCILogon' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIServerVersion' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIDescriptorFree' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIHandleAlloc' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIStmtPrepare' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIBindByName' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIBindByPos' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIAttrSet' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIDescriptorAlloc' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIDefineByPos' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIStmtExecute' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIStmtFetch2' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIStmtGetPieceInfo' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIStmtSetPieceInfo' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIStmtFetch' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCILobGetLength' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCILobCharSetForm' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCILobRead' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
Error: Unresolved external '_OCIEnvCreate' referenced from C:\QT\3.3.6\PLUGINS\SRC\SQLDRIVERS\OCI\OBJ\QSQL_OCI.OBJ
** error 2 ** deleting ..\..\..\sqldrivers\qsqloci.dll
** error 1 ** deleting sub-oci
** error 1 ** deleting sub-sqldrivers
** error 1 ** deleting sub-plugins
The build process failed!

помогите плиз, срочно нада, диплом горит Улыбающийся
Записан
Tonal
Гость
« Ответ #1 : Февраль 11, 2007, 11:01 »

Посмотри какие имена экспортирует oci.dll с помощью tdump.
Записан
TukiNov
Гость
« Ответ #2 : Февраль 11, 2007, 12:35 »

вроде всё норм, а файлы на форуме прикреплять нельзя ?
Код:

000029E0  390 0185 OCILogoff
00002724  320 013F OCIHandleFree
и т.д.
Записан
Tonal
Гость
« Ответ #3 : Февраль 11, 2007, 13:31 »

Смотри, в сообщении линкера имя с подчерком,:
Error: Unresolved external '_OCILogoff'
А в импорте - OCILogoff, без.
Похоже не соответствует соглашения о вызовах...
Записан
TukiNov
Гость
« Ответ #4 : Февраль 11, 2007, 13:33 »

и что делать ?
Записан
Tonal
Гость
« Ответ #5 : Февраль 11, 2007, 14:18 »

Читать доку к клиенту оракла - вполне возможно нужно какой-нибудбдефайн для борланда указать...
Ну и гугль, на этот предмет...
Записан
nova
Гость
« Ответ #6 : Февраль 11, 2007, 20:05 »

Ранше у оракла в клиенте было две библиотеки, одна для линковки борландом, другая для студии.
А на счет линуха проверь установки орасле_хоме, налисие там в правильном месте tnsnames.ora, или пропиши TNS_ADMIN="полный путь к tnsnames.ora".
А шоб не думатьшо выдерать из оракла чтоб твоя программа работала пользуй оракловский instantclient.
Записан
TukiNov
Гость
« Ответ #7 : Февраль 12, 2007, 01:14 »

Цитата: "nova"
Ранше у оракла в клиенте было две библиотеки, одна для линковки борландом, другая для студии.
А на счет линуха проверь установки орасле_хоме, налисие там в правильном месте tnsnames.ora, или пропиши TNS_ADMIN="полный путь к tnsnames.ora".
А шоб не думатьшо выдерать из оракла чтоб твоя программа работала пользуй оракловский instantclient.

вообщем все сделал, не конектится. под виндой через sqlplus все норм, а вот прога не хоттит конектится Грустный
Хелп.

добавлено спустя 1 час 31 минуту:

 уффф, второй вопрос снят.
сделал : implib -a oci.lib oci.dll
правда oci.dll из 10g не доконца преобразовалась. А вот из 9i на ура.

Остался только первый вопрос Улыбающийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #8 : Февраль 12, 2007, 09:48 »

копай папку типа network/admin в Oracle на предмет tnsnames.ora
и самое первое заставь на клиентской машине конектится через Oracle Клиент
типа Enterprise Manager

еще проверь установку переменных типа
ORACLE_HOME
ORACLE_SID


PS: не часто в оракле приходится работать
Записан
nova
Гость
« Ответ #9 : Февраль 12, 2007, 20:37 »

Если я тебя правильно понял, то оракловский плугин у тебя грузится, а при попытке коннекта выскакивает ошибка и енто все под линухом.
В этом случае для  коннекта достаточно прописать например:
export TNS_ADMIN=/etc/oracle
и в этот каталог положить файл tnsnames.ora с веников
В коде при коннекте устанавливаеш userName,password и dbname.
причем dbnamе должен быть такой как прописан в tnsnames.ora
если в tnsnames.ora прописано
Код:

SALES =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.8.254)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sales)
    )
  )
aaaaa =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.8.254)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sales)
    )
  )

то в дбнаме можно прописать как "sales" так и "aaaaa" в данном примере это ссылки на одну базу Улыбающийся
Записан
TukiNov
Гость
« Ответ #10 : Февраль 13, 2007, 19:03 »

спасибо, помогло, прога терь запускается норм. А вод дизайнер при настройке дататабле выводит эту ошибку. бум думать.
Записан
nova
Гость
« Ответ #11 : Февраль 13, 2007, 19:55 »

Ну дык, дизайнер не видит TNS_ADMIN.
И думать нечего Улыбающийся
Записан
TukiNov
Гость
« Ответ #12 : Февраль 13, 2007, 19:56 »

и не увидит ?Улыбающийся
Записан
nova
Гость
« Ответ #13 : Февраль 13, 2007, 19:57 »

Почему?
Записан
TukiNov
Гость
« Ответ #14 : Февраль 19, 2007, 22:14 »

Народ, терь такая проблема :
В винде, на машине где оракл, в дизайнере кидаю на форму QDataTable, настраиваю соединение, все норм проходит, таблицы вижу, данные выводятся.
Собираю прогу, запускаю пишет : An eerror occurred while accessing the database
в логах listener.log :
Код:

TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 19-ФЕВ-2007 15:18:54

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

System parameter file is C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\listener.ora
Log messages written to C:\oraclexe\app\oracle\product\10.2.0\server\network\log\listener.log
Trace information written to C:\oraclexe\app\oracle\product\10.2.0\server\network\trace\listener.trc
Trace level is currently 0

Started with pid=1412
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.211.219)(PORT=1521)))
Listener completed notification to CRS on start

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW))
19-ФЕВ-2007 15:19:48 * service_register * xe * 0
19-ФЕВ-2007 15:20:00 * service_update * xe * 0
19-ФЕВ-2007 15:20:18 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)(CID=(PROGRAM=C:\test\test.exe)(HOST=NOTEBOOK)(USER=Tuki-Tuki))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.211.219)(PORT=1393)) * establish * XE * 0
19-ФЕВ-2007 15:20:18 * service_update * xe * 0
19-ФЕВ-2007 15:20:21 * service_update * xe * 0
19-ФЕВ-2007 15:20:33 * service_update * xe * 0
19-ФЕВ-2007 15:21:06 * service_update * xe * 0
19-ФЕВ-2007 15:21:40 * service_update * xe * 0


Коннект к базе :
Код:

#include <qapplication.h>
#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <iostream.h>
#include "form1.h"
#define DB_ORDERS_DRIVER    "QOCI8"
#define DB_ORDERS_DBNAME    "XE"
#define DB_ORDERS_USER      "ASONIKA_CH"
#define DB_ORDERS_PASSWD    "NADEGNOST"
#define DB_ORDERS_HOST      "192.168.211.219"


    bool createConnections()
    {
        QSqlDatabase *oracle = QSqlDatabase::addDatabase( DB_ORDERS_DRIVER, "ORACLE" );
        oracle->setDatabaseName( DB_ORDERS_DBNAME );
        oracle->setUserName( DB_ORDERS_USER );
        oracle->setPassword( DB_ORDERS_PASSWD );
        oracle->setHostName( DB_ORDERS_HOST );
        if ( ! oracle->open() ) {
            qWarning( "Failed to open orders database: " + oracle->lastError().text() );
            return FALSE;
        }
return TRUE;
    }
int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    Form1 w;
    createConnections();
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}

listener.ora :
Код:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = XE)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = XE)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.211.219)(PORT = 1521))
    )
  )
DEFAULT_SERVICE_LISTENER = (XE)

tnsnames.ora
Код:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.211.219)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )


В чём проблема ?

добавлено спустя 5 часов 53 минуты:

 вот ещё логи :
Код:

19-ФЕВ-2007 21:27:56 * service_register * xe * 0
19-ФЕВ-2007 21:28:07 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)(CID=(PROGRAM=C:\test\test.exe)(HOST=NOTEBOOK)(USER=Tuki-Tuki))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.10.0.2)(PORT=1138)) * establish * XE * 0
19-ФЕВ-2007 21:28:08 * service_update * xe * 0
19-ФЕВ-2007 21:28:14 * service_update * xe * 0
19-ФЕВ-2007 21:28:31 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)(CID=(PROGRAM=C:\test\test.exe)(HOST=NOTEBOOK)(USER=Tuki-Tuki))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.10.0.2)(PORT=1139)) * establish * XE * 0
19-ФЕВ-2007 21:28:32 * service_update * xe * 0
19-ФЕВ-2007 21:28:35 * service_update * xe * 0
19-ФЕВ-2007 21:28:38 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)(CID=(PROGRAM=C:\test\test.exe)(HOST=NOTEBOOK)(USER=Tuki-Tuki))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.10.0.2)(PORT=1140)) * establish * XE * 0
19-ФЕВ-2007 21:28:38 * service_update * xe * 0
19-ФЕВ-2007 21:28:41 * service_update * xe * 0
19-ФЕВ-2007 21:28:43 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)(CID=(PROGRAM=C:\test\test.exe)(HOST=NOTEBOOK)(USER=Tuki-Tuki))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.10.0.2)(PORT=1141)) * establish * XE * 0
19-ФЕВ-2007 21:28:44 * service_update * xe * 0
19-ФЕВ-2007 21:28:47 * service_update * xe * 0


как я понимаю listener видит что прога коннектится, так почему же соединение не устанавливается?

добавлено спустя:

 ой, извините, тупил. всё, терь пока всё работает Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 23.