On-line: PSP, tnsr2, гостей 2. Всего: 4 [подробнее..]
АвторСообщение
alkresin
moderator


Пост N: 31
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.01.08 11:36. Заголовок: Leto DB Server(продолжение)


Только что открыл на 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 на Харборе, ... и вообще все в наших руках :).

Кто хочет участвовать в разработке, тестировании - пишите.



Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


Pasha
Администратор




Пост N: 1610
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.07.10 09:17. Заголовок: Если файлы на сервер..


Если файлы на сервере открываются монопольно, то по reccount ничего не делается, он уже известен. Можно эту проверку оставить только для этого режима, а для shared еене делать. Я добавил проверку, чтобы не выделять лишнюю память без необходимости

PS Я сейчас сюда редко заглядываю. Дней через 10 вернусь в рабочий режим

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1611
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.07.10 14:30. Заголовок: Можно ли запустить l..


Можно ли запустить letodb в windows nt/xp до авторизации пользователя ?
Я пробовал в реестре добавлять параметр в раздел:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]

и в раздел

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows]

Параметр:
"load"="c:\letodb\letodb.exe" - программы запускаемые до входа пользователя в систему:

Но сервер не загружается


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1612
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.07.10 10:56. Заголовок: Помогите разобраться..


Помогите разобраться с такой странной ошибкой индексации. xHarbour
Открываю файл street.dbf из КЛАДР. Сам кладр можно взять по адресу:
http://www.kladr.org/update-kladr-database-2.html<\/u><\/a>
Таблица большая, 834457 записей, размер 74MB

Кодовая страница программы - RU866

Открываю и индексирую таблицу в режиме readonly:

Field Code, Name
dbUseArea(.t.,, '\kladr\street',,, .t., 'RU1251')
OrdCreate('\kladr\street', 'code', 'CODE', {|| CODE})
OrdCreate('\kladr\street', 'namec', 'SUBSTR(CODE,1,11)+UPPER(NAME)', {|| SUBSTR(CODE,1,11)+UPPER(NAME)})
OrdCreate('\kladr\street', 'nasel', 'SUBSTR(CODE,1,11)', {|| SUBSTR(CODE,1,11)})
OrdCreate('\kladr\street', 'nameg', 'SUBSTR(CODE,1,8)+UPPER(NAME)', {|| SUBSTR(CODE,1,8)+UPPER(NAME)})
OrdCreate('\kladr\street', 'namemp', 'SUBSTR(CODE,1,5)+UPPER(NAME)', {|| SUBSTR(CODE,1,5)+UPPER(NAME)})

клиент сваливается на OrdCreate, причем в разных местах, с ошибкой 9027
Premature Array/Object Release detected, и строка - индексное выражение

Почему сваливается именно клиент, непонятно. Сваливается скорее всего на строке 3459 в leto1.c:
hb_vmDestroyBlockOrMacro( pKeyExp );

Если убрать кодовую страницу RU1251, то индексация проходит успешно.


Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 397
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 29.07.10 14:13. Заголовок: Сваливается скорее в..



 цитата:
Сваливается скорее всего на строке 3459 в leto1.c:
hb_vmDestroyBlockOrMacro( pKeyExp );


Так скорее всего или точно здесь ?
Если здесь, то вопрос в том, почему получается ошибка при выполнении кодоблока. А не может это быть связано с тем, что эта злосчастная RU1251 по-разному называется в Harbour и xHarbour. Если страница с этим именем не прилинкована к клиентскому приложению, то выполнение Upper может вызвать ошибку.

И еще: а почему там стоит hb_vmDestroyBlockOrMacro( pKeyExp ) ? При нормальном прохождении SELF_EVALBLOCK() этот pKeyExp освобождается при помощи hb_itemRelease() ...

Спасибо: 0 
Профиль
PSP
постоянный участник


Пост N: 420
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.07.10 14:22. Заголовок: Pasha пишет: Можно ..


Pasha пишет:

 цитата:
Можно ли запустить letodb в windows nt/xp до авторизации пользователя ?
Я пробовал в реестре добавлять параметр в раздел:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]



