Название: добавление +обновление данных в 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; Название: 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; Название: 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!!!!!!!!!!!!!!!!!!!!!!!!! Спасибо!
|