Форум » LetoDB, HbNetio. » LetoDB 2.17 » Ответить
LetoDB 2.17
alkresin: Обновил номер сборки с 1 до 2 и выложил исходники на Sourceforge, а то там лежала версия более чем годичной давности.
Ответов - 45, стр:
1 2 3 All
alkresin: Вышла 3-я сборка, пакет с исходниками выложен на Sourceforge, исходники и пара бинарных - у меня на сайте: http://www.kresin.ru/letodb.html
Andrey: Какая сейчас последняя версия LetoDB ? Судя по сайту - 2.17 b3, это правильно ? Там сборка для Debian 7 32-bit, а на Debian 11 64-bit она будет работать ? Какие есть возможности архивирования одного файла на сервере ? Как можно сделать архив всех баз каталога ? Возможно ли отображение бегунка архивации у клиента, кто делает архив ? Поделитесь опытом пожалуйста.
alkresin: Да, 2.17 b3. > Там сборка для Debian 7 32-bit, а на Debian 11 64-bit она будет работать ? Нет. А в чем проблема собрать из исходников? Хотя я могу выложить Debian 11 64-bit, если надо. > Какие есть возможности архивирования одного файла на сервере ? > Как можно сделать архив всех баз каталога ? Наверное, через udf можно. Я архивацию баз обычно запускаю через cron (планировщик заданий в Линукс).
Andrey: alkresin пишет: Нет. А в чем проблема собрать из исходников? Хотя я могу выложить Debian 11 64-bit, если надо. Спасибо ! Мне уже собрали, пока тестирую.
Andrey: LetoDB стоит на Linux, делаю: start dbedit -f -letodb=//000.000.000.000:2880/ Не работает с версией 2.17 Но наверное, так и должно быть...
Pasha: Andrey пишет: start dbedit -f -letodb=//000.000.000.000:2880/ Почему такой ip ? И порт не стандартный. С такими параметрами наверное так и должно быть
Andrey: Ip правильный, порт тоже. Здесь просто 0 показал. На сервере установлено 2 задачи LetoDB и LetoDbf
Pasha: Если харбор-программа, утилита manage коннектится с такими параметрами, то и dbedit тоже будет коннектиться.
Andrey: Утилита manage коннектится с такими параметрами, а dbedit - нет. После нескольких попыток, перестановок, запустилось окно. Спасибо Pasha !
Andrey: А как отображать длительные расчёты в функциях UDF, которые выполняются на сервере ? Как показать бегунок процесса расчётов ? Программа при длительном запросе UDF просто висит - белый экран и отображается: Программа не отвечает
Pasha: Клиент выдает запрос серверу и ждет ответа, сервер выполняет udf и возвращает результат. В процессе выполнения udf никакого обмена пакетами между клиентом и сервером нет и быть не может. Поэтому перед вызовом udf надо повесить сообщение, и ждать результата. Ну или выполнять udf в отдельном потоке.
PSP: Andrey пишет: Как показать бегунок процесса расчётов ? Вот в майкрософт не сильно парятся про это) Делают какие-нибудь двигающиеся кружочки/квадратики, чтобы видно было, что процесс не завис. И похер им, что проценты не показывает) И ты так сделай)
SergKis: Andrey пишет: Как показать бегунок процесса расчётов ? Можно исп. переменные сервера, для user, перед запуском создать, на сервере их заполнить в начале длит. операции (счетчик и max. значение). По мере работы, переменную счетчик, вести на сервере, на клиенте по таймеру считывать их значения и считать процент, по окончании операции с клиента переменные удалить - практически все так же, как и обычная работа длит. операции с прерыванием по Esc, например. Это то же можно предусмотреть добавив переменную сервера для прерывания, ее анализировать в длит. операции. Схема, совершенно такая же, как и в обычной работе. Имена переменных делать от user-а (nUserStru для leto 2.17, leto_MgID() для leto 3.0) например или еще как, решения есть
Andrey: PSP пишет: Делают какие-нибудь двигающиеся кружочки/квадратики, чтобы видно было, что процесс не завис. И похер им, что проценты не показывает) И ты так сделай) Сделал. Авишка висит и не двигается... Правда отдельный поток не пробовал ещё.
alkresin: На самом деле варианты решения разные есть, надо только проявить фантазию. Можно, например, написать небольшую программу, которая будет по запросу выполнять эти "длительные расчёты", сделать ее клиентом letodb и запускать ее автоматически. Программа должна будет с определенной периодичностью опрашивать переменную letodb (leto_varget()) и, если найдет там запрос на работу, выполнит ее, записав результат (leto_varset()) в другую переменную. Может и промежуточные сведения записывать. Другие клиетны должны будут просто писать запрос в определенную переменную letodb и периодически опрашивать ее в ожидании ответа.
Pasha: Можно фрагментировать долгоиграющую udf на много мелких. Скажем, вместо udf, которая считает всех абонентов, использовать udf, которая считает абонентов из некоего диапазона, и вызывать эту udf много раз, перебрав всех.
Andrey: А нельзя в сам сервер встроить механизм загрузки программ клиента. Т.е. даёшь в коде программы команду загрузить допустим <мой_код>.hrb (.prg, не надо) Который располагаешь рядом с letoudf.hrb или в другом каталоге, потом выполняешь свой код, а потом при завершении выгружаешь этот <мой_код>.hrb И в letoudf.hrb лишнего кода не будет и программисту лишний раз его пере компилировать НЕ НАДО !
Pasha: Да можно В letoudf.hrb надо добавить функцию: #ifndef HB_HRB_BIND_DEFAULT #define HB_HRB_BIND_DEFAULT 0x0 #endif Function UDF_HrbLoad( nUserStru, cHrbName ) Local pHrb := hb_HrbLoad(HB_HRB_BIND_DEFAULT, hb_dirBase() + cHrbName ) Return ! Empty(pHrb) Положить свой hrb модуль в папку letodb на сервере, и вызывать загрузку этого модуля с клиента.
Andrey: Pasha пишет: Положить свой hrb модуль в папку letodb на сервере, и вызывать загрузку этого модуля с клиента. А как выгружать ? Или не нужно этого делать ?
Pasha: Можно так: #ifndef HB_HRB_BIND_DEFAULT #define HB_HRB_BIND_DEFAULT 0x0 #endif Static aHrb := {} ... Function UDF_HrbLoad( nUserStru, cHrbName ) Local pHrb := hb_HrbLoad(HB_HRB_BIND_DEFAULT, hb_dirBase() + cHrbName ) Local nId if ! Empty(pHrb) AADD(aHrb, pHrb) nId := Len(aHrb) else nId := 0 endif Return nId Function UDF_HrbUnload( nUserStru, nId ) if nId # 0 .and. nId <= Len(aHrb) .and. aHrb[nId] # 0 hb_hrbUnload(aHrb[nId]) aHrb[nId] := 0 endif Return nil
полная версия страницы