Вот еще...)
Не пойму, почему не получается именно обновить?
void MainForm::on_Ok_d_clicked()
{
int id = ui->tableView_d->model()->index(0,0).data(0).toInt();
int num=0;
bool find=false;
while(id != 0){ //по циклу просматриваю все первые поля
if(id==ui->code_d_d->text().toInt()){find=true; break;}
num=num+1;
id = ui->tableView_d->model()->index(num,0).data(0).toInt();
}
ui->label_name_d_d->setNum(id); //это я просто смотрю какой id - найден ли он. Он находится.
QSqlQuery query;
if(find==true)
{
query.prepare("UPDATE DIST SET CODE_D = :CODE_D, NAME_D = :NAME_D WHERE CODE_D = :CODE_D");
query.bindValue(":CODE_D",id);
query.bindValue(":NAME_D",ui->name_d_d->text());
query.exec();
}
else //[b]добавление новой записи работает[/b]
{
query.prepare("INSERT INTO DIST (CODE_D, NAME_D) VALUES (:CODE_D, :NAME_D) ");
query.bindValue(":CODE_D",ui->code_d_d->text().toInt());
query.bindValue(":NAME_D",ui->name_d_d->text());
query.exec();
}
Refresh();
}
query.prepare("UPDATE DIST SET CODE_D = :CODE_D, NAME_D = :NAME_D WHERE CODE_D = :CODE_D");
query.bindValue(":CODE_D",10); //запись с CODE_D=10 естественно есть в таблице
query.bindValue(":NAME_D",ui->name_d_d->text());
query.exec();
2 Litkevich Yuriy:
query.exec("CREATE TABLE DIST ("
"CODE_D INTEGER PRIMARY KEY NOT NULL, "
"NAME_D VARCHAR(20) "
");");
//...
QSqlQuery query;
query.prepare("UPDATE DIST SET CODE_D = :CODE_D,NAME_D = :NAME_D WHERE CODE_D = :CODE_D");
query.bindValue(":NAME_D","tra-ta-ta");
query.bindValue(":CODE_D", 31);
query.exec();
в Firebird'е строки нужно было бы брать в кавычки, итого строка в prepare выглядела бы так:
"UPDATE DIST SET CODE_D = :CODE_D,NAME_D = \":NAME_D\" WHERE CODE_D = :CODE_D"
Блин, нашел...опять все оказалось банально.
Нельзя, чтобы было так:
О, блин, я смекнул.
Во-первых, нельзя использовать плейсхолдер повторно, даже если значения одинаковые
query.prepare("UPDATE DIST SET CODE_D = :CODE_D, NAME_D = :NAME_D WHERE CODE_D = :CODE_D");
то есть должно быть примерно так:
query.prepare("UPDATE DIST SET CODE_D = :CODE_D1, NAME_D = :NAME_D WHERE CODE_D = :CODE_D2");
query.bindValue(":CODE_D1",10);
query.bindValue(":NAME_D",ui->name_d_d->text());
query.bindValue(":CODE_D2",10);
query.exec();
можно ставить "РЕШЕНО" и закрыть тему?
MoPDoBoPoT, точно!...
кажется можно закрывать.
что такое плейсхолдер в примере ясно, а что это вообще такое?)
да, я проверил - все работает.
всем, спасибо
у меня еще вопросы есть, но тогда наверное создам новую тему, если не найду ответов сам)
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)