crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Не отрабатывает QDataWidgetMapper->submit(), В 4.5.3 работало, в 4.8.2 не работает
JohnZ
  опции профиля:
сообщение 9.10.2015, 15:14
Сообщение #1


Участник
**

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

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




Репутация:   0  


Всем Здравия !

ВотЪ такая проблема, код

Раскрывающийся текст


// После нажатия Ок

void fpForma::on_buttonBox_accepted()
{ // Stores data from QLineEdit to database using QDataWidgetMapper
if (dataMapper)
dataMapper->submit();

QDialog::accept();
}



в 4.5.3 работало, БД обновлялась.
После перехода в 4.8.2 не работает, БД не обновляется, и сообщений никаких :(
В чём трабл, подскажите plz кто в курсе ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.10.2015, 15:20
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Как вариант, у тебя Qt 4.8.2, а вот плагин для работы с БД такой же версии?
А то может забыл обновить или старые пути прописаны?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 9.10.2015, 19:06
Сообщение #3


Участник
**

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

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




Репутация:   0  


Цитата(ViGOur @ 9.10.2015, 15:20) *
Как вариант, у тебя Qt 4.8.2, а вот плагин для работы с БД такой же версии?
А то может забыл обновить или старые пути прописаны?

Где и как можно проверить версию сборки плагина и драйвера ?
До-Собирал его сам, т.к. в установке QT 4.8.2 ни плагина ни драйвера MySQL-я не было.
База-то читается, но вот только не пишется ... :(

Пробовал подкинуть собранные из 4.5.3, - результат тот-же.
Сервер MySQL 4.1, но клиента использовал из MySQL 5.5, так работало в QT 4.5.3
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 12.10.2015, 9:14
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Какая ошибка возвращается при записи?
Проверь, соответствуют ли типы, размеры полей твоей app и БД.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 12.10.2015, 15:49
Сообщение #5


Участник
**

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

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




Репутация:   0  


Цитата(ViGOur @ 12.10.2015, 9:14) *
Какая ошибка возвращается при записи?
Проверь, соответствуют ли типы, размеры полей твоей app и БД.

В том-то и дело, что ошибок нет, и изменений в записи тоже нет.
Скорее всего, напутано в логике работы с dataMapper.
Код класса получился 3-го рода, - уже и сам в нём запутался :)
2 дня в отладчике, - результат == 0 :( Будем искать ... :)
Слишком уж он большой получился. Хотелось реализовать универсальность
в рамках одного (рекурсивного) класса. Для полного раскрытия вопроса, нужно
глянуть _весь_ проэкт, а тут как говорится, одному и за 10 дён ... :)
Если по-теме mapper-а, то в примерах нашёл такой код ...
Раскрывающийся текст

mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->addMapping(nameEdit, 0);
mapper->addMapping(addressEdit, 1);
mapper->addMapping(ageSpinBox, 2);

connect(previousButton, SIGNAL(clicked()), mapper, SLOT(toPrevious()));
connect(nextButton, SIGNAL(clicked()), mapper, SLOT(toNext()));
connect(mapper, SIGNAL(currentIndexChanged(int)), this, SLOT(updateButtons(int)));

Интересует последний connect, - откуда mapper может узнать о currentIndexChanged, в случае
листания постранично (QTableView) и перемещения Home/End ?
У меня подозрение что перед записью mapper восстанавливает значения в элементах диалога из БД,
а затем уже их сохраняет, поэтому нет изменений в БД. Поймать пока не могу ... :(
На картинке, все 3 окна, - это объекты одного класса, созданы рекурсивно. На 1-м уровне, т.е. при
изменении только шапки накладной, изменения в БД попадают, а вот при изменении содержимого, - нет.

В догонку
Дошёл отладчиком до сохранения в БД, дык там действительно ошибка в драйвере БД.

QMYSQL3: Unable to bind value
Using unsupported buffer type: -842150451 (parameter: 1)

Первый параметр это ID ( uint (10) ) В QT 4.5.3 такого не было :blink:
Если пересобрать в QT 4.5.3, БД обновляется без проблем.
Может такое быть, из-за того что сервер и клиент разных версий ?
Но с другой стороны, почему тогда в QT 4.5.3 работает, а в 4.8.2 нет ? :blink:

Сообщение отредактировал JohnZ - 12.10.2015, 19:28
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 12.10.2015, 21:33
Сообщение #6


Участник
**

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

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




Репутация:   0  


Решено !
1. В каталоге QT 4.8.2\BIN не хватало драйвера libmysql.dll
2. Мапер получал несуществующий индекс поля БД, и тупо молчалЪ ...
Как пример, поле даты на картинке, в БД отсутствовало, и мапер получал
номер несуществующего поля, и вообще отказывался что-либо обновлять.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 13.10.2015, 9:04
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Только хотел сказать, что похоже на то, что у тебя все же как я и говорил проблема с плагином MySQL, а то и с его отсутствием, вот в последнем твоем посте ты это и подтвердил. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 3:23