Andrey: Взял последнюю версию с "Новая страница с бинарниками", установил на Win2008 Server, чуток помучился с портом... Собрал на МиниГуи+BCC 551 - \MiniGui\batch\hbmk2.bat rddleto.hbp Получил rddleto.lib - 131072 байт - правильный ли размер ? И еще Warning-и лезут: lib\.hbmk\win\bcc\rddsys.c: source\client\letocl.c: source\client\leto1.c: source\client\letomgmn.c: source\common\blowfish.c: source\common\common_c.c: source\common\hbip.c: TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation /P32 lib\rddleto.lib -+ lib\.hbmk\win\bcc\rddsys.obj -+ lib\.hbmk\win\bcc\letocl.obj -+ lib\.hbmk\win\bcc\leto1.obj -+ lib\.hbmk\win\bcc\letomgmn.obj -+ lib\.hbmk\win\bcc\blowfish.obj -+ lib\.hbmk\win\bcc\common_c.obj -+ lib\.hbmk\win\bcc\hbip.objWarning: 'rddsys' not found in library Warning: 'letocl' not found in library Warning: 'leto1' not found in library Warning: 'letomgmn' not found in library Warning: 'blowfish' not found in library Warning: 'common_c' not found in library Warning: 'hbip' not found in library Так должно быть или нет ? Вопрос сразу напрашивается с путями - как писать правильно "\" или "/" : Local cPathServer := "//127.0.0.1:2812/" cPathServer := cPathServer +"DATE_TEST_PATH\test.dbf" Помню что где то обсуждали, а результат не запомнил...
Pasha: Andrey пишет: Она зараза работает даже когда на диске места нет ! Фантастика какая-то. А разве тек бывает ? При современных то гигантских дисках. Да еще на сервере.
Dima: Pasha пишет: Фантастика какая-то. А разве тек бывает ? Паш так он же и пишет про лимит у прова , может там всего 20 метров арендовано ......
Петр: Andrey пишет: Было бы ОЧЕНЬ хорошо при сваливании такой ошибке в log-файле писалось сколько места на диске есть !!! Тогда хоть понимать будем в чём ошибка. Функции же нет в LetoDB - сколько свободного места на диске. Если внимательно разглядывать код server.prg, то можно найти REQUEST .. hb_DiskSpace Из чего следует, что выполнение строки типа leto_udf( "hb_diskSpace", leto_GetAppOptions(1), HB_DISK_FREE ) должно привести к желаемому результату. Как использовать результат и где его использовать вы можете придумать сами. Вариантов море, leto_udf(), leto_LockLock() помогут вам.
SergKis: Петр пишет leto_udf( "hb_diskSpace", leto_GetAppOptions(1), HB_DISK_FREE ) должно привести к желаемому результату В таком виде вряд ли, leto_GetAppOptions - ф-я сервера, попробовать так можно cPth := leto_udf( "leto_GetAppOptions", 1) и потом nFre := leto_udf( "hb_diskSpace", cPth, HB_DISK_FREE )Вариантов море, leto_udf(), leto_LockLock() помогут вам. это да
Петр: SergKis пишет: В таком виде вряд ли, leto_GetAppOptions - ф-я сервера, попробовать так можно cPth := leto_udf( "leto_GetAppOptions", 1) Ну да, увлекся, спасибо
Andrey: Dima пишет: пишет про лимит у прова , может там всего 20 метров арендовано ...... 2 Gb - забили архивами и базы место порядочно забирают... Больше года вообще не трогал сервер, падал несколько раз (5-7). А так работает сервер - как часы. SergKis пишет: cPth := leto_udf( "leto_GetAppOptions", 1) и потом nFre := leto_udf( "hb_diskSpace", cPth, HB_DISK_FREE ) Блин, опять городить огород. Ну есть же для Лето файловые функции, не ужели туда добавить как функцию нельзя ?
PSP: Имхо, не только (или не столько) свободное место на диске нужно контролировать, как обрабатывать ошибки записи/чтения. Они могут быть вызваны не только переполнением диска. Только вот что-то не соображу, как, используя letodb, это сделать. BEGIN/RECOVER/END работает с leto, кто знает?
SergKis: SergKis пишет cPth := leto_udf( "leto_GetAppOptions", 1) так не будет работать (и это правильно !!!) вызывать можно только UDF функцию, т.е. надо написать в letoudf.prg FUNCTION UDF_DiskSpace( nUserStru, cDrive, nProp ) If cDrive = Nil; cDrive := leto_GetAppOptions(1) EndIf If nProp = Nil; nProp := HB_DISK_FREE EndIf RETURN hb_diskSpace( cDrive, nProp )
Петр: SergKis пишет: так не будет работать (и это правильно !!!) Так работать будет !!! и это - не правильно
SergKis: Петр пишет Так работать будет !!! cPth := leto_udf( "leto_GetAppOptions", 1) не работает, проверил, еси бы рабтало, то опасно leto_udf( "fErase", myFile) и не нужны leto_ferase(...) и ключ ini EnableFileFunc = 0
Петр: Не на то обратили внимание. Вы не получили правильного результата, но функция на сервере выполнялась! Вот протестируйте (не забудьте letodb_0.log посмотреть) ? leto_UDFEXIST( "STR" ) ? leto_UDF( "STR" ) ? leto_UDF( "STR", 20, 10, .t. )
SergKis: Проверил на сборке с hwg, получил 1. leto_GetAppOptions: . 2. leto_GetAppOptions: . 3. leto_GetAppOptions: . 4. leto_GetAppOptions: . 5. STR exist : .T. 6. STR : NIL 7. STR, 20, 10, .t. : 1.0000000000 8. STR, 20, 10, 2 : 1.0000000000 letodb_1.log 127.0.0.1 LENOVO Demo.exe 08/02/16 08:33:36: Error BASE/1099 Argument error: STR Arguments: ( [ 1] = Type: N Val: 1, [ 2] = Type: U) Если эти команды должны работать (я думал только из hrb и это мне нравилось), то надо копать у себя клиентов letodb 1. letodb server - borland, hb3.2 из последней MiniGui 2. letodb client - msvc, hb2.0 + MiniGui 2.07 + LV866 ( EN+LV+RU ) 2. letodb client - msvc, hb3.2 + Hwg 2.19.b6 + LV866 ( EN+LV+RU ) Udf функции из letoudf.hrb - работают ok! Петр спасибо за помощь
Pasha: Петр пишет: не работает, проверил, еси бы рабтало, то опасно leto_udf( "fErase", myFile) и не нужны leto_ferase(...) и ключ ini EnableFileFunc = 0 Такие опасные функции вызвать нельзя, поскольку они не прилинкованы к серверу. Вызывать можно функции, указанные в request, ну и некоторые другие. Я пересматривал этот набор - он вполне безопасен. Впрочем, я уже добавил параметр EnableUDF в letodb.ini, для возможности отключения udf. Пока не сбросил это изменение - есть некоторые проблемы с правами доступа git
SergKis: Pasha пишет Впрочем, я уже добавил параметр EnableUDF в letodb.ini, для возможности отключения ud
SergKis: Pasha пишет Такие опасные функции вызвать нельзя, поскольку они не прилинкованы к серверу. Тут не все просто, если реализовывать запрос на сервере типа (через udf) SELECT R_1,R_2,R_3,... AS Kod,Name,Cena,... From TablM01 WHERУ R_1=... ORDER BY upper(Name) то fErase, fRename вполне могут понадобитьсяб, а возможность их вызова с клиента должна быть исключена, т.е. hb_IsFunction("fErase") - не выполнять requect подключение leto_Udf("UDF_fErase") - можно выполнять при наличии в hrb мне как то так видится, при установке флага