Russian Qt Forum
Ноябрь 24, 2024, 01:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ошибка mysql при model->submitAll()  (Прочитано 8428 раз)
chu
Гость
« : Июнь 17, 2011, 14:39 »

выполняется функция:
Код:
    qDebug()<<mapper->submit();
    qDebug()<<model->submitAll();
    qDebug()<<model->lastError();
получаю:
Код:
true 
false
QSqlError(2036, "QMYSQL3: Unable to bind value", "Using unsupported buffer type: -1163005939  (parameter: 1)")
даже если никаких изменений произведено не было.
При создании таблицы был указан первичный ключ.
Записан
pokidoff
Гость
« Ответ #1 : Июнь 17, 2011, 15:19 »

Может ты QDateEdit к целочисленному полю привязал, к примеру?
Покажи запрос создания таблицы и маппинг полей к виджетам.
Записан
chu
Гость
« Ответ #2 : Июнь 17, 2011, 15:33 »

создание таблицы:
Код:
                query.exec(QString("CREATE TABLE %1 ( "
                                   "id INTEGER PRIMARY KEY, "
                                   "num INTEGER, "
                                   "question TEXT, "
                                   "image LONGBLOB, "
                                   "ans1 TEXT, "
                                   "ans2 TEXT, "
                                   "ans3 TEXT, "
                                   "ans4 TEXT, "
                                   "ans5 TEXT, "
                                   "ans6 TEXT, "
                                   "ans7 TEXT, "
                                   "ans8 TEXT, "
                                   "trueimage LONGBLOB, "
                                   "falseimage LONGBLOB, "
                                   "questionType TEXT) ")
                           .arg(newLessonName));
мапинг:
Код:
    QStringList items;
    items << tr("Вопрос с вариантами ответа")
          << tr("Вопрос с вводом ответа")
          << tr("Слайд");
    questionTypeModel = new QStringListModel(items, this);
    ui->questionTypeCB->setModel(questionTypeModel);

    model = new QSqlTableModel(this);
    model->setTable(lessonName);
    questionTypeIndex = model->fieldIndex("questionType");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();

    ui->listView->setModel(model);
    ui->listView->setModelColumn(0);

    mapper = new QDataWidgetMapper(this);
    mapper->setModel(model);   
    mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    mapper->setItemDelegate(new QSqlRelationalDelegate(this));
    mapper->addMapping(ui->questionLE, model->fieldIndex("question"));
    mapper->addMapping(ui->ans1LE, model->fieldIndex("ans1"));
    mapper->addMapping(ui->ans2LE, model->fieldIndex("ans2"));
    mapper->addMapping(ui->ans3LE, model->fieldIndex("ans3"));
    mapper->addMapping(ui->ans4LE, model->fieldIndex("ans4"));
    mapper->addMapping(ui->ans5LE, model->fieldIndex("ans5"));
    mapper->addMapping(ui->ans6LE, model->fieldIndex("ans6"));
    mapper->addMapping(ui->ans7LE, model->fieldIndex("ans7"));
    mapper->addMapping(ui->ans8LE, model->fieldIndex("ans8"));
    mapper->addMapping(ui->questionTypeCB, questionTypeIndex);
Записан
pokidoff
Гость
« Ответ #3 : Июнь 17, 2011, 15:54 »

У меня ощущение, что это из-за блобов. При работе с блобами надо создавать переменные-буферы, в которых будут храниться данные во время пересылки. У меня подобное в Oracle было.
Создай временную табличку без BLOB-полей и потесть.Вот увидишь.
Записан
chu
Гость
« Ответ #4 : Июнь 17, 2011, 16:02 »

У меня ощущение, что это из-за блобов. При работе с блобами надо создавать переменные-буферы, в которых будут храниться данные во время пересылки. У меня подобное в Oracle было.
Создай временную табличку без BLOB-полей и потесть.Вот увидишь.
попробовал без блобов - изменений нет
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июнь 17, 2011, 17:37 »

