crossplatform.ru

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

Rocky
  опции профиля:
сообщение 4.3.2010, 17:09
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Всем привет!

Пытаюсь создать таблицу в PostgreSQL и одно из полей сделать PK.
Пробую так:
bRetVal = oQuery.exec(QString("CREATE TABLE tab (ID BIGSERIAL, "
":Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3, "
"PRIMARY KEY (ID));"));
//bRetVal == true

bRetVal = oQuery.prepare(QString("INSERT INTO tab VALUES(" 
        ":Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3, "
        ");"));
//bRetVal == true


//Потом
oQuery.bindValue(":Pict_ID_1_1", 1);
oQuery.bindValue(":Pict_ID_2_1", 2);
oQuery.bindValue(":Pict_ID_3_1", 3);

bRetVal =oQuery.exec();
//bRetVal == false


Пробовал через sequence:
bRetVal = oQuery.exec(QString("CREATE SEQUENCE tab_sq START WITH 1"));
//bRetVal == true

bRetVal = oQuery.exec(QString("CREATE TABLE BananasGoBahamas (ID DEFAULT NOT NULL nextval('tab_sq') PRIMARY KEY, "
        "Pict_ID_1_1 INTEGER, Pict_ID_1_2 INTEGER, Pict_ID_1_3 INTEGER);"));
//bRetVal == true

bRetVal = oQuery.prepare(QString("INSERT INTO tab VALUES(:ID, " 
        ":Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3, "
        ");"));
//bRetVal == true


//Потом
oQuery.bindValue(":ID", "tab_sq.nextval");
oQuery.bindValue(":Pict_ID_1_1", 1);
oQuery.bindValue(":Pict_ID_2_1", 2);
oQuery.bindValue(":Pict_ID_3_1", 3);

bRetVal =oQuery.exec();
//bRetVal == false


Как я понял, в постгрессе нету AUTOINCREMENT... Вобщем, никак не работает... (( Кто-нибудь знает в чем может быть проблема?

Спасибо)

Сообщение отредактировал Rocky - 4.3.2010, 17:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2010, 18:50
Сообщение #2


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

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

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




Репутация:   94  


Цитата(DEADHUNT @ 4.3.2010, 20:26) *
PK прибавить 1 и это будет новый PK.
нет нельзя, т.к. могут существовать разные транзакции и значение может быть не уникальным. А генератор гарантирует уникальность
Во всяком случае в firebird/interbase, т.к. они версионники, а не блокировочники (как, например, MySQL)

Цитата(Rocky @ 4.3.2010, 21:42) *
в QSqlQuery::prepare важен порядок имен столбцов? Т.е. он должен быть такой же как и при создании таблицы, или без разницы?
зависит от типа подстановки, позиционная/именованная.
Для последней без разницы, подробности см. в описании класса
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 3.7.2025, 2:10