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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Oracle 11g + instant client(не выполняются sql запросы)  (Прочитано 4059 раз)
michael_ky
Гость
« : Декабрь 02, 2011, 00:39 »

К сожалению, являюсь абсолютным новичком в области баз данных и, возможно, не с того начинаю, но попробовал написать пару строчек(большей частью примеры из шлее) для работы с oracle.
Код:
int main (int argc, char ** argv)
{
    QCoreApplication app(argc, argv);
    app.addLibraryPath("C:\Instant_client");;

    QSqlDatabase base = QSqlDatabase::addDatabase("QOCI");

    base.setDatabaseName("XE");
    base.setUserName("michael");
    base.setHostName("192.168.0.100");
    base.setPassword("password");

    if(!base.open()) qDebug() << "Cannot connect oracle!\n";
    else qDebug() << "Connected!\n";

    QSqlQuery query(base);
    QString ins_str = "SELECT * FROM addressbook;";
    //query.prepare(ins_str);
    if(query.exec(ins_str)) qDebug() << "Successful SELECT!\n";
    else qDebug() << "Failed SELECT!\n";

    QSqlRecord rec = query.record();
    int cell;
    QString name;

    while(query.next())
    {
        cell = query.value(rec.indexOf("cell")).toInt();
        name = query.value(rec.indexOf("name")).toString();

        qDebug() << cell << " " << name << "\n";
    }

    qDebug() << base.lastError();
    return 0;
}

Имею oracle 11g express, также instant client. Qoci подключился. К базе вроде как подключен, но селект не выполняется, впрочем как и create table. lastError() ошибок не выдал. Явно делаю какую-то ерунду, но не могу понять где.
Через sqlplus command line создал таблицу с двумя полями, забил её парой значений, закомитил и хотел бы вывести в qt. Своему логину выдал необходимые права.
Если возможно хотелось бы услышать как я должен поступить по порядку, включая самые элементарные вещи.
Ну и пара глупых вопросов:
Достаточно ли просто создать подключение как в коде для работы с парой таблиц? Или необходимо открывать что-то дополнительно?
При создании таблиц с sql command line oracle они автоматически сохраняются на жестком диске?
Когда установил сервер бд, то практически ничего не задавал, listener и tnsnames сгенерированы автоматически, мне нужно добавлять свои сервисы и указывать, например, global_bdname? Или я могу пользоваться теми, что по умолчанию?
Надеюсь на помощь. Спасибо.
« Последнее редактирование: Декабрь 02, 2011, 17:12 от michael_ky » Записан
kowsan
Гость
« Ответ #1 : Декабрь 02, 2011, 06:54 »

Все должно работать.
Единственное, что меня смущает
Код:
 app.addLibraryPath("C:\Instant_client");
замени на

Код:
 app.addLibraryPath("C:/Instant_client");
Ну и я бы немного по-другому написал твой код.
В частности
Код:
QString ins_str = "SELECT * FROM addressbook;";
select * плохой тон.
Записан
michael_ky
Гость
« Ответ #2 : Декабрь 02, 2011, 15:18 »

с базой соединен, сделать ничего не могу. В чем проблема?
Кто-нибудь использует instant client?(и как кстати узнать используется он или нет?)
« Последнее редактирование: Декабрь 02, 2011, 17:14 от michael_ky » Записан
michael_ky
Гость
« Ответ #3 : Декабрь 02, 2011, 17:29 »

ну, оперный театр... проверился qsqlquery::isValid() оказалось ";" была перебором. я уж .ora перекапывать хотел)
Записан
MoPDoBoPoT
Гость
« Ответ #4 : Декабрь 02, 2011, 19:59 »

оказалось ";" была перебором
Ну да, оракл защищается от возможных sql-инъекций (чтобы нельзя было несколько операторов выполнить).
Записан
michael_ky
Гость
« Ответ #5 : Декабрь 03, 2011, 15:52 »

Таблицы выводит,всё изумительно.
Только после того как прикрутил интерфейс, пропали все драйвера из списка доступных. Это с чем может быть связано?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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