1

(3 replies, posted in Russian)

DriveSoft wrote:

пример, если файл сохраняется непосредственно в базе

А как реализовать такое же сохранение если файл хранится не в самой бд, а в режиме LinkFile?

2

(2 replies, posted in Russian)

DriveSoft wrote:
Form1.ComboBox1.SetAllCheckBoxes(False); 

Никак не могу заставить данный скрипт сработать при событии формы OnShow. Срабатывает только по клику кнопки. Это вабще возможно?

ORDER BY FIELD  я так понимаю не поддерживается в данном случае?

Возможность массового изменения шрифтов компонентов. Или установка шрифта по умолчанию для компонентов. Тут было дело что переходе из версии в версию в программе изменились шрифты по умолчанию. Пришлось перебирать весь проэкт через настройку forms. Xml под новый дефолтный шрифт. А если он меня не устраивает то я вынужден либо создавать компонет методом копирования, либо каждый раз выбирать нужный шрифт.

Добавлю ещё живой пример, может кому пригодится:

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
Form1.ComboBox1.dbSQLExecute ('SELECT ''Улица:'' || a || '' Дом:'' || b || '' Квартира:'' || c, id FROM spisok ORDER BY id DESC, a ASC, b DESC, c DESC');
end;

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=5945

Нашёл ответ на свой вопрос.

Form1.ComboBox1.dbSQLExecute ('SELECT fieldname_1 || ''|'' || fieldname_2 || ''|'' || fieldname_3, id FROM tablename ORDER BY fieldname_2 
 DESC');

''|''- внутри кавычек содержится любой знак или текст для визуально разделения данных

sibprogsistem wrote:

установите свойство
searchable в TRUE

"Отличный" совет. Когда я захочу в комбобоксе включить функцию поиска именно так я и сделаю.

DriveSoft wrote:

Если кому то еще данный функционал был бы полезен, дайте знать.

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

sibprogsistem, спасибо за разъяснения, но вы не верно поняли вопрос.  Речь идёт о заполнении комбобокса SQL запросом. Попробуйте к примеру отсортировать ваш комбобокс на фото по полю "улица" в обратном порядке, при этом сохранив структуру вывода данных в комбобоксе "компания,улица,дом,телефон".

Здравствуйте Дмитрий, подскажите пожалуйста, в combobox в пункте fieldname можно использовать подобную запись {поле_1}|{поле_2}|{поле_3} для вывода нескольких значений. Как можно вывести несколько значений в случае использования SQL запроса для заполнения?

Hi, derek. This method suits me. Thanks.
But, the last 0000 must be entered manually.
Tell me how I can automatically move the text input cursor to the end of the TextBox when it is selected, to enter the last four digits.

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

Подскажите пожалуйста как можно справится со схожей, но более сложной задачей.
Есть текст бокс который заполняется в ручную по маске 00.0.0.0.0000.
И есть комбо боксы которые соответствуют каждой группе цифр в маске, можно ли организовать автозаполнение текстбокса с помощью нескольких комбобоксов?

Есть у меня 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                                                             

Дмитрий, спасибо, посмотрев тему разобрался. Прилагаю получившийся в итоге запрос с возможностью суммарного подсчета:

SELECT 
tip_satanka.tip_stanka,
info_stanka.id,
zurnal_cpu.id,
smeni.id,
strftime('%d.%m.%Y', zurnal_cpu.data),
info_stanka.vnutr_nazv_cpu,      
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,
info_stanka.id_firmi_postavsiki,
info_stanka.nazv_stanka,
info_stanka.invent_nomer,                  
info_stanka.zavod_nomer,
CAST(SUM (strftime('%s', zurnal_cpu.vremia_sdaci)-strftime('%s', zurnal_cpu.vremia_ostanovki)) / (3600) AS TEXT) || ':' ||
CAST((SUM (strftime('%s', zurnal_cpu.vremia_sdaci)-strftime('%s', zurnal_cpu.vremia_ostanovki)) % (3600)) / 60 AS TEXT) 
                                                                                                                                                                                                                                            
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                                                                       
LEFT OUTER JOIN tip_satanka ON tip_satanka.id=info_stanka.id_tip_satanka
           
WHERE                  
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN strftime('%m.%Y', zurnal_cpu.data) = strftime('%m.%Y', {DateTimePicker1}) ELSE 1=1 END)

