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

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Dima: Andrey пишет: Т.е. как сделать, чтобы новый коннект был другим ? Наверное это просто не большая не доработка Leto и которую Павел сможет исправить.

Andrey: Dima пишет: Наверное это просто не большая не доработка Leto и которую Павел сможет исправить. А в ADS как делается ?

Dima: Andrey пишет: А в ADS как делается ? Там юзается AdsConnect() , затем AdsConnection()для получения хендла , но я не чекал разный ли он , но проверить можно.


Pasha: nConnection - это номер соединения только на одном клиенте, то есть в рамках одного приложения. Чтобы получить номер клиента на сервере, надо сделать вызов: RddInfo( RDDI_CLIENTID,,, [nConnection] )

Andrey: Pasha пишет: то есть в рамках одного приложения. Я запускал сразу несколько разных тестовых программ к 2 серверам, везде nConnection = 1. Только соединение делал простое, только путь и всё. nConnection := LETO_CONNECT( cPathServer )

Andrey: Pasha пишет: Чтобы получить номер клиента на сервере, надо сделать вызов: RddInfo( RDDI_CLIENTID,,, [nConnection] ) А как потом у себя в программе закрыть только нужное соединение, не закрывая другого ? LETO_DISCONNECT(nConnection)

Pasha: Я запускал сразу несколько разных тестовых программ к 2 серверам, везде nConnection = 1. Только соединение делал простое, только путь и всё. nConnection := LETO_CONNECT( cPathServer ) Одна клиентская программа ничего не знает про то, к каким серверам коннектились другие, поэтому в каждой программе nConnection нумеруются с единицы. Точно так же сервер не знает, к каким еще серверам был коннект у его клиентов. Поэтому есть номера соединений на клиенте - это nConnection, и номера клиентов на сервере - это RDDI_CLIENTID А для закрытия соединения - да, надо использовать nConnection Но можно еще и указывать адрес сервера: LETO_DISCONNECT( [ cConnString | nConnection ] ) --> nil

Andrey: Pasha пишет: А для закрытия соединения - да, надо использовать nConnection Но можно еще и указывать адрес сервера: LETO_DISCONNECT( [ cConnString | nConnection ] ) --> nil Если в одной программе адрес и пути одинаковы, то несколько nConnection не получиться ? Как тогда можно организовать в одной программе ОДНОВРЕМЕННО из клиента допустим следующее: 1) показ базы TEST с сервера 2) обработку базы TEST (добавление записей, ну по мелочи что-то)

Pasha: Зачем с одной программы делать несколько коннектов к одному и тому же серверу letodb ? leto_connect() работает следующим образом: При первом вызове соединение устанавливается, и возвращается его номер 1. При повторном вызове с такой же строкой коннекта определяется, что такой коннект уже есть, новый коннект не устанавливается, и возвращается тот же номер коннекта, т.е. 1.

Andrey: Pasha пишет: При повторном вызове с такой же строкой коннекта определяется, что такой коннект уже есть, новый коннект не устанавливается, и возвращается тот же номер коннекта, т.е. 1. Чуток понял - как коннект выполняется... А как тогда решить разрывать коннект или нет ? Использовать Public переменную для определения, есть ли открытая база или нет ?

PSP: Andrey пишет: А как тогда решить разрывать коннект или нет ? А зачем его разрывать?

Andrey: PSP пишет: А зачем его разрывать? Ну не хотелось бы его держать постоянно открытым... Хотя наверно и можно. Не знаю, не делал таких программ, вот и спрашиваю как делать. При запуске коннектиться к базе и держать постоянно открытым соединение ?

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

Andrey: PSP пишет: Постоянно будет открыто только tcp-соединение. А какие ресурсы в программе задействует открытие tcp-соединения ? Что положительного и отрицательного в постоянно открытом tcp-соединение ? Или при входе в программу делать один коннект и не заморачиваться ? А как быть если программа использует доступ к двум разным серверам, один на Linux, а второй на Win2008 ? Не одновременный доступ, второй сервер используется периодически - раз в месяц. Чем дальше в лес, тем больше вопросов...

Softlog86: Протоколу TCP не важно какой сервер ....

PSP: Andrey пишет: А какие ресурсы в программе задействует открытие tcp-соединения ? Никакие. Соединение устанавливает операционная система. Программа просто им пользуется, как и остальными ресурсами компьютера. Что положительного и отрицательного в постоянно открытом tcp-соединение ? Ничего отрицательного в этом нет. К примеру, браузер в процессе работы может открывать сотни(!!!) соединений с разными ресурсами, чтобы отобразить корректно html-страницу. Или при входе в программу делать один коннект и не заморачиваться ? Вот именно. А как быть если программа использует доступ к двум разным серверам, один на Linux, а второй на Win2008 ? Не одновременный доступ, второй сервер используется периодически - раз в месяц. Два разных сервера, - два соединения.

Andrey: PSP СПАСИБО !

Andrey: Вопрос по событиям в LetoDB. Есть ли возможность подписаться на событие добавления/редактирования/удаления записи в LetoDb ?

Pasha: Можно установить глобальный триггер: letodb.ini есть параметры: Trigger = <cFuncName> - Глобальная функция letodb RDDI_TRIGGER PendingTrigger = <cFuncName>- Глобальная функция letodb RDDI_PENDINGTRIGGER EnableSetTrigger = 0 - если 1, разрешает изменять установки триггера с помощью dbInfo( DBI_TRIGGER, ... ) Можно с клиента сделать вызов для рабочей области: dbInfo(DBI_TRIGGER, ...) и передали серверу имя функции - триггера. Саму функцию надо реализовать в модуле letiudf.prg Как работает триггер см.описание Sx_SetTrigger Особенность letodb в том, что триггер выполняется на сервере.

Andrey: Pasha пишет: Как работает триггер см.описание Sx_SetTrigger А где его взять ?



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