Форум » LetoDB, HbNetio. » Вопросы новичка... (продолжение) » Ответить

Вопросы новичка... (продолжение)

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" Помню что где то обсуждали, а результат не запомнил...

Ответов - 54, стр: 1 2 3 All

Andrey: Тогда код делать такой ? [pre2]IF Leto_Ping() IF !LETO_FILE(cFile) MsgStop( "Нет файла КЛЮЧА на сервере!" ) RETURN .F. ELSE // передача записей на сервер MyWriteRecnoLetoDb() ENDIF ELSE MsgStop("Ошибка соединения с сервером LetoDB !") ENDIF [/pre2] А где коды ошибок для LETO_FERROR() ?

alkresin: Andrey пишет: Тогда код делать такой ? Пойдет. А где коды ошибок для LETO_FERROR() ? В тексте исходников :). 1000 - как раз сбой соединения.

Andrey: alkresin пишет: В тексте исходников :). Спасибо ! Можно ли сделать следующие: при изменении базы на сервере - получать событие клиентам, что база изменилась ? Желательно бы и номер изменённой записи получать.


PSP: Andrey пишет: Можно ли сделать следующие: при изменении базы на сервере - получать событие клиентам, что база изменилась ? Клиент-серверная архитектура подразумевает следующий подход: клиент запросил - сервер ответил и забыл про клиента. Сам сервер не должен никому ничего слать без запроса. Т.е., для того, чтобы клиент знал про изменение баз, он должен сам об этом побеспокоиться.

alkresin: Andrey пишет: при изменении базы на сервере - получать событие клиентам, что база изменилась ? Желательно бы и номер изменённой записи получать. Правильно тут написали: общение с сервером всегда происходит по схеме запрос - ответ, причем запрос может послать только клиент. Можно записывать информацию об изменениях в базе, например, в переменную LetoDB (leto_Var...() функции), это может делать как клиент, изменивший базу, так, наверное, и сервер в соответствующем триггере. Но чтобы другой клиент об этом узнал, ему надо время от времени, по таймеру например, читать эту переменную с сервера.

Andrey: alkresin пишет: Но чтобы другой клиент об этом узнал, ему надо время от времени, по таймеру например, читать эту переменную с сервера. Тогда наверное алгоритм SergKis - построение индекса на сервере по полю TimeStamp (в базе) даёт более простой результат синхронизации БД на сервере и клиенте. Я алгоритм уже попробовал. Хотелось бы понять и другие. alkresin пишет: Можно записывать информацию об изменениях в базе, например, в переменную LetoDB (leto_Var...() функции), это может делать как клиент, изменивший базу, так, наверное, и сервер в соответствующем триггере. Не представляю как это сделать. Покажите пожалуйста схему как это делать.

alkresin: Andrey пишет: Покажите пожалуйста схему как это делать. Схема самая простая. Есть Leto-переменные, каждая имеет свое имя, они собраны по группам, каждая группа тоже имеет свое имя. Предположим, вы решили сделать по группе для каждой базы - base1, base2, base3, ... и в каждой группе переменную modtime (modification time), куда будете записывать дату и время последнего изменения в том формате, который вам нравится. Программа при записи данных в базу пишет одновременно и в соответствующую переменную: [pre]leto_varSet( "base1", "modtime", xTime, LETO_VCREAT )[/pre] здесь xTime - текущие дата/время, LETO_VCREAT означает, что если переменная еще не существует, ее надо создать. Вот и все. А по таймеру читайте ее: [pre]IF !Empty( xTime := leto_varGet( "base1","modtime" ) ) ... ENDIF[/pre] и предпринимайте соответствующие действия.

ZAlex: Что-то подобное я делал(было дело!!): ... Здесь код изменения записи пользователем и сохранение в базе а далее отработка .... Leto_varDel("KRS",""),; leto_varSet( "KRS","var_cDate",DToC(Date()),LETO_VCREAT ),; // дата текущая создаем если нет переменную leto_varSet( "KRS","var_cTime",Time(),LETO_VCREAT ),; // время текущее создаем если нет переменную leto_varSet( "KRS","var_cCBU",cCBU,LETO_VCREAT ),; // CBU пользователя создаем если нет переменную IIF(lSchedul,(MsgTray("Изменение купли-продажи!", "Обновление!") , SysWait(3) , MsgTray(""), Popup_Var()),nil) // всплывающее сообщение пользователю ..... Функция Popup_Var() вызывается в таймере //---------------------------работаем с переменными сервера----------- //-----------------проверка для отправки сообщения пользователям Function Popup_Var() If !Empty(Secs( leto_varGet( "KRS","var_cTime" ))) IF (Secs(Time()) - Secs( leto_varGet( "KRS","var_cTime" ) )) > 2 MsgTray("Данные обновлены!" , "КЦ - " + leto_varGet( "KRS","var_cCBU" )) ; SysWait(5) ; MsgTray("") leto_varDel( "KRS","" ) // удаляет всю группу с переменными EndIf Else leto_varDel( "KRS","" ) // удаляет всю группу с переменными EndIf Return nil ... Функция MsgTray - выдает сообщение нужным пользователям об изменениях. Вот такой алгоритм. Правда все на FiveWin, но это сути не меняет.

