crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> не работает AUTOINCREMENT, QT+SQLITE+CODEBLOCKS
Crockus
  опции профиля:
сообщение 28.3.2011, 16:06
Сообщение #1


Новичок


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

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




Репутация:   0  


Создаю таблицу
query.exec("CREATE TABLE IF NOT EXISTS years (id INT AUTOINCREMENT, "
               "yearvalue INT, PRIMARY KEY (id))");
if(!query.isActive())
    QMessageBox::warning(0, "Create tables",
    query.lastError().text());

выдает ошибку
near "AUTOINCREMENT": syntax error Unable to execute statement

если меняю AUTOINCREMENT на AUTO_INCREMENT ошибки не выдает, таблицу создает
добавляю запись
query.exec("INSERT INTO years (yearvalue) VALUES(2011)");
    if(!query.isActive())
    QMessageBox::warning(0, "insert",
    query.lastError().text());

запись добавляется, но "id" остается равным 0
получаю данные
QString str;
   while (query.next()){
   int idd = query.value(0).toInt();
   str.append(QString("%1 ").arg(idd));
   int year = query.value(1).toInt();
   str.append(QString("%1 ").arg(year));
   }
    QMessageBox::warning(0, "values",
    QString("%1 ..").arg(query.numRowsAffected())+str);

при вызове size возвращает -1..0 2011 0 2012 и тд; numRowsAffected возвращает 1..0 2011 0 2012 и тд
в чем причина, спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Crockus
  опции профиля:
сообщение 29.3.2011, 7:59
Сообщение #2


Новичок


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

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




Репутация:   0  


Цитата(Crockus @ 28.3.2011, 16:06) *
query.exec("CREATE TABLE IF NOT EXISTS years (id INT AUTOINCREMENT, "
"yearvalue INT, PRIMARY KEY (id))");

с AUTOINCREMENT разобрался, должно быть вот так, иначе не работает
query.exec("CREATE TABLE IF NOT EXISTS years (id INTEGER PRIMARY KEY AUTOINCREMENT,"
               " name VARCHAR(4))");

осталось разобраться с "size"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 29.3.2011, 8:08
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


int QSqlQuery::size () const

Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes

Какой драйвер ты используешь? SQLite?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Crockus
  опции профиля:
сообщение 29.3.2011, 19:46
Сообщение #4


Новичок


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

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




Репутация:   0  


Цитата(PAFOS @ 29.3.2011, 8:08) *
Какой драйвер ты используешь? SQLite?

Да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 30.3.2011, 6:43
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Цитата(Crockus @ 29.3.2011, 21:46) *
Цитата(PAFOS @ 29.3.2011, 8:08) *
Какой драйвер ты используешь? SQLite?

Да


У меня тоже SQLite возвращает всегда 0.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 30.3.2011, 8:03
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


У QSqlDriver есть функция bool QSqlDriver::hasFeature ( DriverFeature feature ) const
среди DriverFeature есть QSqlDriver::QuerySize
если вызвать для SQLite драйвера hasFeature(QSqlDriver::QuerySize), то он должен вернуть false

иными словами драйвер QSQLITE не поддерживает эту фичу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Crockus
  опции профиля:
сообщение 30.3.2011, 9:11
Сообщение #7


Новичок


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

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




Репутация:   0  


Цитата(PAFOS @ 30.3.2011, 8:03) *
иными словами драйвер QSQLITE не поддерживает эту фичу.

я так и понял из инструкции, проблему решил следующим образом
query.exec("SELECT count(id) FROM years ");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 24.4.2024, 5:35