В пределах одной таблицы всё работает хорошо, но как только в формирование результата добавляешь смежную таблицу вылетает ошибка. Связи таблиц настроены верно, по отдельности всё работает отлично. Как быть? Раздел: склад>показать паспорт детали.

Столкнулся вот с такой бедой. В пределах одной таблицы всё работает хорошо, но как только в формирование результата добавляешь смежную таблицу вылетает ошибка. Связи таблиц настроены верно, по отдельности всё работает отлично. Как быть?

53

(8 replies, posted in FAQ)

А возможно тоже самое провернуть с колонками, если да то можно пример?

Полностью согласен, точно такая же проблема...

55

(4 replies, posted in Russian)

Спасибо, я разобрался. Работающим вариантом для моей задачи будет:

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
strftime('%d.%m.%Y', zurnal_cpu.data),
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci),                                                                                                      
zurnal_cpu.pricina_ostanovki,
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,
zurnal_cpu.vipolnenie_raboti,
smeni.smeni                
                      
FROM
zurnal_cpu 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka
LEFT OUTER JOIN smeni ON smeni.id=zurnal_cpu.id_smeni

WHERE
(CASE WHEN '{poisk}' <> '' THEN info_stanka.invent_nomer LIKE '%{poisk}%' or
info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%' or
zurnal_cpu.pricina_ostanovki LIKE '%{poisk}%' or
zurnal_cpu.code_error LIKE '%{poisk}%' or 
zurnal_cpu.tekst_oshibki LIKE '%{poisk}%' or
zurnal_cpu.vipolnenie_raboti LIKE '%{poisk}%'  
ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(zurnal_cpu.data) = date({DateTimePicker1}) ELSE 1=1 END) AND
(CASE WHEN {ComboBox1} <> -1 THEN zurnal_cpu.id_smeni = {ComboBox1} ELSE 1=1 END)
                                                    
ORDER BY zurnal_cpu.id DESC                                                                         

56

(4 replies, posted in Russian)

(CASE WHEN '{poisk}' <> '' THEN info_stanka.invent_nomer LIKE '%{poisk}%'  ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(zurnal_cpu.data) = date({DateTimePicker1}) ELSE 1=1 END) AND
(CASE WHEN {ComboBox1} <> -1 THEN zurnal_cpu.id_smeni = {ComboBox1} ELSE 1=1 END)

данный вариант работает при поиске текста только в таблице info_stanka.invent_nomer как быть если нужно искать в нескольких таблицах, не могу никак в синтаксис въехать, извините smile?

Просто стоит галочка в настройках TableGrid. Нет никаких скриптов. Про правый клик и поиск понятно.

Каким методом можно реализовать поиск по уже выведенным дочерним записям в таблице?

59

(4 replies, posted in Russian)

Весь поиск реализую SQL запросами. На данный момент на формах присутствует поиск по параметрам : текст, дата, выпадающий список.
Суть проблемы: поиск реализован двумя разными запросами, один отвечает за текст, другой за дату и выпадающий список. Хочу объединить всё в один запрос для того чтобы поиск производился по всем этим параметрам одновременно, не получается мало знаний в sql.

Код поиска текста:

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
strftime('%d.%m.%Y', zurnal_cpu.data),
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci),
zurnal_cpu.pricina_ostanovki,
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,
zurnal_cpu.vipolnenie_raboti                                                                                

FROM
zurnal_cpu 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka


