pavlenko.vladimir.v wrote:

MVD не поддерживает многопоточность, но Вы можете использовать Application.ProcessMessages();

Может я неправильно использую эту функцию, в каком месте кода она должна быть?

Добрый день, форумчане.
Делаю программу сбора данных с удалённых устройств (ККТ), устройств более 30 шт., периодически по очереди подключаюсь к устройствам и считываю данные. Во время подключения и передачи данных (доли секунды) программа не отвечает на запросы, курсор со стрелки меняется на крутящийся круг.
Подскажите, есть ли в MVDB возможность выделить часть кода скрипта в отдельный процесс/поток, чтобы процесс опроса устройств не мешал работе пользователя в программе? Или может есть другой способ решить эту задачу?

28

(3 replies, posted in Russian)

Alexandr wrote:

Можно ли как то поменять стандартный ярлык программы на свой?

Я использую программу Restorator 2018 для замены стандартных иконок в исполняемом файле программы вашего проекта.
Нужно подготовить 4 иконки соответсвующего размера, из них сделать файл mainicon.ico и заменить им аналогичный ресурс в Вашей программе.
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=9000&download=0

Thanks, Derek! Excellent cheat.
It suits me.

sibprogsistem wrote:

...
используйте текстовое поле
...

Да, это тоже вариант. Вот только я потом из грида экспортирую в эксель и там продолжаю со временем работать, в частности форматировать (раскрашивать) по условию, со временем в виде текста это не получится.
Хотелось бы, конечно, понять почему так работает MVDB.
Спасибо за советы.

То есть я правильно предположил, что данные в базе 1899-12-30 00:00:00.000 грид воспринимает как пустую строку?
Или проблема во встроенном SQL запросе, который заполняет грид? Использую штатную кнопку "поиск", видимо придётся на кнопу вешать SQL запрос для заполнения грида.

Добрый день.
Столкнулся с такой проблемой: в гриде на форме не отображаются (пустая ячейка) данные времени, если время = 00:00, в базе данных это поле имеет тип ВРЕМЯ и содержит данные 1899-12-30 00:00:00.000, возможно грид воспринимает эти данные как пустую строку...
Как это исправить, чтобы в ячейке отображалось 00:00?

33

(4 replies, posted in Russian)

Я не работал пока с реестром в программе, подсказать ничего не могу, но по примерам вполне реально разобраться, пробуйте, эксперементируйте.

34

(4 replies, posted in Russian)

Доброго дня!
В программе есть функции для работы с реестром, как обнаружить подключение устройств к USB можно почитать здесь: http://datadump.ru/usb-usage-history/
На форуме есть примеры работы с реестром http://myvisualdatabase.com/forum/viewtopic.php?id=7024
Делаете таймер, мониторите нужный ключ реестра...

Hi Derek!
Thanks for the example. I changed the code to meet my requirements.

Добрый день.
Помогите решить задачу:
В таблице БД есть 3 поля типа ВРЕМЯ, на форме есть, связанные с этими полями, 3 DateTimePicker, где свойство kind=time, то есть отображается в компоненте только время.
Два DateTimePicker заполняются пользователем - время начала события и время окончания события. Третий DateTimePicker это длительность события (время окончания вычесть время начала).
Как сделать, чтобы длительность события расчитывалась автоматически и записывалась в таблицу БД?
Проблема ещё в том, что событие может переходить через 0:00, то есть, например начинаться в 23:50, а заканчиваться в 0:10, по факту длительность события = 20 минут, но в DateTimePicker время хранится с датой, а дата получается одинаковая ...
Эту проблему вычисления я решить могу, как потом вычисленное время записать в БД при нажатии кнопки сохранить (кнопка стандартная Save без использования скрипта).

37

(15 replies, posted in Russian)

k245 wrote:

Не жадничайте, поделитесь косячком )))

Поковырялся в файле forms.xml и "повредились" стили форм, поэтому размер шрифта не менялся, восстановил файл и всё сработало.

38

(15 replies, posted in Russian)

for i:=0 to Form1.ComponentCount -1 do IF Form1.Components[i] is TdbStringGridEx Then
 TdbStringGridEx(Form1.Components[i]).Font.Size:=12;

Работает...
Косяк был в другом.

39

(15 replies, posted in Russian)

Добрый день.
А как сделать тоже самое, но с таблицей? Вот так не работает:

for i:=0 to Form1.ComponentCount -1 do IF Form1.Components[i] is TdbStringGridEx Then
 TdbStringGridEx(Form1.Components[i]).Font.Size:=12;

Таблицы находит, но шрифт не меняет.

Thanks Derek!
It works.

