crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QtSql + Firebird, Реализация простого примера использования sql с firebird
hd_qt
  опции профиля:
сообщение 4.11.2008, 22:02
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 409

Спасибо сказали: 1 раз(а)




Репутация:   0  


Здравствуйте!
Хочу написать программу на QT (скачал и компилировал QT-4.4.3) (в Linux ) для работы с базой данных firebird (FirebirdSS-2.1.1.17910-0.i686).
Попробовал троллевский пример. Программа соединяется с БД и заполняет ее. Но QTableView не отображает содержимого (хотя при использовании SQLite все ок ).
Вот код:
Исходник
#include <QtGui>
#include <QtSql>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setHostName("localhost");
    db.setDatabaseName("mydb");
    db.setUserName("sysdba");
    db.setPassword("********");

    if (!db.open()) {
        QMessageBox::critical(0, qApp->tr("Cannot open database"),
            qApp->tr("Unable to establish a database connection.\n"
                     "This example needs SQLite support. Please read "
                     "the Qt SQL driver documentation for information how "
                     "to build it.\n\n"
                     "Click Cancel to exit."), QMessageBox::Cancel);
        return 1;
    }

    QSqlQuery query;
    query.exec("create table person (ID INTEGER primary key, "
               "firstname varchar(20), lastname varchar(20))");
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");
    query.exec("insert into person values(103, 'Lars', 'Gordon')");
    query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
    query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");

    QSqlTableModel *model;
    model = new QSqlTableModel(&app, db);
    model->setTable("person");
    model->select();
    model->submitAll();

    QTableView view;
    view.setModel(model);

    QHBoxLayout layout;
    layout.addWidget(&view);

    QWidget window;
    window.setWindowTitle("Table");
    window.setLayout(&layout);
    window.show();

    return app.exec();
}


Помогите найти решение, пожалуйста.
Причина редактирования: оборачивайте длинный код в тэг expand
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.11.2008, 22:16
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(hd_qt @ 5.11.2008, 1:02) *
model->submitAll();
Эта строчка лишняя.

hd_qt, скажи у тебя демка demos\sqlbrowser работает? Т.е. ты в ней можешь селекты делать?

ещё такой вопрос, как ты узнал что:
Цитата(hd_qt @ 5.11.2008, 1:02) *
Программа соединяется с БД и заполняет ее
?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hd_qt
  опции профиля:
сообщение 4.11.2008, 22:25
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 409

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 4.11.2008, 22:09) *
строчка model->submitAll(); лишняя.

С ней и без нее одинаково.
Цитата(Litkevich Yuriy @ 4.11.2008, 22:09) *
hd_qt, скажи у тебя демка demos\sqlbrowser работает? Т.е. ты в ней можешь селекты делать?

Что то не могу такой демки найти :search:


Цитата(Litkevich Yuriy @ 4.11.2008, 22:16) *
ещё такой вопрос, как ты узнал что: Программа соединяется с БД и заполняет ее?

В консоле с помощью isql
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.11.2008, 22:32
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


я не знаю где в лине лежат потроха Qt'явые, но где-то рядом с примерами должны быть examples



можно переделать под FB, пример examples\sql\cachedtable, только ты его скопируй куда-нибудь и там надним издевайся и pro-файл подправь, чтобы бинарь создавался не в каталоге с примерами.

я не вижу никаких проблем в коде, может, потому что время познее и спать пора.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hd_qt
  опции профиля:
сообщение 4.11.2008, 22:41
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 409

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 4.11.2008, 22:32) *
я не знаю где в лине лежат потроха Qt'явые, но где-то рядом с примерами должны быть examples

Там нет браузера.

Цитата(Litkevich Yuriy @ 4.11.2008, 22:32) *
можно переделать под FB, пример examples\sql\cachedtable, только ты его скопируй куда-нибудь и там надним издевайся и pro-файл подправь, чтобы бинарь создавался не в каталоге с примерами.