VI: Первая установка letodb. Команда File не работает (файл есть, пишет .F.). Команда leto_file - тоже, т.к., по-моему, не читает letodb.ini (там разрешил файловые функции). Там путь прописан:DataPath ="/MYwrk/", а в log пишет DataPath =. Где копать?

SergKis: VI Вот рабочий вариант установки Leto2011.exe (2-х поточная) и LetoDbF.exe (в ней изменены имена ini и log файлов на LetoDbF.*), совместная работа (это local работа - отладка, у клиента так же, но с адресами своими)[pre2] Volume in drive D is DATA Volume Serial Number is E86E-69F5 Directory of D:\BK19\MiniGui\1_PRJ\EAlarm_1.3\INF 12.02.2024 13:53 <DIR> . 12.02.2024 13:53 <DIR> .. 20.12.2021 21:49 <DIR> BAK 19.12.2021 14:06 <DIR> BAKS 28.06.2022 11:36 <DIR> BIN 06.04.2022 16:29 <DIR> FDB 20.12.2021 22:05 <DIR> HBK 22.12.2021 15:56 <DIR> KLI 21.12.2021 18:44 902 656 leto2011.exe 06.04.2022 15:06 71 letodb.ini 21.04.2023 16:27 526 letodb.log 09.04.2021 06:25 1 450 496 letodbf.exe 21.12.2021 17:56 360 letodbf.ini 19.04.2023 20:38 1 335 letodbf.log 22.12.2021 15:49 899 072 LetoStart.exe 22.12.2021 15:51 898 048 LetoStart1.exe 19.04.2023 15:30 224 leto_users 19.04.2023 15:30 266 leto_users.cfg 19.12.2021 14:06 <DIR> LICENSE 18.04.2023 14:22 <DIR> WRK 15.02.2023 01:37 <DIR> XML 12.02.2024 13:53 0 _0.txt 05.04.2023 14:32 2 990 592 _ealarm.exe 19.12.2021 15:14 733 _ealarm.ini 16.09.2022 17:31 390 _test_ps1.bat 14 File(s) 7 144 769 bytes 11 Dir(s) 16 562 417 664 bytes free LetoDb.ini для Leto2011.exe [MAIN] Share_Tables = 1 Port = 2812 DataPath = . PathRun = . LetoDbF.ini для LetoDbF.exe [MAIN] Port = 2816 DataPath = .\ Default_Driver = CDX Share_Tables = 1 No_Save_WA = 1 Lower_Path = 0 EnableFileFunc = 1 EnableAnyExt = 1 Allow_UDF = 1 Pass_for_Login = 1 Cache_Records = 21 Debug = 0 Optimize = 1 DataBase = / Backup = /tmp/backup Mask = *.dbf,*.dbt,*.ntx Lock = 1 Seconds = 30 Wait = 1 ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/* рабочее место клиента Volume in drive D is DATA Volume Serial Number is E86E-69F5 Directory of D:\BK19\MiniGui\1_PRJ\EAlarm_1.3\INF\KLI 12.02.2024 14:15 <DIR> . 12.02.2024 14:15 <DIR> .. 22.12.2021 15:59 <DIR> WRK 22.12.2021 15:56 <DIR> XML 21.12.2021 17:59 2 982 400 _ealarm.exe 22.12.2021 15:55 116 _ealarm.ini 3 File(s) 2 982 516 bytes 4 Dir(s) 16 562 417 664 bytes free ini рабочего места клиента [COM] PathXml = .\XML ; directory for excel reporting Host = 127.0.0.1 ; Port = 2816 ; [/pre2] Всегда работаю от текущего каталога, т.е. везде в путях стоят точки или .\ LetoDbF всегда добавляет DataPath к исп. именам файлов на клиенте эту добавку, попробуйте задать (внутри имя приводятся к одному разделителю, как надо). DataPath = C:\Mywrk от такого задания отказался из за копирования, так от текущего все забрал, вместе с настройками и ...

VI: Как вижу, основная проблема в том, что функции Leto_file (и другие файловые) у меня не работают, хотя в .ini разрешены. И вообще, ни одна установка, отличная от заданного значения по умолчанию, не меняется (например, CDX/NTX). Letodb.ini лежит там же, где и запускаемый letodb.exe. Впрочем, и функция File() не работает тоже (а должна ли?), причем перебраны все возможные сочетания путей.

SergKis: VI Может дело в сборке сервера, у меня никогда не было такой штуки. Посмотрите в MiniGui пример SAMPLES\Advanced\LetoDbf, там был рабочий вариант сервера

Andrey: VI пишет: Впрочем, и функция File() не работает тоже (а должна ли?), причем перебраны все возможные сочетания путей. Всё работает. Активно им пользовался раньше, и сейчас до сих пор работает.

VI:



полная версия страницы