![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
bayah |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вот еще...)
Не пойму, почему не получается именно обновить?
Да вообще UPDATE не проходит банально
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
bayah |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 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 |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
в Firebird'е строки нужно было бы брать в кавычки, итого строка в prepare выглядела бы так:
"UPDATE DIST SET CODE_D = :CODE_D,NAME_D = \":NAME_D\" WHERE CODE_D = :CODE_D" |
|
|
MoPDoBoPoT |
![]()
Сообщение
#5
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
в 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 |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 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 |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
MoPDoBoPoT |
![]()
Сообщение
#8
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
О, блин, я смекнул.
Во-первых, нельзя использовать плейсхолдер повторно, даже если значения одинаковые 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 |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
можно ставить "РЕШЕНО" и закрыть тему?
|
|
|
bayah |
![]()
Сообщение
#10
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
MoPDoBoPoT, точно!...
кажется можно закрывать. что такое плейсхолдер в примере ясно, а что это вообще такое?) |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 2:16 |