Russian Qt Forum

Qt => Базы данных => Тема начата: crystal_ship от Январь 22, 2016, 18:29



Название: Qt 5.4.2 + Oracle 10g
Отправлено: crystal_ship от Январь 22, 2016, 18:29
Помогите, пожалуйста, с ошибкой
Код:
qDebug() << QSqlDatabase::drivers();
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("MYDATABA");
    db.setUserName("SYSTEM");
    db.setPassword("qqqq");
    db.setPort (1521);   
    if (!db.open())
    {
      qDebug() << db.lastError();
    }

В результате получаю:

 
Код:
("QSQLITE", "QMYSQL", "QMYSQL3", "QOCI", "QOCI8", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
QOCIDriver: unable to create environment
QSqlError("2685564", "Unable to logon", "")
Unable to free Error handle: -2
Unable to free Environment handle: -2

Что только не пробовала из советов интернете, не мгу понять в чем проблема :( Может, кто-нибудь подскажет разумное решение или хот я бы возможную причину ошибки?

Заранее спасибо!


Название: Re: Qt 5.4.2 + Oracle 10g
Отправлено: kai666_73 от Январь 22, 2016, 19:16
Ну для начала попробуйте соединиться с помощью sqlplus - если не получится, то хоть его выхлоп можно будет проанализировать...


Название: Re: Qt 5.4.2 + Oracle 10g
Отправлено: crystal_ship от Январь 22, 2016, 19:40
Ну для начала попробуйте соединиться с помощью sqlplus - если не получится, то хоть его выхлоп можно будет проанализировать...

в sql developer соединение создается и работает все , а вот в Qt уже появляются ошибки


Название: Re: Qt 5.4.2 + Oracle 10g
Отправлено: kai666_73 от Январь 25, 2016, 12:31
Ну для начала попробуйте соединиться с помощью sqlplus - если не получится, то хоть его выхлоп можно будет проанализировать...

в sql developer соединение создается и работает все , а вот в Qt уже появляются ошибки
Уверены что sql developer использует OCI? Вполне может быть он использует ODBC. Попробуйте все же sqlplus.
Что касается Qt-приложения - попробуйте собрать в debug, установить системную переменную QT_DEBUG_PLUGINS=1 и проанализируйте выхлоп в консоль.


Название: Re: Qt 5.4.2 + Oracle 10g
Отправлено: Tamori Nao от Январь 25, 2016, 15:27
Перекинь библиотеки драйверов оракла в папку где собирается прога


Название: Re: Qt 5.4.2 + Oracle 10g
Отправлено: ssoft от Январь 26, 2016, 08:05
Подключения к БД oracle можно выполнить двумя способами.

По SID

Код
C++ (Qt)
QSqlDatabase database = QSqlDatabase::addDatabase( "QOCI", "SchemeName" );
 
database.setDatabaseName( sid );
database.setHostName( host );
database.setPort( port );
database.setUserName( user );
database.setPassword( password );
 

По Service name (текст в методе setDatabaseName не должен содержать пробелов)

Код
C++ (Qt)
QSqlDatabase database = QSqlDatabase::addDatabase( "QOCI", connection_name );
 
database.setDatabaseName(
   QString::fromUtf8( "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%1)(PORT=%2))(CONNECT_DATA=(SERVICE_NAME=%3)))" )
       .arg( host )
       .arg( port )
       .arg( name );
database.setHostName( QString() );
database.setPort( int()  );
database.setUserName( user );
database.setPassword( password );
 

И вроде как, connection_name не должно быть пустым.