А если в [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1613
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.07.10 16:04. Заголовок: PSP пишет: А если в..


PSP пишет:

 цитата:
А если в [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] ?



Так эти программы выполняются при входе пользователя, а мне хотелось бы запускать letodb до авторизации пользователя
Чтобы просто нажали кнопку включения сервера, и работали

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1614
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.07.10 16:13. Заголовок: alkresin пишет: Так..


alkresin пишет:

 цитата:
Так скорее всего или точно здесь ?
Если здесь, то вопрос в том, почему получается ошибка при выполнении кодоблока. А не может это быть связано с тем, что эта злосчастная RU1251 по-разному называется в Harbour и xHarbour. Если страница с этим именем не прилинкована к клиентскому приложению, то выполнение Upper может вызвать ошибку.



Нет. Я определил место, клиент вываливается при выполнении

errCode = SELF_EVALBLOCK( ( AREAP ) pArea, pKeyExp );

С именем кодовой страницы это не связано, я собрал сервер для себя корректно. Да и клиент падает еще до выполнения запроса к серверу. В моем случае - при создании 2-го индекса, т.е. на

OrdCreate('\kladr\street', 'namec', 'SUBSTR(CODE,1,11)+UPPER(NAME)', {|| SUBSTR(CODE,1,11)+UPPER(NAME)})

Но в некоторых случаях создавалось 4 индекса, и на 5-м - возникала ошибка

Причем я успешно открывал таблицу kladr.dbf, создавал индекс с 32-мя тэгами и условиями for. А при индексации street возникает эта непонятная ошибка
Неясно, связано ли это с размерами таблица. Сервер ведь создает индекс, ошибка не на сервере

Вот как я открываю kladr:

Local aKl := {'kladr',, 0,;
{'code', 'SUBSTR(CODE,1,13)'},;
{'index', 'INDEX'},;
{'coder', 'UPPER(NAME)',,, 'substr(code,3,9)="000000000"'},;
{'coderr', 'SUBSTR(CODE,1,2)+UPPER(NAME)',,, 'substr(code,6,6)="000000".and.substr(code,3,3)>"000"'},;
{'codera', 'UPPER(NAME)',,, 'substr(code,6,6)="000000".and.substr(code,3,3)>"000"'},;
{'codego', 'SUBSTR(CODE,1,2)+UPPER(NAME)',,, 'substr(code,6,3)>"000".and.substr(code,9,3)="000"'},;
{'codegra', 'SUBSTR(CODE,1,5)+UPPER(NAME)',,, 'substr(code,6,3)>"000".and.substr(code,9,3)="000"'},;
{'codega', 'UPPER(NAME)',,, 'substr(code,6,3)>"000".and.substr(code,9,3)="000"'},;
{'codena', 'UPPER(NAME)',,, 'substr(code,9,3)>"000"'},;
{'codenr', 'SUBSTR(CODE,1,2)+UPPER(NAME)',,, 'substr(code,9,3)>"000"'},;
{'codenra', 'SUBSTR(CODE,1,5)+UPPER(NAME)',,, 'substr(code,9,3)>"000"'},;
{'codeng', 'SUBSTR(CODE,1,8)+UPPER(NAME)',,, 'substr(code,9,3)>"000"'},;
{'nasel1', 'UPPER(NAME)',,, 'substr(code,3,9)="001000001"'},;
{'nasel2', 'UPPER(NAME)',,, 'substr(code,3,9)="000000001"'},;
{'city1', 'UPPER(NAME)',,, 'substr(code,6,3)>"000".and.substr(code,9,3)=="000"'},;
{'city2', 'UPPER(NAME)',,, 'substr(code,3,6)="001001"'},;
{'city3', 'UPPER(NAME)',,, 'substr(code,3,6)="000000"'},;
{'city3_2', 'ALLTRIM(UPPER(NAME))+SUBSTR(CODE,1,2)',,, 'substr(code,6,6)="000001"'},;
{'regdig', 'SUBSTR(CODE,1,2)',,, 'substr(code,3,9)="000000000"'},;
{'name_2', 'ALLTRIM(UPPER(NAME))+SUBSTR(CODE,1,2)'},;
{'nasel1_2', 'ALLTRIM(UPPER(NAME))+SUBSTR(CODE,1,2)',,, 'substr(code,3,9)="001000001"'},;
{'nasel2_2', 'ALLTRIM(UPPER(NAME))+SUBSTR(CODE,1,2)',,, 'substr(code,3,9)="000000001"'},;
{'codera_2', 'ALLTRIM(UPPER(NAME))+SUBSTR(CODE,1,2)',,, 'substr(code,6,6)="000000".and.substr(code,3,3)>"000"'},;
{'city_5', 'ALLTRIM(UPPER(NAME))+SUBSTR(CODE,1,5)',,, 'substr(code,9,3)="000"'},;
{'ocato', 'ocatd'},;
{'gni', 'gninmb'},;
{'scode', 'SUBSTR(CODE,1,2)'},;
{'tcode', 'SUBSTR(CODE,1,5)'},;
{'ncode', 'SUBSTR(CODE,1,8)'},;
{'namesocr', 'UPPER(ALLTRIM(name))+" "+UPPER(ALLTRIM(socr))',,, 'substr(code,3,9)="000000000"'},;
{'name_s', 'UPPER(ALLTRIM(NAME))+" "+UPPER(ALLTRIM(socr))'},;
{'code_all', 'CODE'} }

BatOpen({aKl}, ,,,, 'RU1251')

В прдмассиве для моей функции открытия индекс описывается параметрами: имя тэга, индексное выражение, условие for (5-й элемент)

Спасибо: 0 
Профиль
PSP
постоянный участник


Пост N: 421
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.07.10 16:15. Заголовок: Pasha пишет: а мне ..


Pasha пишет:

 цитата:
а мне хотелось бы запускать letodb до авторизации пользователя


А "Назначенные задания" не пробовал?

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 398
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.07.10 08:57. Заголовок: С именем кодовой стр..



 цитата:
С именем кодовой страницы это не связано, я собрал сервер для себя корректно. Да и клиент падает еще до выполнения запроса к серверу. В моем случае - при создании 2-го индекса


В первом индексе у вас ф-и Upper() нет, она появляется как раз во втором. Я так понял, что клиент собран на xHarbour - но в xHarbour сейчас эта кодовая страница называется "RUWIN" ...

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1615
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.07.10 10:10. Заголовок: Дело не в upper и не..


Дело не в upper и не в xHarbour. Я собираю старым xHarbour, в котором еще есть RU1251. И letodb, и клиентская программа собрана именно с RU1251
К тому же для файла kladr.dbf успешно создается 32 индекса, в которых неоднократно встречается upper. Так что причина ошибки не ясна.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 401
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.07.10 10:42. Заголовок: Хм.. Странно. Вряд л..


Хм.. Странно. Вряд ли это связано с размерами, т.к. клиентской части размеры безразличны, она же непосредственно с файлами дела не имеет. А вы не пробовали все-таки уменьшить этот kladr для эксперимента, ну и программу урезать ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1616
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.07.10 11:51. Заголовок: Сейчас убрал из инде..


Сейчас убрал из индексного выражения Upper, индексирую по SUBSTR(CODE,1,11)+NAME, и ошибка возникает все равно:
Premature String Release detected: '01000001000000100'
Called from Substr

'01000001000000100' - это значение Code, если сделать go top по первому индексу.
Может быть, проблема в использовании hb_stackReturnItem() ? Его использует и Substr в индексном выражении, и SELF_EVALBLOCK

Уменьшать не пробовал, это мысль, найду урезанный кладр для 2-х регионов и попробую. Индексацию я вставил в небольшую программу, так что вряд ли дело в программе.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1617
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.07.10 12:02. Заголовок: Проблема оказалась н..


Проблема оказалась не в индексации, а в трансляции кодовой страницы
Даже если индексация проходит успешно, при обращении к символьному полю возникает ошибка 9009 hb_xrealloc
Т.е. в letoGetValue перекодировка выполняется неправильно

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1618
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.07.10 12:21. Заголовок: Да, вопрос решен, во..


Да, вопрос решен, вот фикс для leto1.c, со строки 1669:


#if defined (__XHARBOUR__) || !defined(__HARBOUR__) || ( (__HARBOUR__ - 0) < 0x020000 )
char * pVal = ( char * ) hb_xgrab( pField->uiLen + 1 );
memcpy( pVal, pArea->pRecord + pArea->pFieldOffset[uiIndex], pField->uiLen );
pVal[ pField->uiLen ] = '\0';
hb_cdpnTranslate( pVal, pArea->area.cdPage, hb_cdp_page, pField->uiLen );
hb_itemPutCL( pItem, pVal, pField->uiLen );
hb_xfree( pVal );
#else
char * pVal;
HB_SIZE uiKeyLen = pField->uiLen;
pVal = hb_cdpnDup( ( const char * ) pArea->pRecord + pArea->pFieldOffset[uiIndex], &uiKeyLen, pArea->area.cdPage, hb_cdp_page );
hb_itemPutCLPtr( pItem, pVal, pField->uiLen );
#endif

забросьте пожалуйста на CVS, у меня сейчас нет такой возможности

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 402
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.07.10 12:28. Заголовок: Т.е. если удалить в ..


Т.е. если удалить в kladr все записи кроме одной и написать программу:

function main
REQUEST LETO
RDDSETDEFAULT( "LETO" )
use ( "//127.0.0.1:2812/kladr" ) new codepage "RU1251"
? field->SOME_FIELD
return Nil

то она вылетает ?


Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 403
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.07.10 12:35. Заголовок: забросьте пожалуйста..



 цитата:
забросьте пожалуйста на CVS, у меня сейчас нет такой возможности


Забросил.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 1491
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.07.10 14:17. Заголовок: Pasha пишет: Так эт..


Pasha пишет:

 цитата:
Так эти программы выполняются при входе пользователя, а мне хотелось бы запускать letodb до авторизации пользователя
Чтобы просто нажали кнопку включения сервера, и работали



Мне тоже бы хотелось этого !
Какие еще могут быть варианты с запуском сервиса LetoDB ?

Спасибо: 0 
Профиль
sashaBG
постоянный участник




Пост N: 69
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 30.07.10 14:55. Заголовок: Пример для XP



Windows XP Pro..

"Start" "Run" пишем < gpedit.msc >

Выбираем "Computer Configuration" "Windows Settings"
Двойной click на "Scripts(Startup/Shutdown)"
Двойной click на "Startup" справо.
потом кликаем на "Add" и добавляем скрипт или программу.
Закрываем Group Policy editor..



Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 1492
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.07.10 15:01. Заголовок: sashaBG пишет: Wind..


sashaBG пишет:

 цитата:
Windows XP Pro..


А под 2000 и 2003 ЭТО работать будет ?

Спасибо: 0 
Профиль
sashaBG
постоянный участник




Пост N: 70
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 30.07.10 15:09. Заголовок: Под Windows 7 не работает


Под Windows 7 не работает


надо пробовать , у меня есть 2003 на другой машине , вечером попробую .

Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 195
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет