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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите собрать плагин для Oracle  (Прочитано 8106 раз)
khda91
Гость
« : Февраль 06, 2012, 13:56 »

Помогите пожалуйста собрать плагин для Oracle 11.2.0.
Сам Oracle стоит на сервере, Qt установлено на клиенте, нужно собрать для клиента и для MinGW. Папка с Oracle'ом в общем доступе.
Пытаюсь сделать по документации:
Код:
set INCLUDE=%INCLUDE%; \\MAINSERVER\oraclexe\app\oracle\product\11.2.0\server\oci\include
set LIB=%LIB%; \\MAINSERVER\oraclexe\app\oracle\product\11.2.0\server\oci\lib\msvc

Выдает ошибки. Кто сталкивался с такой проблемой и может помочь?
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #1 : Февраль 06, 2012, 16:02 »

Добавил в файл  src\plugins\sqldrivers\oci\oci.pro  две строчки

Код:
INCLUDEPATH +=   f:/oracle/10.2/include
LIBS        += -Lf:/oracle/10.2/lib/msvc

Собралось без проблем.  Может все дело в либах ?  Серверный SDK отличается от клиентского ?  Попробуйте использовать для сборки библиотеки, идущие с клиентом.
Записан

khda91
Гость
« Ответ #2 : Февраль 09, 2012, 13:31 »

Плагины вроде собрал, но возникла проблема, которая здесь часто поднималась:
QOCIDriver: unable to create environment
" Unable to logon"
Вывел список доступных мне драйверов:
("QSQLITE", "QOCI8", "QOCI", "QODBC3", "QODBC")

Соединение с базой данных прописано следующим образом:
Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName("MainServer.domain.ru");
    db.setPort(1521);
    db.setDatabaseName("CRM_DATABASE");
    db.setUserName("ADMIN@MainServer");
    db.setPassword("domainpass");
    if(!db.open()) {
        qDebug() << db.lastError().text();
        qDebug() << QSqlDatabase::drivers();
    }

Что не верно?

А вообще возник следующий вопрос. Правильно ли я понимаю, что Oracle поддерживает только MS Visual Studio, или для Qt Creator все-таки можно собрать плагины с использованием MinGW?
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #3 : Февраль 09, 2012, 15:20 »

Код:
        db_conn_str =  ""
                "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %1)(PORT = %2)))"
                "(CONNECT_DATA =(SERVER = DEDICATED)(SID = %3)))";

        db = QSqlDatabase::addDatabase("QOCI");
        db.setUserName(ora_dbUser);
        db.setPassword(ora_dbPass);
        db.setDatabaseName(db_conn_str.arg(ora_ipAddr, ora_ipPort, ora_dbName));
       
        db.close();
        if (!db.open())
        {
            err = db.lastError();
            db = QSqlDatabase();
            qDebug() << err.text();
        }else{
           qDebug() << "db.open() = ok";
        }
Записан

lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #4 : Февраль 09, 2012, 15:52 »

А вообще возник следующий вопрос. Правильно ли я понимаю, что Oracle поддерживает только MS Visual Studio, или для Qt Creator все-таки можно собрать плагины с использованием MinGW?

Я успешно собирал qt480 static вместе с oci под windows в MinGW.

Конфигурировал с ключами
configure.exe -opensource -release -static -qt-sql-oci

Только незабудь предварительно подправить oci.pro  см пост выше

Одна проблема, все собранные приложения с подключенным модулем QtSql будут зависить от oci.dll
Записан

khda91
Гость
« Ответ #5 : Февраль 10, 2012, 13:33 »

Одна проблема, все собранные приложения с подключенным модулем QtSql будут зависить от oci.dll

Т.е. что бы это все работало нужно oci.dll скинуть в корень программы?

db_conn_str =  ""
                "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %1)(PORT = %2)))"
                "(CONNECT_DATA =(SERVER = DEDICATED)(SID = %3)))";

        db = QSqlDatabase::addDatabase("QOCI");
        db.setUserName(ora_dbUser);
        db.setPassword(ora_dbPass);
        db.setDatabaseName(db_conn_str.arg(ora_ipAddr, ora_ipPort, ora_dbName));

Можно ли прописать все это следующим образом?

Код:
        db = QSqlDatabase::addDatabase("QOCI");
        db.setUserName(ora_dbUser);
        db.setPassword(ora_dbPass);
        db.setDatabaseName(("DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %1)(PORT = %2)))
                (CONNECT_DATA =(SERVER = DEDICATED)(SID = %3)))"));

Я все задаюсь вопросом, что есть SID?
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #6 : Февраль 14, 2012, 12:54 »

Т.е. что бы это все работало нужно oci.dll скинуть в корень программы?
Можно, только cвязи c Ораклом не будет, не так вcе проcто.
Вcе равно придетьcя cтавить клиенткую чаcть.

Можно ли прописать все это следующим образом?
Код:
      db.setDatabaseName(("DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %1)(PORT = %2)))
                (CONNECT_DATA =(SERVER = DEDICATED)(SID = %3)))"));
Нет.


Я все задаюсь вопросом, что есть SID?
http://www.sql.ru/forum/actualthread.aspx?tid=111643
Записан

khda91
Гость
« Ответ #7 : Февраль 16, 2012, 09:20 »

Прописал все следующим образом:
Код:
QString ora_ipAddr = "MainServer.domain.ru";
    QString ora_ipPort = "1521";
    // QString ora_dbName = "PLSExtProc";
    QString ora_dbName = "PLSExtProc";
    QString db_cont_str = ""
            "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %1)(PORT = %2)))"
                            "(CONNECT_DATA =(SERVER = DEDICATED)(SID = %3)))";
    db.setUserName("ADMIN");
    db.setPassword("critexpass");
    db.setDatabaseName(db_cont_str.arg(ora_ipAddr, ora_ipPort, ora_dbName));
    if(!db.open()) {
        db = QSqlDatabase();
        qDebug() << db.lastError().text();
        qDebug() << QSqlDatabase::drivers();
    }
    else {
        qDebug() << "db.open() = ok";
    }

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("CRM_CONTACT");
    model->select();

    table->setModel(model);

На выход получил следующее:
Код:
QOCIDriver: unable to create environment
"Driver not loaded Driver not loaded"
("QSQLITE", "QOCI8", "QOCI", "QODBC3", "QODBC")
QOCIResult: unable to alloc error handle
QOCIResult: unable to alloc error handle
QSqlDatabasePrivate::database: unable to open database: " Unable to logon"
QOCIResult: unable to alloc error handle
~QOCIResult: unable to free statement handle
QOCIResult: unable to alloc error handle
~QOCIResult: unable to free statement handle

Что не так?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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