Russian Qt Forum
Ноябрь 24, 2024, 05:32
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
не работает INSERT
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: не работает INSERT (Прочитано 9702 раз)
kadr
Гость
не работает INSERT
«
:
Октябрь 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
Гость
Re: не работает INSERT
«
Ответ #1 :
Октябрь 26, 2009, 14:25 »
Цитата: 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','поставщик'), то все нормально добавляется в базу, а через переменные не хочет!
В переменных данные есть и они нормально выводятся на консоль!
Проверял правильность конечного запроса?
Попробуй формировать запрос через QString(%1,%2...).arg();
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: не работает INSERT
«
Ответ #2 :
Октябрь 26, 2009, 14:28 »
Если в Linux работает то вероятно запрос правильный...
Что за БД - возможно ошибка в виндовой версии Qt-шного драйвера, по крайней мере так вроде все правильно, нга FB аналогичные запросы кработают.
Записан
Aleksey_Zh
Гость
Re: не работает INSERT
«
Ответ #3 :
Октябрь 26, 2009, 14:45 »
Цитата: break от Октябрь 26, 2009, 14:28
Если в Linux работает то вероятно запрос правильный...
Цитата: kadr от Октябрь 26, 2009, 14:28
дома линухе без проблем работает, когда за место VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik) ставишь например VALUES ('1','Имя какое нибудь','производитель','5','54.21','52','поставщик')
Не факт, что запрос верный... В линухе подставляли конкретные значения... Я так с мускулем 1 раз мучался... Такая же проблема была. Теперь каждый запрос проверяю...
Записан
kadr
Гость
Re: не работает INSERT
«
Ответ #4 :
Октябрь 26, 2009, 15:15 »
Цитата: break от Октябрь 26, 2009, 14:28
Если в Linux работает то вероятно запрос правильный...
Что за БД - возможно ошибка в виндовой версии Qt-шного драйвера, по крайней мере так вроде все правильно, нга FB аналогичные запросы кработают.
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: не работает INSERT
«
Ответ #5 :
Октябрь 26, 2009, 15:21 »
Цитировать
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?
Записан
Aleksey_Zh
Гость
Re: не работает INSERT
«
Ответ #6 :
Октябрь 26, 2009, 15:38 »
Цитата: break от Октябрь 26, 2009, 15:21
Цитировать
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
Гость
Re: не работает INSERT
«
Ответ #7 :
Октябрь 26, 2009, 15:46 »
Цитата: break от Октябрь 26, 2009, 15:21
Цитировать
MySQL, здесь на винде тоже добавляет если конкретно указывать значения!
Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?
я дрова в нете качнул, так как не смог скомпилить, а так 4,6
Записан
Aleksey_Zh
Гость
Re: не работает INSERT
«
Ответ #8 :
Октябрь 26, 2009, 15:56 »
Вы так увлеклись темой о том, что дрова косячные, что не хотите рассматривать другие варианты! Дрова вполне возможно нормальные! Проверьте синтаксис!!!!!!!!!!!!!!!! Я например заметил, что поставщика (который скорее всего типа varchar), написали без кавычек! Мускуль такое не простит! проверьте орфографию!!!!!!!!
Записан
kadr
Гость
Re: не работает INSERT
«
Ответ #9 :
Октябрь 26, 2009, 16:17 »
Цитата: Aleksey_Zh от Октябрь 26, 2009, 15:56
Вы так увлеклись темой о том, что дрова косячные, что не хотите рассматривать другие варианты! Дрова вполне возможно нормальные! Проверьте синтаксис!!!!!!!!!!!!!!!! Я например заметил, что поставщика (который скорее всего типа varchar), написали без кавычек! Мускуль такое не простит! проверьте орфографию!!!!!!!!
Как без ковычек q.bindValue(":postavcik",tr("Уралбиофарм"));
Вроде с кавычками, такое ощущение что проблема действительно в синтаксе, ведь если подставить точные значения, то все нормально заноситься!
Записан
kadr
Гость
Re: не работает INSERT
«
Ответ #10 :
Октябрь 26, 2009, 16:19 »
Цитата: Aleksey_Zh от Октябрь 26, 2009, 15:38
Цитата: break от Октябрь 26, 2009, 15:21
Цитировать
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
Гость
Re: не работает INSERT
«
Ответ #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
Гость
Re: не работает INSERT
«
Ответ #12 :
Октябрь 26, 2009, 16:34 »
ДА реально работает, странно в линуксе один синтаксис работает в винде другой. Спасибо!
Записан
Aleksey_Zh
Гость
Re: не работает INSERT
«
Ответ #13 :
Октябрь 26, 2009, 16:40 »
Если что, стучись в личку. Я тоже на мускуле сижу.
Записан
MoPDoBoPoT
Гость
Re: не работает INSERT
«
Ответ #14 :
Октябрь 26, 2009, 17:53 »
Конструкции prepare-bindValue-exec и QString-agr-exec в общем случае различны. Если СУБД поддерживает связываемые переменные (функция QSqlDriver::hasFeature(QSqlDriver::PreparedQueries) вернет true), то в некоторых случаях prepare-bindValue-exec будет предпочтительней, а именно - когда очень часто используется, по сути, один и тот же запрос, но с разными подставляемыми данными (тот же INSERT, например). При использовании связываемых переменных запрос компилируется один раз, а затем план его выполнения запоминается в библиотечном кэше, из которого его можно выбрать для повторного выполнения (с новыми подставляемыми значениями). Да и для АБД статистику проще собирать.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...