crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> [РЕШЕНО] QSqlQuery::prepare, не выполняется UPDATE
bayah
  опции профиля:
сообщение 23.11.2009, 18:20
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот еще...)
Не пойму, почему не получается именно обновить?

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();
}




Да вообще UPDATE не проходит банально

        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();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
MoPDoBoPoT
  опции профиля:
сообщение 25.11.2009, 20:35
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


О, блин, я смекнул.
Во-первых, нельзя использовать плейсхолдер повторно, даже если значения одинаковые
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();

Во-вторых, не вижу смысла в замене значения поля на тоже самое значение :)
UPDATE DIST SET CODE_D = :CODE_D, NAME_D = :NAME_D WHERE CODE_D = :CODE_D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Тема закрытаНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 2:27