Я правильно понимаю, что в вычисляемое поле я должен написать запрос, который выберет в первой таблице (kkm) значение из поля "номер" по id из поля id_kkm второй таблицы?
Попробовал написать такой запрос, но получил синтакс еррор:

select номер
from kkm
where id = zamena.id_kkm 

Добрый день.
Помогите решить такую задачу:
Есть 2 таблицы, в первой таблице хранятся номера техники, во вторую записываются результаты перемещения техники между кабинетами.
На выходе мне нужно получить в грид таблицу вида:
старый номер | новый номер | кабинет и т.д.
111                       222                    7
444                      666                    10
для этого сделал такие связи между таблицами:
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8364&download=0
где id_kkm - старый номер, id_kkm1 - новый номер.
То есть мне в таблице нужно видеть, какой номер техники был и на какой номер техники заменили.
Не получается вывести в грид таблицу в нужном виде.

Ну вот же, где собака была зарыта! Спасибо.

vovka3003 wrote:

Зачем проверять..? Какой смысл в лишнем действии?
Нажал "отправить". Если нет интернета - значит смс-ка не уйдет и пиши в except-е, что душе угодно - хоть выход, хоть цикл повтора...

Да в том-то всё и дело, что при отсутствии интернета строчка

smsquestion.WaitForResponse(5);

вызывает ошибку

OLE error 80020009: WaitForResponse: Ошибка
Source        ::  WinHttp.WinHttpRequest
Description ::  Не удается разрешить имя или адрес сервера

и выполнение программы дальше не идёт и до except-а программа не доберётся.
Вот я и думаю, что надо эту ошибку перехватить (как?) чтобы не "вешать" ей программу.
Или у Вас по другому как-то этот класс срабатывает?

Вопросов к алгоритму нет, вопрос по реализации в коде этого самого алгоритма, как проверить есть интернет или нет?
Возможно ли реализовать эту проверку при помощи класса WinHttpRequest или нет?

Я попробовал запустить размещённый в этой теме проект отправки смс и посмотреть что будет если нет интернета, так как в финальной версии строчка проверки доступности сети интернет (при помощи ping) удалена. В своём проекте для проверки я использую это код:

    try
      url:= HTTPGet('https://www.ya.ru',True);
    except
        if ExceptionMessage <> 'HTTP/1.1 404 Not Found' then .....

Посмотрел документацию WinHttpRequest на майкрософт, но с ходу не нашёл ответа, надо глубже изучать, поэтому и возник вопрос

... дописывать логику (циклы, таймауты, перехват и обработка ошибок и т.п.)...

или продолжать использовать приведённый выше код.

Доброго дня. Можно ли при помощи WinHttpRequest проверять доступность к сети интернет? У меня мобильное интернет соединение, часто прерывается и тогда этот объект вызывает ошибку.
---------------------------
OLE error 80020009: WaitForResponse: Ошибка
Source        ::  WinHttp.WinHttpRequest
Description ::  Соединение с сервером было неожиданно прервано
---------------------------
P.S: Функция ping работает только при запуске программы с правами админа.

vovka3003 wrote:

Не замечал такого (покрайней мере - последние 5 лет точно).

Я приложение делал в 2018г, может с обновлениями VLC таких уже глюков нет. Отдельно VLC работал замечательно, а в связке с MVDB начинались проблемы.

"встроенный плеер" - не что иное как заимствованный из системы Windows Media Player.

Да понятно, что проблема не в MVDB, я таки не смог заставить сам WMP показывать rtsp поток, какие бы кодеки и плагины не ставил.
Поэтому нашёл подходящий пример на Delphi (я совсем не программист), адаптировал под свои задачи и скомпилировал. Кстати там используется библиотека libvlc, то есть получился как бы vlc плеер.
Вообще было бы интересно посмотреть Ваше решение, может пригодится для будущих проектов. Можем обсудить в личке.

Использование VLC было первым моим вариантом решения задачи, это тот же костыль, но тяжёлый и капризный (то в трей свернётся, то зависнет), мой же костылёк лёгкий и рабочий, не требует установки на комп клиента (как VLC) и упаковывается вместе с программой.
Что касается первой части моего вопроса, то я в скрипте повторяю 2 раза строчки прикрепления окна, чтобы уж наверняка прикрепить к панели.
Пробовал воспроизвести поток встроенным плеером (кто-то на форуме утверждал, что работает, у меня - нет), вот это было бы "магаровым" решением.

vovka3003 wrote:

А магар за готовое работающее решение..? wink

"Готовое решение" очень похоже на работу VLC плеера...
А о каком магаре идёт речь?