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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: не работает INSERT  (Прочитано 9714 раз)
kadr
Гость
« : Октябрь 26, 2009, 14:11 »

Знаю что уже где то писал про это, но не смог найти, в общем проблема в следующем:
q.prepare("INSERT INTO uralbiofarm (code,name,zavod,kolvo,price,fasovka,postavcik) VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik)");
            q.bindValue(":id", i);
            q.bindValue(":name", name);
            q.bindValue(":proizvod", proizvod);
            q.bindValue(":kol", kol);
            q.bindValue(":chena", chena);
            q.bindValue(":fasov", fasov);
            q.bindValue(":postavcik", tr("Уралбиофарм"));
            q.exec();
На винде не работает, дома линухе без проблем работает,  когда за место VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik) ставишь например VALUES ('1','Имя какое нибудь','производитель','5','54.21','52','поставщик'), то все нормально добавляется в базу, а через переменные не хочет!
В переменных данные есть и они нормально выводятся на консоль!
Записан
Aleksey_Zh
Гость
« Ответ #1 : Октябрь 26, 2009, 14:25 »

Знаю что уже где то писал про это, но не смог найти, в общем проблема в следующем:
q.prepare("INSERT INTO uralbiofarm (code,name,zavod,kolvo,price,fasovka,postavcik) VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik)");
            q.bindValue(":id", i);
            q.bindValue(":name", name);
            q.bindValue(":proizvod", proizvod);
            q.bindValue(":kol", kol);
            q.bindValue(":chena", chena);
            q.bindValue(":fasov", fasov);
            q.bindValue(":postavcik", tr("Уралбиофарм"));
            q.exec();
На винде не работает, дома линухе без проблем работает,  когда за место VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik) ставишь например VALUES ('1','Имя какое нибудь','производитель','5','54.21','52','поставщик'), то все нормально добавляется в базу, а через переменные не хочет!
В переменных данные есть и они нормально выводятся на консоль!

Проверял правильность конечного запроса?
Попробуй формировать запрос через QString(%1,%2...).arg();
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Октябрь 26, 2009, 14:28 »

Если в Linux работает то вероятно запрос правильный...
Что за БД - возможно ошибка в виндовой версии Qt-шного драйвера, по крайней мере так вроде все правильно, нга FB аналогичные запросы кработают.
Записан
Aleksey_Zh
Гость
« Ответ #3 : Октябрь 26, 2009, 14:45 »

Если в Linux работает то вероятно запрос правильный...

дома линухе без проблем работает,  когда за место VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik) ставишь например VALUES ('1','Имя какое нибудь','производитель','5','54.21','52','поставщик')

Не факт, что запрос верный... В линухе подставляли конкретные значения... Я так с мускулем 1 раз мучался... Такая же проблема была. Теперь каждый запрос проверяю...
Записан
kadr
Гость
« Ответ #4 : Октябрь 26, 2009, 15:15 »

Если в Linux работает то вероятно запрос правильный...
Что за БД - возможно ошибка в виндовой версии Qt-шного драйвера, по крайней мере так вроде все правильно, нга FB аналогичные запросы кработают.
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #5 : Октябрь 26, 2009, 15:21 »

Цитировать
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?
Записан
Aleksey_Zh
Гость
« Ответ #6 : Октябрь 26, 2009, 15:38 »

Цитировать
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?

А если попробовать по другому сделать запрос? Например
QString("INSERT INTO uralbiofarm VALUES (%1,%2,%3,%4,%5,%6,'%7');")
.arg(i)
.arg(name)
.arg(proizvod)
.arg(kol)
.arg(chena)
.arg(fasov)
.arg("Уралбиофарм")
;

Отпишись, может получится!
Записан
kadr
Гость
« Ответ #7 : Октябрь 26, 2009, 15:46 »

Цитировать
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?
я дрова в нете качнул, так как не смог скомпилить, а так 4,6
Записан
Aleksey_Zh
Гость
« Ответ #8 : Октябрь 26, 2009, 15:56 »

Вы так увлеклись темой о том, что дрова косячные, что не хотите рассматривать другие варианты! Дрова вполне возможно нормальные! Проверьте синтаксис!!!!!!!!!!!!!!!! Я например заметил, что поставщика (который скорее всего типа varchar), написали без кавычек! Мускуль такое не простит! проверьте орфографию!!!!!!!! Злой
Записан
kadr
Гость
« Ответ #9 : Октябрь 26, 2009, 16:17 »

Вы так увлеклись темой о том, что дрова косячные, что не хотите рассматривать другие варианты! Дрова вполне возможно нормальные! Проверьте синтаксис!!!!!!!!!!!!!!!! Я например заметил, что поставщика (который скорее всего типа varchar), написали без кавычек! Мускуль такое не простит! проверьте орфографию!!!!!!!! Злой
Как без ковычек q.bindValue(":postavcik",tr("Уралбиофарм"));
Вроде с кавычками, такое ощущение что проблема действительно в синтаксе, ведь если подставить точные значения, то все нормально заноситься!
Записан
kadr
Гость
« Ответ #10 : Октябрь 26, 2009, 16:19 »

Цитировать
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?

А если попробовать по другому сделать запрос? Например
QString("INSERT INTO uralbiofarm VALUES (%1,%2,%3,%4,%5,%6,'%7');")
.arg(i)
.arg(name)
.arg(proizvod)
.arg(kol)
.arg(chena)
.arg(fasov)
.arg("Уралбиофарм")
;

Отпишись, может получится!
Не совсем понял как это работает, как мне выполнить этот запрос то?
Записан
Aleksey_Zh
Гость
« Ответ #11 : Октябрь 26, 2009, 16:24 »

QSqlQuery Qr;
QString SQL=QString("INSERT INTO uralbiofarm VALUES (%1,'%2','%3',%4,%5,%6,'%7');")
.arg(i)
.arg(name)
.arg(proizvod)
.arg(kol)
.arg(chena)
.arg(fasov)
.arg("Уралбиофарм")
;
Qr.exec(SQL);

Попробуйте так. Должно заработать. Короче все текстовые переменные в скобках заключайте в апострофы '%n'
Записан
kadr
Гость
« Ответ #12 : Октябрь 26, 2009, 16:34 »

ДА реально работает, странно в линуксе один синтаксис работает в винде другой. Спасибо!
Записан
Aleksey_Zh
Гость
« Ответ #13 : Октябрь 26, 2009, 16:40 »

Если что, стучись в личку. Я тоже на мускуле сижу.  Улыбающийся
Записан
MoPDoBoPoT
Гость
« Ответ #14 : Октябрь 26, 2009, 17:53 »

Конструкции prepare-bindValue-exec и QString-agr-exec в общем случае различны. Если СУБД поддерживает связываемые переменные (функция QSqlDriver::hasFeature(QSqlDriver::PreparedQueries) вернет true), то в некоторых случаях prepare-bindValue-exec будет предпочтительней, а именно  - когда очень часто используется, по сути, один и тот же запрос, но с разными подставляемыми данными (тот же INSERT, например). При использовании связываемых переменных запрос компилируется один раз, а затем план его выполнения запоминается в библиотечном кэше, из которого его можно выбрать для повторного выполнения (с новыми подставляемыми значениями). Да и для АБД статистику проще собирать.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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