crossplatform.ru

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


  Ответ в QDataWidgetMapper & New Record
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
JohnZ Дата 16.7.2015, 12:38
 
Цитата(lanz @ 15.7.2015, 22:08) *
Там скобка в конце прилипла.

Да, уже увидел. Исходник тот-же, как я и предполагал, его не правили.
Но проблема с отображением даты в QTableView так и не решена :(
lanz, если найдёшь, дай знать, - и я соответственно тоже,
если найду, сообщу. Ок ?

Удачи !
lanz Дата 15.7.2015, 22:08
  Там скобка в конце прилипла.
JohnZ Дата 15.7.2015, 19:58
 
Цитата(lanz @ 15.7.2015, 13:57) *
Цитата
"Уговорил" я мапера :)


Это хорошо :lol:
Просто одна мысль:
Рассмотрите такой вариант развития событий.
1. Пользователь вводит данные полчаса
2. Прежде чем он успел нажать OK, выключается свет.

В случае использования транзакций, в журнале БД могут остатся данные и можно попробовать их спасти.
В случае когда вставка не происходит, данные можно тоже временно куда то сохранить, но зачем дублировать функционал БД.

В принципе пока планирую этот вариант для QRecordSet, т.е. работа по 1-й записи.
Максимум что пропадёт, - 1 запись. Это терпимо, юзверь не успеет озвереть :lol:

Цитата
Посмотрел, не нашел ничего про даты, может в Qt5 другой пример?
(или я вижу фигу :lol:)
(Да, смотрел здесь https://github.com/qtproject/qtbase/tree/de...sql/sqlbrowser)

Пример тот-же, врядли его правили под 5-ку из 4-ки. Я уже и построчно пересматривал, и ui-шный файл,
нет ничего про дату, но у меня аналогичная связка (QSqlTableModel & QTableView) дату показывает в коротком
формате. Магия какая-то :blink: Где искать - хез ...
Ссылка почему-то не рабочая. Показывает 404 страницу.
lanz Дата 15.7.2015, 13:57
 
Цитата
"Уговорил" я мапера :)


Это хорошо :lol:
Просто одна мысль:
Рассмотрите такой вариант развития событий.
1. Пользователь вводит данные полчаса
2. Прежде чем он успел нажать OK, выключается свет.

В случае использования транзакций, в журнале БД могут остатся данные и можно попробовать их спасти.
В случае когда вставка не происходит, данные можно тоже временно куда то сохранить, но зачем дублировать функционал БД.

Посмотрел, не нашел ничего про даты, может в Qt5 другой пример?
(или я вижу фигу :lol:)

(Да, смотрел здесь https://github.com/qtproject/qtbase/tree/de...sql/sqlbrowser)
JohnZ Дата 15.7.2015, 10:27
 
Цитата(lanz @ 15.7.2015, 9:24) *
Цитата
Этот вариант я тоже обмозговывал, но затем отмёл как нежизнеспособный по нескольким причинам:
1. Юзверь в последний момент может отказаться от ввода, нажав отмену, а пустая запись уже создана ?!
2. Как при работе в сети должно происходить создание пустых записей в базе при наличии уникального ключа,
возможно составного, да ещё и со связанными таблицами, как в накладной ?!
3. В момент создания пустышки (находясь в мульти-юзере) банально пропал свет ?!

Это же БД :lol:
Начинаем транзакцию, и
1. Юзер отказывается -> rollback
2. Создаем настоящий уникальный ключ, так же, как он создается сейчас, автоинкремент или хранимая процедура.
3. Пропал свет -> пропала транзакция
Если все хорошо, делаем commit
У модели есть
http://doc.qt.io/qt-4.8/qabstractitemmodel.html#submit
http://doc.qt.io/qt-4.8/qabstractitemmodel.html#revert

В транзакции я пока не "обоачивал", мне было важно принципиально разобраться возможно или нет.
Пока проблема решилась следующим образом ... "Уговорил" я мапера :)
Раскрывающийся текст

case Qt::Key_Insert:
event->accept();
idx = formChild->dataMapper->currentIndex();
formChild->dataMapper->clearMapping();
formChild->clearFieldsValues();
if (formChild->exec() == QDialog::Accepted)
{
curRecord = model->record();
model->insertRecord (-1, curRecord);
formChild->mapDynaProperty();
formChild->dataMapper->submit();
}
else
formChild->mapDynaProperty();
formChild->dataMapper->setCurrentIndex(idx);
return;


// clearFieldsValues() очистка элементов формы, например lineEdit->clear();
// mapDynaProperty() связывание с БД элементов формы


Цитата
Цитата
Был-бы код делегата или его вызов, понятное дело, а то ведь нету ?!