WHERE
(CASE WHEN '{poisk}' <> '' THEN info_stanka.invent_nomer LIKE '%{poisk}%'  ELSE 1=1 END) OR
(CASE WHEN '{poisk}' <> '' THEN info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%'  ELSE 1=1 END) OR
(CASE WHEN '{poisk}' <> '' THEN zurnal_cpu.pricina_ostanovki LIKE '%{poisk}%'  ELSE 1=1 END) OR
(CASE WHEN '{poisk}' <> '' THEN zurnal_cpu.code_error LIKE '%{poisk}%'  ELSE 1=1 END) OR
(CASE WHEN '{poisk}' <> '' THEN zurnal_cpu.tekst_oshibki LIKE '%{poisk}%'  ELSE 1=1 END) OR
(CASE WHEN '{poisk}' <> '' THEN zurnal_cpu.vipolnenie_raboti LIKE '%{poisk}%'  ELSE 1=1 END)

ORDER BY zurnal_cpu.id DESC  

Код поиска по дате и выпадающему списку:

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
strftime('%d.%m.%Y', zurnal_cpu.data),
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci),
zurnal_cpu.pricina_ostanovki,
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,
zurnal_cpu.vipolnenie_raboti,
smeni.smeni 
                              
FROM
zurnal_cpu 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka
LEFT OUTER JOIN smeni ON smeni.id=zurnal_cpu.id_smeni

WHERE
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(zurnal_cpu.data) = date({DateTimePicker1}) ELSE 1=1 END) And
(CASE WHEN {ComboBox1} <> -1 THEN zurnal_cpu.id_smeni = {ComboBox1} ELSE 1=1 END)
 
 ORDER BY zurnal_cpu.id DESC
DriveSoft wrote:

К сожалению в вашем проекте нет записей в таблице status_zadania...

Этого вполне достаточно, спасибо.

DriveSoft wrote:

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

Хотелось бы увидеть как это реализуется. Буду применять в других местах по мере разработки.

DriveSoft wrote:

Пожалуйста опишите свою ситуацию.

Есть журнал заданий для рабочих смен. Для визуально отображения статуса заданий ячейки покрашены в разные цвета вот таким методом:

procedure zurnal_zadania_TableGrid1_OnChange (Sender: TObject);
var
   i,c: integer;
begin
     c := zurnal_zadania.TableGrid1.RowCount-1; // получаем количество строк в гриде
     for i := 0 to c do // цикл перебора всех строк
     begin
          // красим ячейку в зависимости от текста или части текста в ней, в колонке 2
          if  Pos('Не принято', zurnal_zadania.TableGrid1.Cells[1,i])>0 then zurnal_zadania.TableGrid1.Cell[1,i].Color := $005551F4;
          if  Pos('Принято', zurnal_zadania.TableGrid1.Cells[1,i])>0 then zurnal_zadania.TableGrid1.Cell[1,i].Color := $0053D9FF;
          if  Pos('Выполнено', zurnal_zadania.TableGrid1.Cells[1,i])>0 then zurnal_zadania.TableGrid1.Cell[1,i].Color := $005FD862;
          //if  Pos('Выполнено', zurnal_zadania.TableGrid1.Cells[1,i])>0 then zurnal_zadania.TableGrid1.Cell[1,i].TextColor := clGreen; если надо покрасить текст
     end;
end;

На данный момент статус меняется методом вызова нового окна и выбором из выпадающего списка. Хотелось бы это делать кнопками в окне где находится грид.

Хотелось бы увидеть пример данной задачи. Можно кодом.  Это возможно?

Пользовал поиск не нашёл ответа... Как удалить файл изображения из папки добавленный с помощью компонента DBImage работающего в режиме LinkFile при удалении записи?

Помогите написать скрипт (если он возможен) на изменение даты (минус один день к текущей дате) в DateTimePicker при выборе определённой записи в ComboBox.

Итоговый запрос стал таким

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
strftime('%d.%m.%Y', zurnal_cpu.data),
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci),                              
zurnal_cpu.pricina_ostanovki,
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,                
zurnal_cpu.vipolnenie_raboti                      
                                                                                                              
FROM                                    
zurnal_cpu 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka
                    