Я его и переделал :)

Цитата(Litkevich Yuriy @ 4.11.2008, 22:32) *
я не вижу никаких проблем в коде, может, потому что время познее и спать пора.

Я пробовал его утром, но никак не получалось. вот хотел спросить было ли у кого подобное, или мож все таки я что не так делаю.
А сейчас в общем то актуально :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.11.2008, 23:13
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(hd_qt @ 5.11.2008, 1:41) *
Я его и переделал
надо было все оставить как есть, только поменять драйвер и имя БД, а ты все в один файл.

Цитата(hd_qt @ 5.11.2008, 1:41) *
Там нет браузера.
это касяк, а вообще каталог demos есть? Это стандартный пример у тролей, они его всем рекомендуют для проверки работы с БД и доступности драйвера.

Вобщем могу на ночь глядя дать только такую рекомендацию:
в pro-файл добавь
CONFIG += console debug

затем
qmake
make

тогда у тебя в консоль ошибок Qt будет сама писать если что-то нетак с БД и т.п.
(применительно к Линуху незнаю куда именно вывод будет может в стандартную <Ctrl>+<F10> или в IDE где-то)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hd_qt
  опции профиля:
сообщение 5.11.2008, 9:37
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 409

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 4.11.2008, 23:13) *
надо было все оставить как есть, только поменять драйвер и имя БД, а ты все в один файл.

Делал и так (переделал для того, что бы код вам предоставить). QTableView отображает только заголовок (поля таблицы БД), а содержимое нет.

Цитата(Litkevich Yuriy @ 4.11.2008, 23:13) *
это касяк, а вообще каталог demos есть? Это стандартный пример у тролей, они его всем рекомендуют для проверки работы с БД и доступности драйвера.

Есть. Нашел этот браузер))) он правильно все показывает и отображает все мои таблицы БД)))))
А вот этот пример не хочет ничего делать((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.11.2008, 11:06
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(hd_qt @ 5.11.2008, 12:37) *
А вот этот пример не хочет ничего делать((
что-то у меня было подобное на этапе освоения Qt+БД вещь была банальная.

Ты консоль прицепи в ней явно увидишь что не так.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hd_qt
  опции профиля:
сообщение 6.11.2008, 21:06
Сообщение #9


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 409

Спасибо сказали: 1 раз(а)




Репутация:   0  


Ничего он в консоль не выводит :(
Мог ли бы кто-нить прислать простенький "работающий" пример использующий драйвер QIBASE с отображением в QTableView?
Или все таки указать мне мою ошибку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hd_qt
  опции профиля:
сообщение 6.11.2008, 21:49
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 409

Спасибо сказали: 1 раз(а)




Репутация:   0  


Заработало вот так вот:

#include <QtGui>
#include <QtSql>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setHostName("localhost");
    db.setDatabaseName("mydb");
    db.setUserName("sysdba");
    db.setPassword("******");

    if (!db.open()) {
        QMessageBox::critical(0, qApp->tr("Cannot open database"),
            qApp->tr("Unable to establish a database connection.\n"
                     "This example needs SQLite support. Please read "
                     "the Qt SQL driver documentation for information how "
                     "to build it.\n\n"
                     "Click Cancel to exit."), QMessageBox::Cancel);
        return 1;
    }


    QSqlQuery query;
    query.exec("create table person (id int primary key, "
               "firstname varchar(20), lastname varchar(20))");
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");
    query.exec("insert into person values(103, 'Lars', 'Gordon')");
    query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
    query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");

    QSqlQueryModel model;
    model.setQuery(QSqlQuery("select * from person;"));

    QTableView view;
    view.setModel(&model);

    QHBoxLayout layout;
    layout.addWidget(&view);

    QWidget window;
    window.setWindowTitle("Table");
    window.setLayout(&layout);
    window.show();

    return app.exec();
}


т.е. с использованием QSqlQueryModel, а с QSqlTableModel нехочет. пока... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 13:13