Topic: Вывод данных из присоединенных таблиц в запросе SQL в форму.

Есть у меня TableGrid1 который заполняется SQL запросом приведённом ниже. Мне необходимо выбрать запись в TableGrid1 и  показать форму (паспорт инструмента) которая бы отобразила данные из присоединенных полей БД (LEFT OUTER JOIN zatocka_instrument_tiporazmer ON zatocka_instrument_tiporazmer.id=zatocka_instrument.id_zatocka_instrument_tiporazmer). Есть способы это сделать?

SELECT
CAST((strftime('%s', 'now') - strftime('%s', zurnal_zatocka.zatocka_data)) / (86400) AS TEXT),
zurnal_zatocka.id,
info_stanka.vnutr_nazv_cpu,
info_stanka.nazv_stanka,
info_stanka.invent_nomer,
strftime('%d.%m.%Y', zurnal_zatocka.zatocka_data),
strftime('%H:%M', zurnal_zatocka.zatocka_vremia),
zatocka_instrument.instrument_id, 
zatocka_instrument_tiporazmer.instrument_tiporazmer,
zatocka_instrument_tipi.instrument_tipi,
zatocka_instrument_profil.instrument_profil,
zatocka_instrument.instrument_razmer,
zatocka_instrument.instrument_zazor,
zurnal_zatocka.zametka
                                                                                                                                                                                                                    
FROM                                    
zurnal_zatocka                                                                                                                               
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_zatocka.id_info_stanka
LEFT OUTER JOIN zatocka_instrument ON zatocka_instrument.id=zurnal_zatocka.id_zatocka_instrument
LEFT OUTER JOIN zatocka_instrument_tiporazmer ON zatocka_instrument_tiporazmer.id=zatocka_instrument.id_zatocka_instrument_tiporazmer
LEFT OUTER JOIN zatocka_instrument_tipi ON zatocka_instrument_tipi.id=zatocka_instrument.id_zatocka_instrument_tipi 
LEFT OUTER JOIN zatocka_instrument_profil ON zatocka_instrument_profil.id=zatocka_instrument.id_zatocka_instrument_profil
                                                                                             
WHERE                                   
(CASE WHEN '{poisk}' <> '' THEN info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%' or               
info_stanka.nazv_stanka LIKE '%{poisk}%'  or
info_stanka.invent_nomer LIKE '%{poisk}%' or
zatocka_instrument.instrument_id LIKE '%{poisk}%' or
zatocka_instrument_tiporazmer.instrument_tiporazmer LIKE '%{poisk}%' or
zatocka_instrument_tipi.instrument_tipi LIKE '%{poisk}%' or                                                                                      
zatocka_instrument_profil.instrument_profil LIKE '%{poisk}%' or                                                                  
zatocka_instrument.instrument_razmer LIKE '%{poisk}%' or
zatocka_instrument.instrument_zazor LIKE '%{poisk}%' or
zurnal_zatocka.zametka LIKE '%{poisk}%'
ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(zurnal_zatocka.zatocka_data) = date({DateTimePicker1}) ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker2} IS NOT NULL THEN strftime('%m.%Y', zurnal_zatocka.zatocka_data) = strftime('%m.%Y', {DateTimePicker2}) ELSE 1=1 END)
                                                                                                                                                   
ORDER BY zurnal_zatocka.id DESC                                                             

Re: Вывод данных из присоединенных таблиц в запросе SQL в форму.

Думаю можно, например с помощью функции Form.ShowRecord('имя таблицы', id - записи)


Но чтобы дать конкретный совет, необходимо знать, какие именно данные показывает форма "паспорт инструмента".
Приложите пожалуйста ваш проект.

Dmitry.

Re: Вывод данных из присоединенных таблиц в запросе SQL в форму.

Сам проект приложить не могу, но пример ситуации набросал. Как ведите в таблицу вывести данные у меня проблем не составляет, а вот если это нужно сделать в отдельное окно...

Post's attachments

Attachment icon 01.rar 294.22 kb, 295 downloads since 2019-10-04 

Re: Вывод данных из присоединенных таблиц в запросе SQL в форму.

Скрипт

procedure Form1_TableGrid1_OnDoubleClick (Sender: TObject);
begin
    Form1.Button3.Click;
end;

procedure Form1_Button3_OnClick (Sender: TObject; var Cancel: boolean);
var
    ID: integer;
begin
    ID := SQLExecute('SELECT IFNULL(id_instrument, -1) FROM rabota WHERE id='+Form1.TableGrid1.sqlValue);
    if ID <> -1 then pasport.ShowRecord('instrument', ID);
end;

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  Form1.Button1.Click
end;
Dmitry.