1 (edited by m.prokhachev 2019-06-06 15:04:28)

Topic: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

На форме есть грид, есть три комбобокса. По двум из трех комбобоксам фильтруется вывод в грид через инкрементальный поиск (к комбобоксам привязаны кнопки с действием "Поиск"). Также на форме присутствуют кнопки с действием "Новая запись", "Просмотреть/Отредактировать запись", "Удалить запись. На третьем комбобоксе висит кнопка с действием "SQL-запрос", так как стандартные механизмы не тянут - участвует 5 таблиц в выводе (программа просто виснет при настройке действия "Поиск").

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

Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

Если в SQL запросе присутствует id таблицы, то должно работать, проверьте, указано ли в  настройках кнопки "SQL запрос" опция "Выберите главную таблицу базы данных в запросе", там необходимо выбрать таблицу, которой принадлежит поле id в запросе. Обычно главная таблица определяется автоматически, возможно в вашем случае таблица определилась неверно.


Если не получиться решить проблему, приложите пожалуйста ваш проект, проверю в чем дело.

Dmitry.

3 (edited by m.prokhachev 2019-06-07 12:40:37)

Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

Так вот для чего нужна "главная таблица"!.. А я думал-думал, так и не понял, ведь в http://myvisualdatabase.com/help_ru/ написано только

Обратите внимание на опцию: "Выберите главную таблицу базы данных в запросе" - в случае сложных SQL запросов с подзапросами, необходимо самостоятельно выбрать главную таблицу базы данных.

и ни слова о гарантии работоспособности форм добавления-просмотра/редактирования-удаления записи из таблицы в данном отображении содержимого грида.

Проставил нужную таблицу - всё работает как надо. Спасибо!

Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

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

У меня таблицы связаны так: 1<-2<-3->4->5, где стрелочки - это ключи-связи. Так вот, таблицей поиска при действии "Поиск" была таблица 4 (потому что в ней половина извлекаемых данных находилась), а стоило поставить 3 - как всё заработало как надо, и необходимость в кнопке с действием "SQL-запрос" отпала... Ну как так-то?!

5 (edited by k245 2019-06-07 13:29:48)

Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

m.prokhachev wrote:

У меня таблицы связаны так: 1<-2<-3->4->5, где стрелочки - это ключи-связи.


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


Если бы пришлось писать запрос вручную, то по вашей схеме выборку нужно делать из таблицы 3, а остальные таблицы - джойнить, так что всё выглядит логично )))


Главную таблицу рекомендуется указывать, если число таблиц, данные из которых связываются построителем, больше двух.

Визуальное программирование: блог и телеграм-канал.

6 (edited by m.prokhachev 2019-06-07 14:07:11)

Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

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


Если бы пришлось писать запрос вручную, то по вашей схеме выборку нужно делать из таблицы 3, а остальные таблицы - джойнить, так что всё выглядит логично )))


Главную таблицу рекомендуется указывать, если число таблиц, данные из которых связываются построителем, больше двух.

Вообще, вымученный мною sql-запрос в кнопке с действием "SQL-запрос" выглядел так:

SELECT
  strftime("%d.%m.%Y", 4.measurementDate) AS "measurementDate",
  2.GroupID,
  3.SerialNumber, 
  3.SubGroupID,
  1.SiteID,
  4.measurement_F,       
  4.measurement_t,
  4.currentPressure,
  5.SensorStatus,
  4.id
         
FROM 1                       
LEFT OUTER JOIN 2 ON 2.id_1 = 1.id  
LEFT OUTER JOIN 3 ON 3.id_2 = 2.id
LEFT OUTER JOIN 4 ON 4.id_3 = 3.id
LEFT OUTER JOIN 5 ON 4.id_5 = 5.id
                                      
WHERE 1.id = {cbSiteID}

ORDER BY 4.measurementDate, 2.GroupID, 3.SubGroupID;

и он выдавал то, что я и хотел в отличие от кнопки с действием "Поиск", где я ставил в качестве таблицы поиска таблицу 4, потом 1 (исходя из вымученного SQL-запроса). Причем выдавал ровно столько, сколько нужно - без избытка, дупликатов или недостатка.

Так написать запрос пришлось потому, что искомое значение из фильтрующего комбобокса находилось в таблице 1.

7 (edited by m.prokhachev 2019-06-07 14:12:52)

Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр

А, и малость я ввёл вас в заблуждение, на самом деле связь такая: 1<-2<-3<-4->5 - еще и поэтому и ставилась таблица 4 в качестве таблицы поиска при настройке кнопки с действием "Поиск" (которая и не работала как надо).
Так что насчет ценности "добытой" мною информации - еще надо подумать...