Russian Qt Forum

Qt => Базы данных => Тема начата: Примерный ученик от Июнь 29, 2012, 14:36



Название: QT3.3 SQLite AUTOINCREMENT
Отправлено: Примерный ученик от Июнь 29, 2012, 14:36
Код:
		QSqlCursor sCur("server",true,MyPSQL);
QSqlRecord *buffer;
buffer = sCur.primeInsert();  // запись для вставки
buffer->setValue("id",NULL);
buffer->setValue("name",QString("Анаконда28"));
buffer->setValue("help","---------???-------");
int j=sCur.insert();
поле id ключевое INTEGER PRIMARY KEY.
Вставка не срабатывает ???
Если задаю номер "ручками", то все нормально.
Что я делаю не так?


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Пантер от Июнь 29, 2012, 14:44
PRIMARY KEY не может быть NULL.


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Примерный ученик от Июнь 29, 2012, 14:49
"Когда вы вставляете строку с нулевым значением id, SQLite
автоматически присвоит полю следующее значение счётчика."
Это из букваря по SQLite ???


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Примерный ученик от Июнь 29, 2012, 15:00
зато конструкция
Код:
		QSqlQuery sql(MyPSQL);
bool ii=sql.exec("INSERT INTO server VALUES(NULL,1,2,3,4,5,6)");
срабатывает, как положено ???
Косяк QSqlCursor что ли?
Или я его не так пользую? ???


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: mutineer от Июнь 29, 2012, 15:03
не делай buffer->setValue("id",NULL);


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Пантер от Июнь 29, 2012, 15:05
buffer->setValue("id",NULL); тут NULL == 0, то есть, не пусто.


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Примерный ученик от Июнь 29, 2012, 15:08
не делай buffer->setValue("id",NULL);
Не помогает, ошибка ???


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Пантер от Июнь 29, 2012, 15:10
Не знаю, есть ли в 3 версии, но попробуй
buffer->setValue("id",QVariant ());


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Примерный ученик от Июнь 29, 2012, 15:13
Не знаю, есть ли в 3 версии, но попробуй
buffer->setValue("id",QVariant ());
Спасибо!!!
Сработало ;D


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: DmitryM от Июнь 29, 2012, 17:42
Вместо 
Код
SQL
INSERT INTO server VALUES(NULL,1,2,3,4,5,6)
 
можно записать
Код
SQL
INSERT INTO server (colum1,colum2,colum3,colum4,colum5,colum6) VALUES(1,2,3,4,5,6))
 
и не придется  писать
Код
C++ (Qt)
buffer->setValue("id",QVariant ());
 
а то вдруг кто-то увидит такой код, и плохо о вас подумает  ;)


Название: Re: QT3.3 SQLite AUTOINCREMENT
Отправлено: Примерный ученик от Июль 08, 2012, 17:50
дело вкуса ;D
Мне Курсор нравится больше ::)
Нагляднее и гибче :o