Форум » LetoDB, HbNetio. » Leto DB Server (продолжение 9) » Ответить

Leto DB Server (продолжение 9)

Dima: Продолжаем тут

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

alkresin: Andrey пишет: Не смотря на праздники - работа идет ! Погода не очень - выходить из дома неохота. Слоняясь по квартире, иногда и к компьютеру подходишь... :) С созданием dll вопрос решился просто - hbmk, все-таки, иногда бывает полезен.

alkresin: По поводу добавления bAutOpen: лучше, наверное, сделать так же, как и с остальными установками (SetDeleted, SetCentury, etc.) - добавить в letocl.c static unsigned int s_uiAutOpen, соответствующую функцию LetoSetAutOpen(), добавить вызов этой функции в leto1.c в leto_SetOptions() и вызывать leto_SetOptions() из LetoOpen()

Pasha: Переделаю


alkresin: Добавил англоязычный форум по letodb: https://sourceforge.net/apps/phpbb/letodb/index.php, надо будет и на сайте ( letodb.sourceforge.net ) что-нибудь вразумительное написать, а то новым пользователям непонятно даже, какую ветку использовать, как код брать.

Pasha: Можно было бы дать ссылку на этот форум в Harbour Users

alkresin: Дал. Хочу еще написать php client. Попробовал уже простейшие вещи - присоединиться, получить management информацию - работает.

Andrey: alkresin пишет: Хочу еще написать php client Поддерживаем ! И что будет в результате: доступ через Харбор и доступ к базе на сайте через php client ?

kia: Александр, Паша в процессе тестирования LetoDb (v 1.350.2.172 2014/01/15 10:57:57) сервер - linux, клиент - win7, обнаружил несколько ошибок. Первые две ошибки, при попытке открыть не существующий в данный момент dbf-файл, вызывают падение программы с "Exception error". В зависимости от наличия алиаса в вызове функции DbUseArea происходят разные ошибки. Контрольный пример прилагается. Надо раскоментировать строку с нужной ошибкой /* test_error.prg letoDbSrc - $Id: Changelog,v 1.350.2.172 2014/01/15 10:57:57 alkresin Exp $ Harbour Build Info --------------------------- Version: Harbour 3.2.0dev (r1401142236) Compiler: MinGW GNU C 4.8 (32-bit) Platform: Windows 7 6.1.7600 PCode version: 0.3 ChangeLog last entry: 2014-01-14 23:36 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) ChangeLog ID: 89da1a2b87be5b1553225eba6b378c318c4a09ce Built on: Jan 17 2014 14:28:19 Build options: (Clipper 5.3b) (Clipper 5.x undoc) --------------------------- letoDb server - linux client - win7 */ REQUEST HB_CODEPAGE_RU866 REQUEST HB_LANG_RU866 REQUEST LETO function Main( ... ) Hb_CDPSelect( "RU866" ) Hb_LangSelect( "RU866" ) HB_GtInfo( /*HB_GTI_CODEPAGE*/ 25, 255 ) // #define OEM_CHARSET 255 - from wingdi.h RDDSETDEFAULT( "LETO" ) setcolor('14/1') cls ? 'begin test LetoDb' ? leto_Connect( "//192.168.1.1:2812/" ) //existing path on LetoDb server //error № 1 DbUseArea(.t.,,'dummy','DUMMY') //function commonError leto1c.c //line 181 - hb_errPutFileName( pError, szFileName ); //szFileName - не инициализированный указатель //вызывается из letoOpen line 2272 указатель ptr - не используется //до самого вызова commonError если указан алиас в DbUseArea //error № 2 //DbUseArea(.t.,,'dummy') //function letoClose leto1c.c //line 1816 - if( pTable->pTagInfo ) //pTable==null в это время, в строке 1809 есть проверка указателя //line 1809 - if( pTable && pTable->uiUpdated ) ? Alias() inkey(0) DbCloseAll() quit return NIL //end Main() ps Большое спасибо за вашу работу.

alkresin: kia пишет: в процессе тестирования LetoDb (v 1.350.2.172 2014/01/15 10:57:57) сервер - linux, клиент - win7, обнаружил несколько ошибок. Спасибо за информацию. Поправлю.

alkresin: Andrey пишет: И что будет в результате: доступ через Харбор и доступ к базе на сайте через php client ? Да. Собственно, кое-что уже работает, пример - на CVS.

