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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Получить значение идентификатора при добавлении строки  (Прочитано 19105 раз)
roman-ktn
Гость
« : Ноябрь 10, 2008, 14:42 »

Здравствуйте

Использую MS SQL Server

На пример у меня есть таблица table1 с полями: i_key, field1
i_key — идентификатор записи, значение которого определяется базой данных

Подскажите, пожалуйста, код программы, который добавляет запись и получает значение идентификатора.
Записан
kirill
Гость
« Ответ #1 : Ноябрь 11, 2008, 07:52 »

Код:

         QSqlQuery insert_query;
         insert_query.prepare("INSERT INTO table1 (field1) VALUES (:field1)");
         insert_query.bindValue(":field1", "field1");         
         if (insert_query.exec())
         {
               QString sKey = QVariant(insert_query.lastInsertId()).toString();
          }

Записан
roman-ktn
Гость
« Ответ #2 : Ноябрь 11, 2008, 11:33 »

Спасибо
Записан
roman-ktn
Гость
« Ответ #3 : Ноябрь 14, 2008, 00:24 »

Попробовал пример, MS SQL возвращает пустую строку  Плачущий .
А есть еще какой-нибудь способ?
Записан
ритт
Гость
« Ответ #4 : Ноябрь 14, 2008, 00:43 »

как работаешь с MS SQL? через ODBC? тогда, конечно, пустая строка, т.к. lastInsertId() вернёт невалидный вариант.
ищи нормальный драйвер (и нормальную бд)
Записан
roman-ktn
Гость
« Ответ #5 : Ноябрь 14, 2008, 01:10 »

Да подключаюсь через ODBC
Цитировать
ищи нормальный драйвер (и нормальную бд)
  Улыбающийся
БД пока, и в бижайшем будущем поменять не могу.  Плачущий
Подскажите, пожалуйста, на счет подключения и драйвера, как вариант
Записан
ритт
Гость
« Ответ #6 : Ноябрь 14, 2008, 01:16 »

если не ошибаюсь, где-то что-то по поводу м$ скл тут пробегало - попробуй поискать. мб ещё гугль чем-нибудь подсобит.
Записан
Alex03
Гость
« Ответ #7 : Ноябрь 14, 2008, 08:45 »

А в етом MS SQL нет чегонить типа
INSERT INTO XXXXX XXXXX XXXXX RETURNING xxxxx
як в firebird 2.x ?
Записан
roman-ktn
Гость
« Ответ #8 : Ноябрь 14, 2008, 11:00 »

Цитировать
А в етом MS SQL нет чегонить типа
INSERT INTO XXXXX XXXXX XXXXX RETURNING xxxxx
як в firebird 2.x ?
Есть, можно сделать запрос:
Код:
INSERT INTO table1 (field1) 
OUTPUT inserted.*
VALUES (1)
Он возвращает добавленную запись, но до Qt доходит только пустая таблица
Записан
roman-ktn
Гость
« Ответ #9 : Ноябрь 14, 2008, 11:10 »

Цитировать
Он возвращает добавленную запись, но до Qt доходит только пустая таблица
И в добавок сбивается подключение
Записан
spirit
Гость
« Ответ #10 : Ноябрь 14, 2008, 11:29 »

я делал собственный метод и для Oracle и для PostgeSql, который возвращает последний добавленный id.
какие-то бока были с QSqlQuery::lastInsertId уже не помню. так что, имхо, сделайте тоже сами такой метод.
Записан
roman-ktn
Гость
« Ответ #11 : Ноябрь 14, 2008, 12:20 »

Цитировать
И в добавок сбивается подключение
Нет, подключение не сбивается, но пустеют таблицы, но это неважно
Цитировать
делал собственный метод и для Oracle и для PostgeSql, который возвращает последний добавленный id.
какие-то бока были с QSqlQuery::lastInsertId уже не помню. так что, имхо, сделайте тоже сами такой метод.
Не понимаю, как его можно сделать. Набираю код:
Код:
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery(tr("exec proc1 "), database);
QTableView *view = new QTableView;
view->setModel(model);
view->show();
Процедура proc1 выводит таблицу. А у меня в результате пустая таблица. Поля все на месте, а записей нет.  В замешательстве
Я так понимаю, что он кроме SELECT, INSERT, UPDATE и DELETE ни с чем работать не хочет.
Сейчас наверно по нему стукну  Улыбающийся
Я использую версию 4.1.1., с учебника, если скачать более новую, то это может помочь?
Записан
spirit
Гость
« Ответ #12 : Ноябрь 14, 2008, 12:24 »

Цитировать
делал собственный метод и для Oracle и для PostgeSql, который возвращает последний добавленный id.
какие-то бока были с QSqlQuery::lastInsertId уже не помню. так что, имхо, сделайте тоже сами такой метод.
Не понимаю, как его можно сделать. Набираю код:
в оракле создается последовательность для генерации нового id, в постргесе есть спец. таблицы где хранится последний добавленный id. следовательно, что-то подобное должно быть в MS SQL, читайте доку по нему.  Улыбающийся
Записан
ритт
Гость
« Ответ #13 : Ноябрь 14, 2008, 12:34 »

Я использую версию 4.1.1., с учебника, если скачать более новую, то это может помочь?

Qt 4.1.1 ?! срочно обновляйся! Улыбающийся
потом напишешь изменилась ли ситуация...
Записан
spirit
Гость
« Ответ #14 : Ноябрь 17, 2008, 11:10 »

по идее должно. но имхо должна быть табла(или последовательность) отвечающая за генерацию значения.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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