Russian Qt Forum

Qt => Базы данных => Тема начата: alammer от Июль 26, 2012, 09:57



Название: с++ QT 4.8.1 + MySQL Server 5.5 (формирование запросов через GUI)
Отправлено: alammer от Июль 26, 2012, 09:57
Здравствуйте:)

Написал программу по выводу на экран информации из БД. Вывод осуществляется через QSQLQueyModel+QTableView. БД нужна для логирования, поэтому сами данные нередактируемые, к тому же будет заточена под единственного на каждую сессию клиента.
Единственная функция приложения в том, чтобы предоставить пользователю возможность выборки из БД по некоторым критериям. Т.к. потенциальный пользователь с SQL не знаком и знакомится не собирается, думаю самым удобным способом выбора критериев будет выделение мышью или некой комбинацией "кнопка+ЛКМ/ПКМ" нескольких критериев выборки на экранном представлении с последующим формированием запроса. Т.е. если грубо, кликаем на "Фамилию1", кликаем на "Фамилию2", кликаем на "ДатуХ", нажимаем на форме большую кнопку "Применить фильтр" и смотрим на результат.

Общие принципы формирования запросов в БД я знаю, как определять содержимое кликнутой ячейки таблиц (т.е. критерий выборки) тоже вроде по форумам освещено нормально, непонятно как это оптимально совместить в одном месте - запросы в драйвер БД передаются виде строки, где название таблицы и столбцы, по которым будет производится выборка (т.е. в данном случае "Фамилия" и "дата"), вроде должны указываться явно?

Я думал в сторону формирования набора шаблонов, учитывающих все возможные варианты сочетания столбцов, но потом вспомнил комбинаторику и осознал, что для таблицы из 15 столбцов это слишком будет:)

Если кто сталкивался с подобной проблемой, то буду рад помощи:)

А то я QT c MySQL первый раз три недели назад увидел и туплю сильно, вчера потратил полдня, чтобы понять как размер таблицы к размеру окна привязать, а там всего два раза мышью кликнуть надо было:)


Название: Re: с++ QT 4.8.1 + MySQL Server 5.5 (формирование запросов через GUI)
Отправлено: Bepec от Июль 26, 2012, 10:03
А поставить простейший виджет фильтр религия не позволяет?
Или вы хотите, чтобы пользователь тыкал на ячейки таблицы и далее жал на кнопку(как то кривовато, вы так не думаете?).

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

Если же хотите по данным, тогда просто сделайте множественный селект в view. А при нажатии на кнопку проходите по ним и составляйте запрос.


Название: Re: с++ QT 4.8.1 + MySQL Server 5.5 (формирование запросов через GUI)
Отправлено: alammer от Июль 27, 2012, 10:48
простейший виджет-фильтр не очень удобен, когда когда записей несколько тысяч, а отдельные поля записи состоят из 30-знаных число-буквенных последовательностей:)

заставить пользователя до посинения лист-боксы крутить в поисках нужного варианта или по 100 знаков вбивать без права на ошибку конечно легче, но как-то не сильно прямее выглядит:)

про множественный селект то понятно, непонятно как после него динамически сформировать запрос в БД?

к QSqlDriver::sqlStatement можно не отсылать, не подходит


Название: Re: с++ QT 4.8.1 + MySQL Server 5.5 (формирование запросов через GUI)
Отправлено: Bepec от Июль 27, 2012, 14:13
Эммм... я незнаю, как вы представляете себе виджет фильтр. Я себе представляю тупой запрос в БД и показ результатов.
А так же есть прокси модели. Я с ними мало знаком, но они то как раз и предоставляют вроде выборочного показа информации.