kia: alkresin пишет: Спасибо за информацию. Поправлю. Вот еще одно странное поведение сервера, похоже связанное с наследованием глобальных установок в тредах. В настойках letodb.ini LOWER_PATH = 1 но эта настройка не работает как надо. тестовый пример (исходные данные как в предыдущем посте) function Main( ... ) ... ? leto_Connect( "//192.168.1.1:2812/" ) //existing path on LetoDb server DbCreate('tmptest',{{'test','C',10,0}}) DbUseArea(.t.,,'tmptest') ? Alias() DbCloseArea() inkey(0) DbUseArea(.t.,,'tmpTest') //здесь возникает ошибка! Error DBFCDX/1001 Open error: tmpTest.dbf //код дос ошибки - 2 (File not found) ? Alias() DbCloseArea() inkey(0) return NIL //end Main() Если в файл server.prg после кода line 909 IF ::lLower SET( _SET_FILECASE, 1 ) SET( _SET_DIRCASE, 1 ) ENDIF добавить wrlog(str(set(_SET_FILECASE))) то в логе увидим результат 1, т.е. в этом месте установка сработала но та же стока wrlog(str(set(_SET_FILECASE))) в функции hs_opentable line 368 покажет что _SET_FILECASE установлен в 0 (уже правда в логе letodb_0.log а не в letodb.log) если в функции hs_opentable добавить не только получение но и установку _SET_FILECASE wrlog(str(set(_SET_FILECASE,1))) то эта фича "LOWER_PATH" начинает работать правильно. Спасибо за вашу работу.

alkresin: kia пишет: Вот еще одно странное поведение сервера, похоже связанное с наследованием глобальных установок в тредах. Похоже, что при создании нового потока на С уровне с помощью hb_threadCreate() ( а именно так это делается в letodb ) текущее состояние не наследуется. Посмотрю, что можно сделать. Кстати, ошибки с открытием несуществующей таблицы сегодня исправил.

alkresin: Павел, мне непонятно предназначение опции TIMEOUT в letodb.ini. Похоже, что если клиент не будет непрерывно посылать запросы серверу, соединение разорвется ?

kia: alkresin пишет: Кстати, ошибки с открытием несуществующей таблицы сегодня исправил. Спасибо большое, завтра с утра проверю. Нашел еще описку в функции leto_BagCheck файл common_c.c ... line 171 p1 = ptr = szTable; p2 = p4 = NULL; while( ( c = *ptr) != 0 ) { if( c == '/' || c == '\\' ) p2 = ptr; <---должно быть p1 = ptr+1; //ptr+1 т.к. ptr указывает на "\" а не на начало имени else if( c == '.' ) p2 = ptr; ptr ++; } if( !p2 || p2 < p1 ) p2 = ptr; p3 = ptr = szBagName; while( ( c = *ptr) != 0 ) { if( c == '/' || c == '\\' ) p4 = ptr; <---должно быть p3 = ptr+1; //ptr+1 т.к. ptr указывает на "\" а не на начало имени else if( c == '.' ) p4 = ptr; ptr ++; } ... Ошибка проявлялась на структурных индексах (закрывались там где не должны были), если в имени dbf был указан путь а в имени индекса нет или наоборот. На сервере не устанавливался pIStru->bCompound а на клиенте неправильно отрабатывала функция letoOrderListClear

Andrey: Можно ли на стороне сервера открыть файл, расшифровать его и передать как массив - клиенту ?

Pasha: Можно, с помощью udf-функции

Pasha: Пользователи letodb жалуются, что неправильно работает LETO_ISFLTOPTIM для фильтра типа: .T. .AND. At (I2Bin(n_field), "ABCD") <> 0 выяснилось, что причина этого - неправильная работа движка харбора, а именно: вызов hb_macroGetType для выражения At (I2Bin(n_field), "ABCD") <> 0 дает результат не "L", как должно быть, а "UI" точно так же работает движок клиппера, пример: request L2Bin Type('At (I2Bin(n_field), "ABCD") <> 0') // UI Вывод из всего этого такой: для определения типа макровыражения недостаточно вызвать hb_macroGetType. Если этот вызов дает "UI", то для определения типа выражения придется его выполнить, и определить тип результата.

Dima: Pasha пишет: hb_macroGetType Эта функция еще рабочая ? Harbour (точнее Hbmk2) ее не видит...

Pasha: Dima пишет: Эта функция еще рабочая ? Harbour (точнее Hbmk2) ее не видит... Это сишная функция, для харбор-кода надо использовать Type(...)

Pasha: Просьба собрать и запустить такой тест: proc main Local cPath := "//127.0.0.1:2812/" REQUEST LETO RDDSETDEFAULT( "LETO" ) cls leto_connect(cPath) if ! leto_File(cPath + "test.dbf") dbCreate(cPath + "test.dbf", {{"C1", "C", 10, 0}, {"N1", "N", 10, 0}}) ? "test.dbf created" endif use (cPath + "test") exclusive new if ! NetErr() ? "Success" append blank Field->C1 := "test" dbCommit() wait close else ? "Open failed" ? "Quit succesfully, without crash" endif leto_disconnect(cPath) return Запустите один экземпляр программы. Будет выдано сообщение: Success Press any key to continue... Не закрывая программу, запустите ее второй экземпляр. Должно быть выдано сообщение: Open failed Quit succesfully, without crash Если второй экземпляр программы так отработает, значит - все в порядке. У меня так и происходит Если упадет с gpf - значит, есть какая-то проблема. Пользователи на нее жалуются, а я даже не могу воспроизвести ситуацию.



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