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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Linux] Qt 4.4 + PostgrSQL 8.3.1  (Прочитано 4973 раз)
Arceny
Гость
« : Июнь 04, 2008, 13:15 »

Программа изначально писалась на SQLite, но показывать нужно будет на PostgreSQL.

При попытке проверок возникли неокторые проблемы. При открытии БД с драйвером QPSQL ругается на
This version of PostgreSQL is not supported and may not work.
но БД открывает, а затем создаёт таблицы след. кодом:
Код:
bool sql::initDatabase() {
qDebug() << "sql::initDatabase()";
if(cnf->dbType=="QSQLITE") {
QFile file(cnf->dbName);
file.remove();
}
if(openDatabase()) {
QSqlQuery query;
query.exec("CREATE TABLE category ("
"id INTEGER PRIMARY KEY,"
"name VARCHAR(64) NOT NULL,"
"nth INTEGER NOT NULL,"
"items INTEGER)");
if(!checkQuery(query)) return false;
query.exec("CREATE TABLE disc ("
"id INTEGER PRIMARY KEY,"
"name VARCHAR(128) NOT NULL,"
"descr TEXT,"
"year INTEGER,"
"catid INTEGER NOT NULL,"
"type INTEGER,"
"FOREIGN KEY (catid) REFERENCES category)");// ON UPDATE CASCADE)");
if(!checkQuery(query)) return false;
query.exec("CREATE TABLE files ("
"id INTEGER PRIMARY KEY," // просто id записи
"name VARCHAR(1024) NOT NULL," // имя файла/директории (не путь)
"parentid INTEGER NOT NULL," // id записи родителя (директории), для верхнего уровня 0
"type INTEGER NOT NULL," // тип: директория или файл (тип файла по необходимости)
"size INTEGER NOT NULL," // размер
"date VARCHAR(20)," // дата файла, не обязательно
"metadata INTEGER," // ссылка на метаданные если нужно.
"discid INTEGER NOT NULL," // ссылка на диск к которому принадлежат файлы
"FOREIGN KEY(discid) REFERENCES disc)");
if(!checkQuery(query)) return false;
return true;
} else
return false;
}

На что в консоль ругается:

NOTICE:  CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "category_pkey" для таблицы "category"
NOTICE:  CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "disc_pkey" для таблицы "disc"
NOTICE:  CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "files_pkey" для таблицы "files"

То есть мой предполагаемый индекс id оказывается вообще ни у дел. Как мне решить эту проблемы? Если интересны исходнники то я выкладывал их в соседней теме, вот здесь: http://prog.org.ru/forum/index.php/topic,7298.0.html
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июнь 04, 2008, 18:50 »

Вам Qt написала

This version of PostgreSQL is not supported and may not work.

Значит неподдерживает. Юзайте 8.2

См:

http://trolltech.com/developer/task-tracker/index_html?id=203021&method=entry
http://trolltech.com/developer/task-tracker/index_html?id=206993&method=entry
http://trolltech.com/developer/task-tracker/index_html?id=207871&method=entry
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Arceny
Гость
« Ответ #2 : Июнь 04, 2008, 20:04 »

Вам Qt написала

This version of PostgreSQL is not supported and may not work.

Значит неподдерживает. Юзайте 8.2
Кстати если я запись в БД добавляю вручную то моя прогармма данные успешно воспринимает...

В http://trolltech.com/developer/task-tracker/index_html?id=207871&method=entry
написано что
2008-04-24 03:02 - Resolution set to 'Fixed'
« Последнее редактирование: Июнь 04, 2008, 20:06 от Arceny » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июнь 04, 2008, 21:08 »

В http://trolltech.com/developer/task-tracker/index_html?id=207871&method=entry
написано что
2008-04-24 03:02 - Resolution set to 'Fixed'

Да Fixed, А для какой версии?

Цитировать
Scheduled for   Not scheduled

К томуже, этот фикс не добавляет поддержку 8.3, а просто делает возможным использование последнюю поддерживаемую версию (8.2) вместо 6.0
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Arceny
Гость
« Ответ #4 : Июнь 04, 2008, 23:52 »

В общем разобрался, то что у меня орёт что не поддерживается - фигня, всё работает.

Проблема была в том что инициализация и создание таблиц с автоинкрементарным индексом на постгресе резко отличается. Ну и ещё он более требователен к типам данных и к ограничениям целостности типа NOT NULL. Но благодаря этому я обнаружил у себя в коде косяки, которые були успешно ликвидированы. Теперь различается только инициализацией для SQLite / PostgreSQL , а в остальном код естественно идентичен (только в поиске специфичный не-регистровый ilike для QSqlDatabase::driverName() == "QPGSQL"  используется)

З.Ы. Курсач почти готов
Записан
Arceny
Гость
« Ответ #5 : Июнь 04, 2008, 23:53 »

Осталось попробовать всё запустить и собрать под виндой и продемонстрировать преподу мощь кроссплатформенной разработки а не унылый C++ Builder & MS SQL...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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