Russian Qt Forum

Qt => Базы данных => Тема начата: chu от Июнь 17, 2011, 14:39



Название: ошибка mysql при model->submitAll()
Отправлено: 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)")
даже если никаких изменений произведено не было.
При создании таблицы был указан первичный ключ.


Название: Re: ошибка mysql при model->submitAll()
Отправлено: pokidoff от Июнь 17, 2011, 15:19
Может ты QDateEdit к целочисленному полю привязал, к примеру?
Покажи запрос создания таблицы и маппинг полей к виджетам.


Название: Re: ошибка mysql при model->submitAll()
Отправлено: chu от Июнь 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);


Название: Re: ошибка mysql при model->submitAll()
Отправлено: pokidoff от Июнь 17, 2011, 15:54
У меня ощущение, что это из-за блобов. При работе с блобами надо создавать переменные-буферы, в которых будут храниться данные во время пересылки. У меня подобное в Oracle было.
Создай временную табличку без BLOB-полей и потесть.Вот увидишь.


Название: Re: ошибка mysql при model->submitAll()
Отправлено: chu от Июнь 17, 2011, 16:02
У меня ощущение, что это из-за блобов. При работе с блобами надо создавать переменные-буферы, в которых будут храниться данные во время пересылки. У меня подобное в Oracle было.
Создай временную табличку без BLOB-полей и потесть.Вот увидишь.
попробовал без блобов - изменений нет


Название: Re: ошибка mysql при model->submitAll()
Отправлено: lit-uriy от Июнь 17, 2011, 17:37
Этот код:
   qDebug()<<mapper->submit();
    qDebug()<<model->submitAll();
избыточен, так уж устроен мапер, что он у модели submitAll() дёргает


Название: Re: ошибка mysql при model->submitAll()
Отправлено: chu от Июнь 17, 2011, 18:20
на другом компе с другим мускулом все работает.
не понимаю почему на первом ошибку выдает. Настройки сервера на обоих одинаковы...


Название: Re: ошибка mysql при model->submitAll()
Отправлено: chu от Июнь 20, 2011, 01:34
Этот код:
   qDebug()<<mapper->submit();
    qDebug()<<model->submitAll();
избыточен, так уж устроен мапер, что он у модели submitAll() дёргает
установил политики:
Код:
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
без явного вызова model->submitAll(); в таблицу изменения не записываются


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


Название: Re: ошибка mysql при model->submitAll()
Отправлено: chu от Июнь 21, 2011, 11:19
У меня ощущение, что это из-за блобов. При работе с блобами надо создавать переменные-буферы, в которых будут храниться данные во время пересылки. У меня подобное в Oracle было.
Создай временную табличку без BLOB-полей и потесть.Вот увидишь.
а как эти временные буферы создавать для блобов?


Название: Re: ошибка mysql при model->submitAll()
Отправлено: apple_rtk от Июнь 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. Ток не забудьте, что при дебаге текущий каталог на уровень выше.
Мне помогло.


Название: Re: ошибка mysql при model->submitAll()
Отправлено: chu от Июнь 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