А можно ссылку на этот пример, а то я чего то не найду.

В директории установленной QT в папке demos.
У меня на машине это D:\QT\4.5.3\demos\sqlbrowser\
lanz Дата 15.7.2015, 9:24
 
Цитата
Этот вариант я тоже обмозговывал, но затем отмёл как нежизнеспособный по нескольким причинам:
1. Юзверь в последний момент может отказаться от ввода, нажав отмену, а пустая запись уже создана ?!
2. Как при работе в сети должно происходить создание пустых записей в базе при наличии уникального ключа,
возможно составного, да ещё и со связанными таблицами, как в накладной ?!
3. В момент создания пустышки (находясь в мульти-юзере) банально пропал свет ?!

Это же БД :lol:
Начинаем транзакцию, и
1. Юзер отказывается -> rollback
2. Создаем настоящий уникальный ключ, так же, как он создается сейчас, автоинкремент или хранимая процедура.
3. Пропал свет -> пропала транзакция
Если все хорошо, делаем commit
У модели есть
http://doc.qt.io/qt-4.8/qabstractitemmodel.html#submit
http://doc.qt.io/qt-4.8/qabstractitemmodel.html#revert

Цитата
Был-бы код делегата или его вызов, понятное дело, а то ведь нету ?!

А можно ссылку на этот пример, а то я чего то не найду.
JohnZ Дата 14.7.2015, 19:27
 
Цитата(lanz @ 14.7.2015, 13:10) *
При нажатии кнопки Add сначала добавлять строку с дефолтными значениями и переключать маппер на нее.

Этот вариант я тоже обмозговывал, но затем отмёл как нежизнеспособный по нескольким причинам:
1. Юзверь в последний момент может отказаться от ввода, нажав отмену, а пустая запись уже создана ?!
2. Как при работе в сети должно происходить создание пустых записей в базе при наличии уникального ключа,
возможно составного, да ещё и со связанными таблицами, как в накладной ?!
3. В момент создания пустышки (находясь в мульти-юзере) банально пропал свет ?!

Тут нужно как-ниить "маппера" уговорить этим заниматься.
Может создать потомка и добавить ему NewRecord() с временным запретом мапирования по флажку ?

Цитата
С форматированием строк надо копать делегаты. Я бы начал с этого, переопределив
http://doc.qt.io/qt-4.8/qitemdelegate.html#paint
Глядя на
https://github.com/qtproject/qtbase/blob/de...legate.cpp#L329

Всё правильно, но ведь в исходнике sqlbrowser-а нет ни строчки упоминания про делегата !!!
Мне нужно/интересно разобраться КАК он это делает ...
Был-бы код делегата или его вызов, понятное дело, а то ведь нету ?!
lanz Дата 14.7.2015, 13:10
  При нажатии кнопки Add сначала добавлять строку с дефолтными значениями и переключать маппер на нее.
С форматированием строк надо копать делегаты. Я бы начал с этого, переопределив
http://doc.qt.io/qt-4.8/qitemdelegate.html#paint
Глядя на
https://github.com/qtproject/qtbase/blob/de...legate.cpp#L329
JohnZ Дата 14.7.2015, 11:04
  Помогите плз решить такую проблему ...

Имеется динамический диалог, в котором произведено опять-же динамическое
связывание полей и записи с пом-ю QDataWidgetMapper. ()

Используемая модель, - QTableView.

Для случая редактирования записи, проблем нет, вызывается Dialog->exec() и далее
в зависимости от рез-та сохраняем запись ( dataMapper->submit() ).

А как быть в случае добавления записи ?
Т.е. нужно очистить диалог, дать возможность юзверю ввести свои данные,
и затем добавить запись.

Дело в том, что кнопка Insert может быть нажата на _любой_ записи в списке
(QTableView), и при смапированных полях, может пострадать "ни в чём не виновная" запись :rolleyes:

Делать очистку dataMapper->clearMapping() тоже не вариант, т.к. в след-й раз чтобы показать этот-же
диалог на редактирование, нужно будет перестраивать кроме этого диалога (и мапирования) все
возможные связанные (child) диалоги.

ВотЪ, объяснил как смог. Помогите плз кто в курсе проблемы.
В принципе более интерисует алгоритм решения проблемы, нежели код.
Если нужен код мапирования и запуска диалога, - выложу, но как я уже сказал, он тривиален,
всё взято из примеров.

И попутно, вопрос по отображению даты в QTableView. В примере sqlbrowser, год отображается 4-мя
цифрами, а у меня почему-то 2-мя. Пересмотрел весь пример, этой установки не нашёл. В чём трабл ?

Заранее благодарю за помощь.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 15:49