Этот код:
   qDebug()<<mapper->submit();
    qDebug()<<model->submitAll();
избыточен, так уж устроен мапер, что он у модели submitAll() дёргает
Записан

Юра.
chu
Гость
« Ответ #6 : Июнь 17, 2011, 18:20 »

на другом компе с другим мускулом все работает.
не понимаю почему на первом ошибку выдает. Настройки сервера на обоих одинаковы...
Записан
chu
Гость
« Ответ #7 : Июнь 20, 2011, 01:34 »

Этот код:
   qDebug()<<mapper->submit();
    qDebug()<<model->submitAll();
избыточен, так уж устроен мапер, что он у модели submitAll() дёргает
установил политики:
Код:
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
без явного вызова model->submitAll(); в таблицу изменения не записываются
Записан
chu
Гость
« Ответ #8 : Июнь 21, 2011, 09:20 »

Вопрос не решен!
model->submitAll(); никак не хочет TRUE возвращать на компе А.
Код:
false 
QSqlError(2036, "QMYSQL3: Unable to bind value", "Using unsupported buffer type: -1163005939  (parameter: 1)")
Несколько раз переустанавливал на нем MySQL (разные версии пробовал).
На компе Б все работает.
В чем может быть причина?
« Последнее редактирование: Июнь 21, 2011, 11:04 от chu » Записан
chu
Гость
« Ответ #9 : Июнь 21, 2011, 11:19 »

У меня ощущение, что это из-за блобов. При работе с блобами надо создавать переменные-буферы, в которых будут храниться данные во время пересылки. У меня подобное в Oracle было.
Создай временную табличку без BLOB-полей и потесть.Вот увидишь.
а как эти временные буферы создавать для блобов?
Записан
apple_rtk
Гость
« Ответ #10 : Июнь 21, 2011, 17:17 »

Вопрос не решен!
model->submitAll(); никак не хочет TRUE возвращать на компе А.
Код:
false 
QSqlError(2036, "QMYSQL3: Unable to bind value", "Using unsupported buffer type: -1163005939  (parameter: 1)")
Несколько раз переустанавливал на нем MySQL (разные версии пробовал).
На компе Б все работает.
В чем может быть причина?
Поищите libmysql.dll на компе. В PATH. т.е. в system32, windows и т.п. Если найдете и найдете различие с той, которая в mysql lib/opt, то сначала забекапьте библиотеку из системной PATH и поместите туда библиотеку из lib/opt. Если поможет -  верните все назад и поместите длл из lib/opt в каталог с вашим приложением - сначала приложение ищет длл в текущем каталоге, потом - в PATH. Ток не забудьте, что при дебаге текущий каталог на уровень выше.
Мне помогло.
Записан
chu
Гость
« Ответ #11 : Июнь 22, 2011, 10:42 »

Вопрос не решен!
model->submitAll(); никак не хочет TRUE возвращать на компе А.
Код:
false 
QSqlError(2036, "QMYSQL3: Unable to bind value", "Using unsupported buffer type: -1163005939  (parameter: 1)")
Несколько раз переустанавливал на нем MySQL (разные версии пробовал).
На компе Б все работает.
В чем может быть причина?
Поищите libmysql.dll на компе. В PATH. т.е. в system32, windows и т.п. Если найдете и найдете различие с той, которая в mysql lib/opt, то сначала забекапьте библиотеку из системной PATH и поместите туда библиотеку из lib/opt. Если поможет -  верните все назад и поместите длл из lib/opt в каталог с вашим приложением - сначала приложение ищет длл в текущем каталоге, потом - в PATH. Ток не забудьте, что при дебаге текущий каталог на уровень выше.
Мне помогло.
И мне помогло! Спасибо огромное! Улыбающийся
Только libmysql.dll не в mysql lib/opt, а в mysql bin
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.