Название: не работает INSERT Отправлено: 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','поставщик'), то все нормально добавляется в базу, а через переменные не хочет! В переменных данные есть и они нормально выводятся на консоль! Название: Re: не работает INSERT Отправлено: Aleksey_Zh от Октябрь 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(); Название: Re: не работает INSERT Отправлено: break от Октябрь 26, 2009, 14:28 Если в Linux работает то вероятно запрос правильный...
Что за БД - возможно ошибка в виндовой версии Qt-шного драйвера, по крайней мере так вроде все правильно, нга FB аналогичные запросы кработают. Название: Re: не работает INSERT Отправлено: Aleksey_Zh от Октябрь 26, 2009, 14:45 Если в Linux работает то вероятно запрос правильный... дома линухе без проблем работает, когда за место VALUES (:id,:name,:proizvod,:kol,:chena,:fasov,:postavcik) ставишь например VALUES ('1','Имя какое нибудь','производитель','5','54.21','52','поставщик') Не факт, что запрос верный... В линухе подставляли конкретные значения... Я так с мускулем 1 раз мучался... Такая же проблема была. Теперь каждый запрос проверяю... Название: Re: не работает INSERT Отправлено: kadr от Октябрь 26, 2009, 15:15 Если в Linux работает то вероятно запрос правильный... MySQL, здесь на винде тоже добавляет если конкретно указывать значения!Что за БД - возможно ошибка в виндовой версии Qt-шного драйвера, по крайней мере так вроде все правильно, нга FB аналогичные запросы кработают. Название: Re: не работает INSERT Отправлено: break от Октябрь 26, 2009, 15:21 Цитировать MySQL, здесь на винде тоже добавляет если конкретно указывать значения! Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?Название: Re: не работает INSERT Отправлено: Aleksey_Zh от Октябрь 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("Уралбиофарм") ; Отпишись, может получится! Название: Re: не работает INSERT Отправлено: kadr от Октябрь 26, 2009, 15:46 Цитировать MySQL, здесь на винде тоже добавляет если конкретно указывать значения! Да я так и понял что на винде работает только с подстановкой значений а в линукс и так и так - мне кажется все таки что ошибка в реализации драйыера БД под винду - какая версия QT?Название: Re: не работает INSERT Отправлено: Aleksey_Zh от Октябрь 26, 2009, 15:56 Вы так увлеклись темой о том, что дрова косячные, что не хотите рассматривать другие варианты! Дрова вполне возможно нормальные! Проверьте синтаксис!!!!!!!!!!!!!!!! Я например заметил, что поставщика (который скорее всего типа varchar), написали без кавычек! Мускуль такое не простит! проверьте орфографию!!!!!!!! >:(
Название: Re: не работает INSERT Отправлено: kadr от Октябрь 26, 2009, 16:17 Вы так увлеклись темой о том, что дрова косячные, что не хотите рассматривать другие варианты! Дрова вполне возможно нормальные! Проверьте синтаксис!!!!!!!!!!!!!!!! Я например заметил, что поставщика (который скорее всего типа varchar), написали без кавычек! Мускуль такое не простит! проверьте орфографию!!!!!!!! >:( Как без ковычек q.bindValue(":postavcik",tr("Уралбиофарм"));Вроде с кавычками, такое ощущение что проблема действительно в синтаксе, ведь если подставить точные значения, то все нормально заноситься! Название: Re: не работает INSERT Отправлено: kadr от Октябрь 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("Уралбиофарм") ; Отпишись, может получится! Название: Re: не работает INSERT Отправлено: Aleksey_Zh от Октябрь 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' Название: Re: не работает INSERT Отправлено: kadr от Октябрь 26, 2009, 16:34 ДА реально работает, странно в линуксе один синтаксис работает в винде другой. Спасибо!
Название: Re: не работает INSERT Отправлено: Aleksey_Zh от Октябрь 26, 2009, 16:40 Если что, стучись в личку. Я тоже на мускуле сижу. :)
Название: Re: не работает INSERT Отправлено: MoPDoBoPoT от Октябрь 26, 2009, 17:53 Конструкции prepare-bindValue-exec и QString-agr-exec в общем случае различны. Если СУБД поддерживает связываемые переменные (функция QSqlDriver::hasFeature(QSqlDriver::PreparedQueries) вернет true), то в некоторых случаях prepare-bindValue-exec будет предпочтительней, а именно - когда очень часто используется, по сути, один и тот же запрос, но с разными подставляемыми данными (тот же INSERT, например). При использовании связываемых переменных запрос компилируется один раз, а затем план его выполнения запоминается в библиотечном кэше, из которого его можно выбрать для повторного выполнения (с новыми подставляемыми значениями). Да и для АБД статистику проще собирать.
Название: Re: не работает INSERT Отправлено: BaltikS от Октябрь 26, 2009, 18:14 Конструкции prepare-bindValue-exec и QString-agr-exec в общем случае различны. Если СУБД поддерживает связываемые переменные (функция QSqlDriver::hasFeature(QSqlDriver::PreparedQueries) вернет true), то в некоторых случаях prepare-bindValue-exec будет предпочтительней, а именно - когда очень часто используется, по сути, один и тот же запрос, но с разными подставляемыми данными (тот же INSERT, например). При использовании связываемых переменных запрос компилируется один раз, а затем план его выполнения запоминается в библиотечном кэше, из которого его можно выбрать для повторного выполнения (с новыми подставляемыми значениями). Да и для АБД статистику проще собирать. +1Qt - не причём. Библиотека мускульная.... |