Russian Qt Forum

Qt => Базы данных => Тема начата: samovar7777 от Июнь 13, 2009, 23:12



Название: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 13, 2009, 23:12
Добрый день!!!!! Помогите, пож-та , решить проблему, которая состоит в след.
Есть таблица из 10 полей,в которой заполнены 3 ключевых поля...мне необходимо довставить, дозаполнить остальные поля данными, взятыми из формы ввода...То есть если первые три поля в форме равны существующим значениям определенных столбцов, то дозаполнить остальные поля...В противном случае, необходимо вставить новую запись...Помогите перевести это на язык SQL-запроса. СУБД-MySql 5.1.

Делаю так:
QDate number1=deZapov2->date();
QString number2=leNumberKS2->text();
QString number3=leNumberZl2->text();
QSqlQuery query("INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE rassled SET VchunVGr=cbVchunGr->currentText() WHERE dataVustav=number1, NomerKS=number2,PorydNomerZl=number3");
   query.addBindValue(deZapov2->date());
   query.addBindValue(leNumberKS2->text());
   query.addBindValue(leNumberZl2->text());
   query.addBindValue(cbVchunGr->currentText());
Пишет, что ошибки синтаксиса в MySql? А я не могу их исправить, поскольку не хватает знаний по данному вопросу. ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!!!!
Буду весьма благодарен!!!


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: ритт от Июнь 14, 2009, 02:55
очевидно ведь, что сначала происходит попытка выполнить запрос с вопросиками, а лишь затем к вопросикам биндятся значения.

QSqlQuery query("...");
заменить на
QSqlQuery query;
затем
query.prepare("...")
затем бинды и в завершение
query.exec()


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 09:53
Спасибо Вам!!! Сейчас попробую так...


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 10:12
 :o Ура!! Ошибки уже нет....А вот запись не добавляет....


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: ритт от Июнь 14, 2009, 10:16
и правильно. я бы тоже ругался...
кто такие number1..number3 ? что за запятые в where clause ?
и, некстати, где exec() ?

также советую изначально перенимать хороший тон написания подобных текстов, ака:
Код:
QSqlQuery query;
if(query.prepare("INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE rassled SET VchunVGr=? WHERE blah AND blah AND blah"))
{
   query.addBindValue(deZapov2->date());
   query.addBindValue(leNumberKS2->text());
   query.addBindValue(leNumberZl2->text());
   query.addBindValue(cbVchunGr->currentText());
   query.addBindValue(cbVchunGr->currentText());

   query.exec();
}


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 10:28
Люди добрые!!!! ПОМОГИТЕ МНЕ!!!!!! найти ошибку.. ???.....Ошибок синтаксиса уже нет, а вот запрос не вставляет записи....Я делаю так:
QSqlQuery query;
query.prepare("INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE rassled SET VchunVGr=? WHERE dataVustav=number1, NomerKS=number2, PorydNomerZl=number3");
   query.addBindValue(deZapov2->date());
   query.addBindValue(leNumberKS2->text());
   query.addBindValue(leNumberZl2->text());
   query.addBindValue(cbVchunGr->currentText());
   query.addBindValue(cbVchunGr->currentText());
query.exec();
Где, dataVustav, NomerKS, PorydNomerZl-составной ключ таблицы rassled. При чем даже когда нет совпадений с ключом-все равно не вставляет....number1, number2, number3 считываются с формы...Заранее всем благодарен...


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 10:53
и правильно. я бы тоже ругался...
кто такие number1..number3 ? что за запятые в where clause ?
и, некстати, где exec() ?

также советую изначально перенимать хороший тон написания подобных текстов, ака:
Код:
QSqlQuery query;
if(query.prepare("INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE rassled SET VchunVGr=? WHERE blah AND blah AND blah"))
{
   query.addBindValue(deZapov2->date());
   query.addBindValue(leNumberKS2->text());
   query.addBindValue(leNumberZl2->text());
   query.addBindValue(cbVchunGr->currentText());
   query.addBindValue(cbVchunGr->currentText());

   query.exec();

Спасибо, Константин, за подсказку, но выполнив все рекомендации,по-прежнему не хочет :(не вставляет...ни новые, недобавляет к имеющимся) В чем еще может быть причина последнего?


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 11:16
Уже сделал так:
QSqlQuery query;
query.prepare("INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE rassled SET VchunVGr=? WHERE dataVustav=deZapov2->date() AND NomerKS=number2 AND PorydNomerZl=number3");
   query.addBindValue(deZapov2->date());
   query.addBindValue(leNumberKS2->text());
   query.addBindValue(leNumberZl2->text());
   query.addBindValue(cbVchunGr->currentText());
   query.addBindValue(cbVchunGr->currentText());
query.exec();
if (!query.isActive())
{QMessageBox::warning(this, tr("insert error"), query.lastError().text());}
else accept(); 
Запрос выполн. некорректно, поскольку выводится сообщение insert error, сам текст ошибки не выводит...В чем проблема, подскажите!!!!!!! Пожалуйста!!!!!


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: ритт от Июнь 14, 2009, 11:22
и правильно. я бы тоже ругался...
кто такие number1..number3 ? что за запятые в where clause ?
<snip>


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 11:28
и правильно. я бы тоже ругался...
кто такие number1..number3 ?

QDate number1=deZapov2->date();
QString number2=leNumberKS2->text();
QString number3=leNumberZl2->text();


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: ритт от Июнь 14, 2009, 12:12
дык, какого хрена названия сишных переменных вписывать в запрос скл?! это что, пережитки пых-пыха?


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 12:37
Итак, изменила типы пполей ключевых, теперь они у меня INT, кроме даты оно так и осталось датой...
Но не хочет вставлять даже константные значения....
QSqlQuery query;
query.prepare("INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE rassled SET VchunVGr='rrrrrrrr' WHERE dataVustav='2000-01-01 00:00:00' AND NomerKS='44' AND PorydNomerZl='44' ");
   query.addBindValue(deZapov2->date());
   query.addBindValue(leNumberKS2->text());
   query.addBindValue(leNumberZl2->text());
   query.addBindValue(cbVchunGr->currentText());
   //query.addBindValue(cbVchunGr->currentText());
query.exec();


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 12:40
дык, какого хрена названия сишных переменных вписывать в запрос скл?! это что, пережитки пых-пыха?

Нет, "не пережитки..", просто у мня программа на Qt подключает базу на MySql...поэтому по-другому невозможно...Ведь значения этих вводятся с формы...Кстати, обычная вставка записей в таблицу Мускула с такими же типами работает отлично...Происходит преобразование типов... А дозапись не хочет...


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 12:46
Даже если явно преобразовать в INT все равно не хочет...
int number2=leNumberKS2->text().toInt();
int number3=leNumberZl2->text().toInt();


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: ритт от Июнь 14, 2009, 13:27
если примари составной (dataVustav + NomerKS + PorydNomerZl), зачем при дупликейте эта странная попытка удостовериться, что значения действительно дублируются?
кстати, 12.2.5.1. INSERT ... SELECT Syntax говорит, что запрос неверный.
попробуй так:
Цитировать
INSERT rassled (dataVustav, NomerKS, PorydNomerZl, VchunVGr) VALUES (?, ?, ?, ?)
  ON DUPLICATE KEY UPDATE VchunVGr=?


Название: Re: добавление +обновление данных в MySql из Qt
Отправлено: samovar7777 от Июнь 14, 2009, 13:53
Огромное Вам спасибо, Константин!!!!!!! Попробовал так.....и добавило........ :D!!!!!!!!!!!!!!!!!!!!!!!!! Спасибо!