GROUP BY info_stanka.id 
ORDER BY tip_satanka.tip_stanka

В итоге пришёл вот к такому варианту

strftime('%s', zurnal_cpu.vremia_sdaci)/60-strftime('%s', zurnal_cpu.vremia_ostanovki)/60

Получив время простоя в минутах. Однако, для дальнейших операций в экселе мне необходимо данное значение разделить на 1440. После операции деления на 1440 выводятся только целые значения (1,2,3), можно каким либо образом получить десятые, сотые, тысячные? Но в идеале стремлюсь на выходе получить значения в виде ЧЧ:ММ.

sibprogsistem wrote:

создайте вычисляемое поле в самой БД а через SQL запрос просто выведите это поле в результат

Может быть сможете привести пример вычисляемого поля?

Есть два поля времени zurnal_cpu.vremia_ostanovki и zurnal_cpu.vremia_sdaci. Необходимо высчитать прошедшее время между ними и вывести через SQL запрос в таблицу. Понимаю что нужно создать вычисляемое поле, пробовал разные варианты, но везде ошибки. Помогите пожалуйста.
SQL запрос который использую:

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
strftime('%d.%m.%Y', zurnal_cpu.data),
info_stanka.vnutr_nazv_cpu,      
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,          
info_stanka.id_firmi_postavsiki,
info_stanka.id_tip_satanka,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
zurnal_cpu.test
                      
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                               
info_stanka.id_firmi_postavsiki LIKE '%{poisk}%' or 
info_stanka.id_tip_satanka LIKE '%{poisk}%' or                                             
info_stanka.nazv_stanka LIKE '%{poisk}%' or
info_stanka.zavod_nomer 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 {DateTimePicker2} IS NOT NULL THEN strftime('%m.%Y', zurnal_cpu.data) = strftime('%m.%Y', {DateTimePicker2}) ELSE 1=1 END) AND 
(CASE WHEN {ComboBox1} <> -1 THEN zurnal_cpu.id_smeni = {ComboBox1} ELSE 1=1 END)
                                                    
ORDER BY zurnal_cpu.data DESC                                                                         

19

(9 replies, posted in Russian)

DriveSoft wrote:

Откройте файл forms.xml в любом текстовом редакторе и произведите замену
FontName="Tahoma" FontSize="8"
на
FontName="Segoe UI" FontSize="9"
На всякий случай сохраните резервную копию файла forms.xml

И изменить шрифт по умолчанию в самом редакторе возможно?

Кнопка открыть в Excel создаёт файл экселя с настройками по умолчанию. А соответственно формат всех ячеек устанавливается "общий". Что приводит к тому что все данные формата "0004635" получаются в виде "4635". Заставить эксель открывать новый файл с форматом "текстовый" что привело бы к исправлению данной трудности не получается. Понятно что можно использовать функцию "отчёт" и настроить типы данных, но это значительно сложнее. Как быть в данной ситуации?

21

(9 replies, posted in Russian)

После перехода на версию 5.3 у визуальных компонентов изменился шрифт по умолчанию с Tahoma на  Segoe UI. Как вернуть шрифт по умолчанию на Tahoma, либо быстро перевести проект на Segoe UI?

Спасибо. Хороший пример отвечающий на многие вопросы.

Помогите пожалуйста добавить в поиск выборку за месяц. Для поиска использую SQL запрос.

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
strftime('%d.%m.%Y', zurnal_cpu.data),
info_stanka.vnutr_nazv_cpu,      
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,
info_stanka.id_firmi_postavsiki,
info_stanka.id_tip_satanka,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer
                      
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                               
info_stanka.id_firmi_postavsiki LIKE '%{poisk}%' or 
info_stanka.id_tip_satanka LIKE '%{poisk}%' or                                             
info_stanka.nazv_stanka LIKE '%{poisk}%' or
info_stanka.zavod_nomer 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.data DESC 

Разобрался, проблема была с моей стороны.

25

(8 replies, posted in Russian)

Работает, спасибо.