WHERE                                   
(info_stanka.invent_nomer LIKE '%{poisk}%') OR     
(info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%') OR                                                                 
(zurnal_cpu.pricina_ostanovki LIKE '%{poisk}%') OR    
(zurnal_cpu.code_error LIKE '%{poisk}%') OR                
(zurnal_cpu.tekst_oshibki LIKE '%{poisk}%') OR                              
(zurnal_cpu.vipolnenie_raboti LIKE '%{poisk}%');

Помогите пожалуйста добавить сюда поиск zurnal_cpu.data через DateTimePicker и поиск по чекбоксу zurnal_cpu.smena.

Есть журнал работ. Сотрудник заносит туда запись содержащую в себе данные о дате работ, начале работ, их окончании и описание работ.
Задача организовать поиск по дате с учётом смены сотрудника.
В теории я вижу два пути:
Первый, это добавить в запись пункт где сотрудник будет указывать свою смену.
Второй, sqlite запрос на поиск в диапазоне времени. но есть нюанс с датой. приведу пример смен.
29.01.2019
1я смена: 07:00-15:45
2я смена: 15:30-00:00
30.01.2019
3я смена: 23:45-07:15
Но третья смена относится к 29 числу.

В первом случае я не могу разобраться как мне произвести поиск в уже выданных результатах в таблице.
Во втором случае возникает проблема в моём малом опыте работы с sqlite.
Помогите пожалуйста найти оптимальное решение. Шаблон к записи прилагаю.

Сервер находится внутри локальной сети. В итоге всех плясок с бубном по настройке mysql сервера я смог достигнуть лимита в 15мб.  Буду отказываться от прямого хранения...

Пример рабочий. Но как быть если необходимо подобную запись вывести в отчет (печать на принтере)?

При попытке прикрепить файл через форму добавления файлов выдаёт ошибку, подозреваю что она связанна с размером файла. Так как не крепятся файлы больше 1 мб.

Странно но работает. Правда я только сейчас осознал что придется каким то образом переделывать кнопки предназначенные для редактирования записи так как они перестали работать. Проект приложил.Раздел перечень станков.

Тут мне дал ответ (а теперь его нету)  другой участник форума. На базе него я решил свой вопрос  методом ниже. Извиняюсь за не ясность со связями, в следующий раз постараюсь выражать мысль точнее. Скажите пожалуйста существует ли существенная разница между моим методом и вашим (к примеру в плане нагрузки на сервер)?

SELECT
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
info_stanka.data_vvoda,
firmi_postavsiki.firma_postavki,
ceha.ceh,                                 
tip_satanka.tip_stanka
                                                                                                                   
FROM                           
info_stanka,firmi_postavsiki,ceha,tip_satanka                                 

WHERE
info_stanka.id_firmi_postavsiki = firmi_postavsiki.id and
info_stanka.id_ceha = ceha.id and
info_stanka.id_tip_satanka = tip_satanka.id and
((info_stanka.invent_nomer LIKE '%{Edit1}%') OR
(info_stanka.vnutr_nazv_cpu LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(info_stanka.zavod_nomer LIKE '%{Edit1}%') OR
(firmi_postavsiki.firma_postavki LIKE '%{Edit1}%')OR
(ceha.ceh LIKE '%{Edit1}%')OR
(tip_satanka.tip_stanka LIKE '%{Edit1}%'));

Тема поднималась тут неоднократно. Но разобраться так и не смог. БД на msql. Требуется организовать поиск в разных связанных таблицах. я так понимаю что решение кроется в обледенении таблиц но решить вопрос так и не смог. Вот запрос до которого я дошёл.

SELECT
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
info_stanka.data_vvoda,
firmi_postavsiki.firma_postavki
ceha.ceh
                                                                                                                   
FROM                           
info_stanka (????)                                     

WHERE           
(info_stanka.invent_nomer LIKE '%{Edit1}%') OR
(info_stanka.vnutr_nazv_cpu LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(firmi_postavsiki.firma_postavki LIKE '%{Edit1}%') OR
(ceha.ceh LIKE '%{Edit1}%');

Файл сохраняется в БД на msql. Данный вами пример не подходит.

Сам компонент вызывает затруднение в использовании у конечного пользователя. Есть желание сам компонент скрыть а его действия назначить на кнопки. это возможно?