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

Ответов - 48, стр: 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, но это сути не меняет.



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