Форум » LetoDB, HbNetio. » Leto DB Server (продолжение) » Ответить
Leto DB Server (продолжение)
alkresin: Только что открыл на Sourceforge новый проект - Leto DB Server - https://sourceforge.net/projects/letodb Это мультиплатформенный ( Windows, Unix/Linux ) сервер баз данных, предоставляющий клиентским программам доступ к dbf/cdx файлам, находящимся на удаленном сервере ( можно и на локальном компьютере запускать - в отладочных целях ). В общем, как ADS :). Проект - на стадии разработки, не все даже базовые функции еще реализованы, до оптимизации дело еще не дошло. Но работает :). Крутится у меня на сервере несколько дней, подключал до 15 клиентов, пока не падает. Мои программы работают с ним нормально. Преимущества по сравнению с обычным файл-сервером: 1) Безопасность - базы могут быть в каталоге, недоступном для клиентских компьютеров - никто их случайно не удалит и не повредит. 2) Поскольку базы открываются серверной программой, а не клиентской, ее целостности ничего не грозит при случайном отключении клиентского компьютера. 3) значительное уменьшение сетевого траффика. 4) Должен быть, по идее, выигрыш в скорости. 5) Возможность контроля за пользователями с помощью утилиты manage ( можно придумать и другие формы контроля ). 6) Можно будет сделать транзакции, stored procedures на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.
alkresin: Сейчас получается, что юзер с правами NNN в HBROWSE заходит в режим редакирования (может случайно или нет по enter или двойному клику) и этим блоктрует запись, Стоп. Заходя в режим редактирования в HBROWSE, пользователь не блокирует запись. Блокировка осуществляется только в момент записи в БД.
AlexMyr: Я извиняюсь, не проверял так щательно работу блокировок. Тогда хотелось бы для юзера с правами NNN как-то убрать возможность вообще зайти в режим редактирования. Это сейчас наверное невозможно сделать
Pasha: alkresin пишет: Ну есть же всякие process explorer'ы ... Или у администратора физически нет доступа к сереверу ? Тот же task manager возвращает другую информацию. А мне надо было глянуть, что на сервере происходит с памятью на уровне харбора. Да и операция это самая что ни есть безобидная: если работет fmstat, то hb_xquery возвращает static-переменную, ничего не расчитывая при этом
Pasha: alkresin пишет: Наткнулся на одну ошибку - seek по отфильтрованной базе неправильно работает, если фильтр выполняется на стороне клиента ( это когда в нем присутствуют переменные, user defined функции, алиасы ). Надо будет исправить, не знаю только когда - со временем туго. Так такой фильтр на сервере не будет установлен. А в чем прояляется эта ошибка ?
alkresin: Так такой фильтр на сервере не будет установлен. А в чем прояляется эта ошибка ? Ошибка в том, что seek возвращает запись без учета фильтра. Т.е. там надо написать дополнительный код в leto_Seek() leto1.c, который в том случае, если таблица фильтруется на стороне клиента, проверял бы соответствие найденной записи фильтру и при необходимости делал бы skip до достижения нужной записи.
Pasha: alkresin пишет: Т.е. там надо написать дополнительный код в leto_Seek() leto1.c т.е. в LetoSeek после ParseRec надо добавить: SELF_SKIPFILTER( ( AREAP ) pArea, ( bFindLast ? -1 : 1 ) ); вечером добавлю
alkresin: т.е. в LetoSeek после ParseRec надо добавить: SELF_SKIPFILTER( ( AREAP ) pArea, ( bFindLast ? -1 : 1 ) ); Этого недостаточно. Надо еще соответствие индексному ключу проверять - при softseek off если в найденной по skipfilter записи ключ не тот, надо идти на eof
Pasha: Действительно. Еще надо scope на клиенте проверять. Эту проверку лучше вставить прямо в letoSkipFilter, чтобы сработало и при go top, и при go bottom
Pasha: Нет, не надо, scope сервер проверит
Pasha: Поправил seek, проверьте пожалуйста
AlexMyr: Как узнать права юзера под которым зашел на сервер (ф-я leto_MgGetUsers() возвращает IP)? Идея такая: захожу юзером, проверяю права, допустим на запись, и потом в HBROWSE lEditable устанавливаю в .T. или .F.
alkresin: Как узнать права юзера под которым зашел на сервер (ф-я leto_MgGetUsers() возвращает IP)? В данный момент - никак. Надо будет добавить функцию.
alkresin: Поправил seek, проверьте пожалуйста У меня ошибка линковки - undefined hb_itemGetTD
AlexMyr: alkresin пишет: В данный момент - никак. Надо будет добавить функцию. Будем ждать
AlexMyr: alkresin пишет: У меня ошибка линковки - undefined hb_itemGetTD У меня собралось без ошибок.
alkresin: У меня Harbour старый - 1.0
Pasha: Вместо hb_itemGetTD( pValue ) поставьте hb_itemGetDL( pValue ) Все равно в индексном выражении время не встречается
alkresin: Проверил seek на фильтрованном наборе - теперь, вроде, все нормально. Спасибо.
alkresin: Коллеги, обязательно отмечайте в Changelog'е, что изменяется протокол передачи данных и надо перекомпилировать сервер, чтобы он нормально работал с вновь перекомпилированными клиентами. Я сегодня почти час искал почему не работает dbcreate() - оказалось, что введен новый параметр pCreateInfo->atomAlias ( а нужен ли он ?? ) посреди ( а почему не в конце - тогда бы не было проблемы ) команды creat; Пока мне пришлось его убрать у себя, чтобы перекомпилировать проблемный программный модуль, т.к. я не могу так просто остановить сервер, с которым работает куча людей...
Pasha: Хорошо А параметр этот нужен, поскольку dbCreate может вызываться в режиме KeepOpen
полная версия страницы