[РЕШЕНО] QSqlQuery::prepare, не выполняется UPDATE |
Здравствуйте, гость ( Вход | Регистрация )
[РЕШЕНО] QSqlQuery::prepare, не выполняется UPDATE |
bayah |
23.11.2009, 18:20
Сообщение
#1
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот еще...)
Не пойму, почему не получается именно обновить?
Да вообще UPDATE не проходит банально
|
|
|
Litkevich Yuriy |
23.11.2009, 18:35
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
bayah |
24.11.2009, 17:28
Сообщение
#3
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
2 Litkevich Yuriy:
Цитата попробуй свой запрос в sqlbrowser'е если там проходит, то смотреть код. Я думаю, что запрос неверно составлен (в части передачи текста в него) Проверил в sqlbrowser'е. Все работает. Вот еще пример который работает!! Цитата //создание самой таблицы query.exec("CREATE TABLE Recivers (Inn_receiver INTEGER PRIMARY KEY ," "Title VARCHAR(100));"); //...обновление записи с Inn_receiver = 444 QSqlQuery query; query.prepare("UPDATE Recivers SET Title = :Title WHERE Inn_receiver = :Inn_receiver "); query.bindValue(":Title","Bla-bla-bla"); query.bindValue(":Inn_receiver",444); query.exec(); А мой пример:
Не пашет! |
|
|
Litkevich Yuriy |
24.11.2009, 17:32
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
в Firebird'е строки нужно было бы брать в кавычки, итого строка в prepare выглядела бы так:
"UPDATE DIST SET CODE_D = :CODE_D,NAME_D = \":NAME_D\" WHERE CODE_D = :CODE_D" |
|
|
MoPDoBoPoT |
24.11.2009, 17:59
Сообщение
#5
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
в Firebird'е строки нужно было бы брать в кавычки, итого строка в prepare выглядела бы так: "UPDATE DIST SET CODE_D = :CODE_D,NAME_D = \":NAME_D\" WHERE CODE_D = :CODE_D" Странно, это же связываемые переменные, там же не просто тупая подстановка должна быть (по крайней мере в Oracle и SQLite кавычки не нужны). По делу: а на обновляемые поля не накладываются никакие ограничения целостости, которые нарушаются (например, уникальность)? Если запрос не прошел, то надо смотреть что выдаст нам драйвер: query.lastError().text() Сообщение отредактировал MoPDoBoPoT - 24.11.2009, 18:00 |
|
|
bayah |
25.11.2009, 15:22
Сообщение
#6
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Блин, нашел...опять все оказалось банально.
Нельзя, чтобы было так: Цитата query.prepare("UPDATE DIST SET CODE_D = :CODE_D,NAME_D = :NAME_D WHERE CODE_D = :CODE_D"); то есть - поле, которое указано после WHERE не должно встречаться после SET А вот такой запрос будет работать: Цитата query.prepare("UPDATE DIST SET NAME_D = :NAME_D WHERE CODE_D = :CODE_D"); Однако в QT sql brouser'е такой запрос работает: Цитата UPDATE DIST SET CODE_D='123', NAME_D='Gigi' WHERE CODE_D='31' хм... |
|
|
Litkevich Yuriy |
25.11.2009, 18:01
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
MoPDoBoPoT |
25.11.2009, 20:35
Сообщение
#8
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
О, блин, я смекнул.
Во-первых, нельзя использовать плейсхолдер повторно, даже если значения одинаковые query.prepare("UPDATE DIST SET CODE_D = :CODE_D, NAME_D = :NAME_D WHERE CODE_D = :CODE_D"); то есть должно быть примерно так:
Во-вторых, не вижу смысла в замене значения поля на тоже самое значение UPDATE DIST SET CODE_D = :CODE_D, NAME_D = :NAME_D WHERE CODE_D = :CODE_D |
|
|
Litkevich Yuriy |
25.11.2009, 22:30
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
можно ставить "РЕШЕНО" и закрыть тему?
|
|
|
bayah |
26.11.2009, 5:36
Сообщение
#10
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
MoPDoBoPoT, точно!...
кажется можно закрывать. что такое плейсхолдер в примере ясно, а что это вообще такое?) |
|
|
Текстовая версия | Сейчас: 16.11.2024, 2:06 |