Форум » 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 на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.

Ответов - 193, стр: 1 2 3 4 5 6 7 8 9 10 All

sashaBG: Недавно попробовал откомпилировать но получаются ошибки MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -c -Iinclude;C:\MINIGUI\HARBOUR\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -oobj\b32\leto1.obj source\client\leto1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\client\leto1.c: Error E2451 source\client\leto1.c 342: Undefined symbol 'hb_cdp_page' in function leto_ConnectionNew Error E2451 source\client\leto1.c 342: Undefined symbol 'hb_set' in function leto_ConnectionNew Error E2451 source\client\leto1.c 915: Undefined symbol 'hb_set' in function letoGoBottom Error E2451 source\client\leto1.c 940: Undefined symbol 'hb_set' in function letoGoTo Error E2451 source\client\leto1.c 981: Undefined symbol 'hb_set' in function letoGoTop Error E2451 source\client\leto1.c 1021: Undefined symbol 'hb_cdp_page' in function letoKeyToStr Error E2451 source\client\leto1.c 1047: Undefined symbol 'hb_set' in function letoSeek Warning W8057 source\client\leto1.c 1082: Parameter 'bSoftSeek' is never used in function letoSeek Warning W8057 source\client\leto1.c 1082: Parameter 'bFindLast' is never used in function letoSeek Error E2451 source\client\leto1.c 1151: Undefined symbol 'hb_set' in function letoSkipRaw Error E2451 source\client\leto1.c 1313: Undefined symbol 'hb_cdp_page' in function letoGetMemoValue Error E2451 source\client\leto1.c 1343: Undefined symbol 'hb_cdp_page' in function letoGetValue Error E2451 source\client\leto1.c 1537: Undefined symbol 'hb_cdp_page' in function letoPutMemoValue Error E2451 source\client\leto1.c 1587: Undefined symbol 'hb_cdp_page' in function letoPutValue Error E2451 source\client\leto1.c 2107: Undefined symbol 'hb_set' in function letoOpenConnection Error E2451 source\client\leto1.c 2122: Undefined symbol 'hb_set' in function letoOpenConnection Error E2451 source\client\leto1.c 2267: Undefined symbol 'hb_cdp_page' in function letoCreate Error E2451 source\client\leto1.c 2363: Undefined symbol 'HARBOUR_MAX_RDD_ALIAS_LENGTH' in function letoOpen Error E2451 source\client\leto1.c 2428: Undefined symbol 'hb_cdp_page' in function letoOpen Error E2451 source\client\leto1.c 2520: Undefined symbol 'hb_set' in function letoOpen Error E2451 source\client\leto1.c 2562: Undefined symbol 'HARBOUR_MAX_RDD_DRIVERNAME_LENGTH' in function letoSysName Error E2451 source\client\leto1.c 3834: Undefined symbol 'hb_set' in function HB_FUN_LETO_SUM *** 20 errors in Compile *** ** error 1 ** deleting obj\b32\leto1.obj повидимому в харбурах произошли какието изменения у меня были какието успехи (перетащил одну свою програмку "MiniGUI+Harbour+LetoDB" ) И очень хочется продолжить тестирование ! Pasha помогите пожалуста !

Pasha: Да, есть изменения в api, и в Harbour, и в xHarbour, которые надо учесть Мне еще осталось сделать установку SET_CENTURY и SET_DATEFORMAT как сделаю - залью на CVS

Pasha: Готово Только теперь, я думаю, возникнет проблема сборки letodb для старых версий Харборов. После стольких малоосмысленных переименований становится трудно поддерживать все.


Andrey: Pasha пишет: возникнет проблема сборки letodb для старых версий Харборов. А может и не надо поддерживать старые версии ? Все равно приходиться перетаскивать свои программы на новые версии !!! А куда делся Alexander S.Kresin ? По почте не отвечает ...

Pasha: Всех с праздником ! Отправил на CVS исправления, которые сделал Diego M. Martin Он пишет, что исползьзует letodb уже несколько месяцев, и сервер работает хорошо и очень быстро Поскольку я сам его в работу еще не ставил, это интересный опыт

visitor: Andrey пишет: А куда делся Alexander S.Kresin ? По почте не отвечает ... Всем остальным тоже интересно. Кто-нибудь ответит?

gfilatov: Pasha пишет: Отправил на CVS исправления, которые сделал Diego M. Martin Спасибо! Выложил полную сборку Harbour Leto RDD build 0.7 (by Alexander S. Kresin) updated for Harbour 1.1.0dev по адресу: http://minigui.mylivepage.ru/file/?fileid=6306

PSP: Ну, а все-таки, кто реально (кроме Diego M. Martin ) использует сервер в работе?

PSP: Добавлю: кто-нить замечал подобное? При использовании LetoDB RDD с консольной прогой винда запускает системный процесс csrss.exe (client/server run-time subsystem) и они вместе (прога и csrss.exe) начинают нагружать проц на 100%. Это нормально? PS: точнее не "винда запускает...", а просто "системный процесс". Он всегда работает...

PSP: И еще: как работает система транзакций? leto_RollBack() имеет смысл? Какие подводные камни могут быть?

sashaBG: У меня пока без проблем Программа довольно большая ( Бухгалтерская система ) пользуюсь ( MiniGui + Harbour + LetoDB + DBFCDX) для локальной работе переключаюсь на DBFCDX драйвер при некоторых обработках промежуточной информации написал несколько функций для улеснения работы CopyToCDX(cFile) CopyToLeto(cFile) AppendFromCDX(cFile) AppendFromLeto(cFile) и др. переведу сначало коментарии и сообщения на руском (я из Болгарии) и потом выложу линк а если не терпится можете попробовать ftp://93.123.24.51/PROCS.PRG user: guest pass: 111 при работе заметил что SET SCOPE иногда работает странно например: DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->(DBGoTop()) не устанавливает фильтр а так: DVIG->(DBGoTop()) DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->(DBGoTop()) Все ОК Вобщем мне нравится как сервер работает , но нужно тестировать и тестировать и таких проблем как 100% нагрузка не замечал и под Vista и под XP a до транзакциях еще не дошел :(

Dima: PSP пишет: они вместе (прога и csrss.exe) начинают нагружать проц на 100%. Это нормально? На вирусы проверь машинку. Сейчас просто эпидемия....

Pasha: PSP пишет: Ну, а все-таки, кто реально (кроме Diego M. Martin ) использует сервер в работе? Кресин использует

PSP: Dima пишет: На вирусы проверь машинку. Сейчас просто эпидемия.... Не, всё проверено,чисто. Процесс запущен от имени SYSTEM, файл csrss.exe находится c:\windows\system32.

PSP: sashaBG, спасибо! Посмотрю.

PSP: Pasha пишет: Кресин использует Это понятно.

sashaBG: И все таки SET SCOPE не работает ! Может быть е слишком сложныйе фильтры сделал не знаю Ребята посмотрите сделал две одинаковые СПРАВКИ една под LETODB и другая в локальном режиме от результата видно что LETDB не устанавливает SCOPE знаю что можно реализовать и по-другому но хочется через SCOPE ftp://93.123.24.51/test.zip user: guest pass: 111 ili http://savovs.mylivepage.com/files/test.zip

Pasha: sashaBG пишет: DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->(DBGoTop()) не устанавливает фильтр а так: DVIG->(DBGoTop()) DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+Space(8) ) ) DVIG->(DBGoTop()) Все ОК Я не очень понял смысл такого фильтра Индексное выражение - SME+DOST_SME+DOK_SME+DTOS(DATA_SME) То есть, все записи с непустой датой DATA_SME должны выбрасываться из фильтра, поскольку DTOS(DATA_SME) > space(8), и scope_bottom не выполняется ?

sashaBG: Да Паша ты прав я неправильно написал, в фильтре должны войти все даты так наверное правильнее DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+ Space(8) ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA+'99999999' ) ) DVIG->(DBGoTop()) или DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA ) ) DVIG->(DBGoTop()) но к сожалению после последнего виден весь файл DVIG а вариант DVIG->(DBGoTop()) DVIG->( ORDSCOPE( 0, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA ) ) DVIG->( ORDSCOPE( 1, SALDO->SKA+SALDO->DOST_SKA+SALDO->DOK_SKA ) ) DVIG->(DBGoTop()) показывает первую запись файла + правильно отфильтрованные а в локальном варианте видно что результат другой (правильный)

sashaBG: Вопрос к Паше ! У LetDB есть возможность проверять наличие Директорий ? Содержание LetoDB.ini такое: [MAIN] Port = 2812 Log = letodb.log DataPath = c:\letodb EnableFileFunc = 1 Я пробовал Leto_Connect() (Leto_Connect("//127.0.0.1/")<>-1) возвращает .T. (Leto_Connect("//127.0.0.1/FIRMA")<>-1) возвращает .T. (а такой папки в "c:\letodb" нет ) мне кажется ето будет полезно чтобы избежать ошибок при DBCreate() например или добавить функцию Leto_IsDir(<cDir>) а потом использовать так: cServer := //127.0.0.1/ IF ! Leto_IsDir(cServer + "FIRMA") ?"Путь "+ cServer + "FIRMA" + "неправильный !" endif

Pasha: Коннект устанавливается не с определенным каталогом, а с сервером, поэтому leto_connect и возвращает .t. Что касается leto_isdir(), то не хотелось бы загромождать сервер несвойственными ему операциями. Можно проверять наличие нужного файла в этом каталоге функцией leto_file() Если добавить leto_isdir(), то потом захочется еще и создавать/удалять каталоги :)

sashaBG: Ну размечтался я :) , Вы уж простите Паша! Я с Вами согласен на все 100 . Я вообще то мечтаю об Aplication Server но к сожалению в языке C не сильно соображаю. Надо наверное изучить работу с библиотекой SOCKET . Написать похожую на LetoDB программу и посылать ей команды на выполнение на серверном компе. Спасибо за Внимание !

Петр: Мечтать не вредно. ;) Год назад не было LetoDB, а теперь посмотрите harbour\contib\examples\uhttpd uHTTPD (Micro HTTP server) - http сервер написанный на Harbour, позволяющий запускать на исполнение предварительно откомпилированные hrb модули, использовать технологию AJAX. Почему б тогда о сервере приложений не помечтать ;) P.S. Судя по наличию ifdef _XHARBOUR_ с XHARBOUR автор сервер тоже тестировал.

gfilatov: Pasha пишет: Только теперь, я думаю, возникнет проблема сборки letodb для старых версий Харборов. После вчерашних исправлений А.Кресина сервер перестал собираться для новых SVN версий Харбора. Предлагаемое решение проблемы состоит в замене используемой Александром константы HB_VERSION_MT на !defined( HB_LEGACY_LEVEL )

Andrey: 1) Подскажите пожалуйста, потянет ли LetoDB 100 пользователей одновременно ? 2) Как реализовать работу LetoDB, если нужно 20 баз на отдельные предприятия ? Нужно будет запускать 20 СЕРВЕРОВ LetoDB на СЕРВЕРЕ ? А обычный 4-ядерник потянет столько задач одновременно ? 3) А как с защитой информации ? Взломать СЕРВЕР LetoDB смогут ли ? Заранее спасибо за ответы.

sashaBG: У меня получилось собрать LetoDB Ver 0.8 через Harbour 1.1.0dev (Rev. 10775) и BCC58 http://93.123.24.51/letodb.zip

gfilatov: Выложил компактную сборку Harbour Leto RDD build 0.8 (by Alexander S. Kresin) updated for Harbour 1.1.0dev по адресу: http://minigui.mylivepage.ru/file/?fileid=6953 Что нового: - введено частичное шифрование траффика (команда CRYPT_TRAFFIC=1 в ini файле) - добавлена аутентификация при подключении/работе к серверу: серверный ini файл может теперь иметь такие команды: PASS_FOR_LOGIN = 1 ( 0, если отключено ), если сервер требует аутентификация при подключении; PASS_FOR_MANAGE = 1, если соответствующие права необходимы для работы с данными; PASS_FOR_DATA = 1, если соответствующие права необходимы для записи данных. PASS_FILE - путь и имя файла аутентификации, по умолчанию "leto_users". - исправления для совместимости с различными версиями компилятора Harbour (до версии 1.0 или после версии 1.01)

Andrey: Блин, так и никто не ответил ! Ну хоть предположения свои выскажите .... 1) Подскажите пожалуйста, потянет ли LetoDB 100 пользователей одновременно ? 2) Как реализовать работу LetoDB, если нужно 20 баз на отдельные предприятия ? Нужно будет запускать 20 СЕРВЕРОВ LetoDB на СЕРВЕРЕ ? А обычный 4-ядерник потянет столько задач одновременно ? 3) А как с защитой информации ? Взломать СЕРВЕР LetoDB смогут ли ? Заранее спасибо за ответы.

Pasha: 1. Этот вопрос надо выяснить эмпирическим способом 2. Нет, достаточно запустить один сервер letodb 3. Александр совсем недавно добавил шифровку пакетов в letodb с помощью криптоалгоритма blowfish

alkresin: 1) Подскажите пожалуйста, потянет ли LetoDB 100 пользователей одновременно ? Работать-то будет, а вот насколько хорошо - зависит от характера работы пользователей. Если они в основном в Контакте сидят и только время от времени введут какой-нибудь документ, то, думаю, проблем не будет, а вот если все 100 или хотя бы половина из них все время кучу данных перемалывают, то, боюсь, будут задержки. 2) Как реализовать работу LetoDB, если нужно 20 баз на отдельные предприятия ? Нужно будет запускать 20 СЕРВЕРОВ LetoDB на СЕРВЕРЕ ? Один, конечно. 3) А как с защитой информации ? Взломать СЕРВЕР LetoDB смогут ли ? Хм... Сама концепция сервера позволяет хранить данные в месте, защищенном от посторонних, т.е. в каталоге, куда доступ ограничен - в этом случае безопасность хранения на сервере обеспечивается ОС и системным администратором. Доступ к данным при этом можно получить только из клиентских программ, скомпилированных для работы с letodb. Если использовать недавно реализованную систему аутентификации, то защита есть и с этой стороны. Сами пароли передаются зашифрованными. На мой взгляд, система достаточно надежна, хотя я не специалист в криптографии и говорить наверняка не могу.

Andrey: alkresin пишет: Доступ к данным при этом можно получить только из клиентских программ, скомпилированных для работы с letodb. А если кто-то на letodb создаст модуль работы с базами, сможет ли он испортить мои базы ? alkresin пишет: Если использовать недавно реализованную систему аутентификации, то защита есть и с этой стороны. Сами пароли передаются зашифрованными. А вот здесь поподробней пожалуйста ! И примеры тоже дайте пожалуйста... И еще САМАЯ БОЛЬШАЯ ПРОБЛЕМА !!! Можно ли организовать шифрование БД на сервере и передачу хотя бы текстовых данных через Интернет ЗАШИФРОВАННЫМИ, чтоб их потом можно было на клиенте РАСШИФРОВЫВАТЬ и использовать ???

alkresin: Andrey пишет: А если кто-то на letodb создаст модуль работы с базами, сможет ли он испортить мои базы ? Если не использовать систему аутентификации, то сможет. Если же вы поставите в letodb.ini на сервере PASS_FOR_DATA = 1, то изменить данные может только тот, кто вошел под своим именем и паролем и имеет права на запись. А если поставите PASS_FOR_LOGIN = 1, то и подсоединиться к серверу можно только указав правильные имя и пароль. Добавлять пользователей, менять пароли и права доступа можно из клиентской программы, используя функции: LETO_USERADD( cUser, cPassword [, cAccess] ) LETO_USERPASSWD( cUser, cPassword ) LETO_USERRIGHTS( cUser, cAccess ) Права доступа ( cAccess ) на данный момент включают в себя 3 позиции: административные ( права на добавление/изменение пользователей ), право на использование management функций ( программы manage.exe ) и право на запись; они задаются в виде строки из 3-х символов, каждый из которых - Y или N: "NNY", например, дает права на запись и отказывает в других правах. Прежде чем ставить PASS_FOR_ ... в letodb.ini, надо завести хотя бы одного пользователя с административными правами. Кстати, добавлять пользователей можно, используя консольную утилиту utils/manager/comsole.prg, там же можно посмотреть и примеры использования этих функций. Если система аутентификации работает, то в клиентской программе необходимо сначала присоединиться к серверу: leto_connect( cAddress, cUsername, cPassword ) Andrey пишет: И еще САМАЯ БОЛЬШАЯ ПРОБЛЕМА !!! Можно ли организовать шифрование БД на сервере и передачу хотя бы текстовых данных через Интернет ЗАШИФРОВАННЫМИ, чтоб их потом можно было на клиенте РАСШИФРОВЫВАТЬ и использовать ??? Над шифрованием БД надо думать, я не уверен, что средства Harbour позволяют это сделать. Такое шифрование должно быть встроено в RDD DBFCDX, ведь входящие в ядро RDD функции работы с индексами должны уметь расшифровывать данные. Но лично мне шифрование самой БД не представляется таким уж важным - поскольку данные можно поместить в каталог, доступный только администратору, посторонние без него не смогут до них добраться. Что касается шифрации траффика, то это уже есть. Просто добавьте CRYPT_TRAFFIC = 1 в letodb.ini. На данный момент шифруются данные, передаваемые с сервера клиенту. Данные от клиента к серверу я еще не шифровал - просто из-за лени :).

wad1: Шифрование таблиц средствами Harbour нормально работает при использовании SIXCDX. В Clipper мы применяли шифрованные таблицы на протяжении нескольких лет, и при переходе на Harbour критических затруднений не было.

alkresin: wad1 пишет: Шифрование таблиц средствами Harbour нормально работает при использовании SIXCDX. Я как-то пробовал шифровать таблицу средствами SIXCDX под Harbour, но что-то не получалось. А вот прямо сейчас - все вышло нормально. Так что, действительно, можно будет это дело использовать.

alkresin: Вопрос вдогонку: есть ли какие-нибудь особенности при использовании SIXCDX по сравнению с DBFCDX в Harbour, или все точно так же работает + какие-то дополнительные возможности ?

Pasha: alkresin пишет: есть ли какие-нибудь особенности при использовании SIXCDX по сравнению с DBFCDX в Harbour, или все точно так же работает + какие-то дополнительные возможности ? SIXCDX - это тот же DBFCDX, собранный с #define HB_SIXCDX Как правило, при такой сборке добавлены дополнительные возможности. ИМХО, не стоит шифровать БД непосредственно на сервере средствами SIXCDX. Только клиент letodb, имеющий права доступа к БД, будет иметь возможность получить данные из таблиц DBF. А уж какими средствами сервер это обеспечивает - это дело сервера. Шифрование таблиц здесь излишне.

wad1: Дополнительных возможностей пока не обнаружили (не особенно искали), а по поводу особенностей: 1 - В Clipper'е ПЕРЕДоткрытием таблицы нужно было установить Sx_setPass(), а в Harbоur'е - ПОСЛЕ открытия. 2 - В Harbour'е не получилось заставить работать функцию Sx_SetScope(). Все заработало после замены этой функции на OrdScope(). Хотя к шифрованию это отношения конечно не имеет.

Andrey: wad1 пишет: Шифрование таблиц средствами Harbour нормально работает при использовании SIXCDX. В Clipper мы применяли шифрованные таблицы на протяжении нескольких лет, и при переходе на Harbour критических затруднений не было. А можно пример простой показать ? И будет ли под хХарбором это работать ? Заранее спасибо !

alkresin: Andrey пишет: А можно пример простой показать ? Вот так шифруется таблица : Function Main REQUEST SIXCDX RDDSETDEFAULT( "SIXCDX" ) sx_SetPass( "Test" ) use joupk new exclusive sx_DBFEncrypt() reindex return В xHarbour RDD такое же, как в Harbour, так что должно и там работать.

alkresin: Выложен очередной релиз - build8. Он содержит несколько исправлений, в том числе важных. Добавлена обработка internal error - такие возникают иногда при повреждении данных. Теперь сервер при таком событии закрывает все таблицы и записывает в letodb_crash.log информацию о том, какой >pth это натворил и с каким файлом. В management утилитах теперь еще больше статистики. Добавлена функция leto_IsFltOptim() - она возвращает .T., если текущий фильтр исполняется на сервере.

sashaBG: Вот примерчик click here когда использую комаду SET FILTER прога слетает с ошибкой Unrecoverable error 6005: Exception error: можно посмотреть в hb_out.log а когда использую DbSetFilter() не слетает , но и фильтр не работает !! Я знаю что можно и нужно писать код по другому но ето просто тест

alkresin: Причина глупейшая - у меня почему-то задан буфер фиксированной длины ( 256 байт ) при передаче строки фильтра, ваш фильтр оказался слишком длинным - отсюда переполнение буфера ... Сейчас исправлю. А dbSetFilter() не работает, т.к. вы передаете в нем только кодоблок, а на сервер-то передается строка. Это тоже поправлю - в этом случае фильтрация должна выполнятся в клиентском приложении.

Pasha: Для xHarbour я давно делаю отдельную dll для rddleto Захотелось сделать и для Harbour, но... получаю unresolved externals: _hb_errNew _hb_errPutGenCode _hb_errPutSubCode _hb_errPutDescription _hb_errPutOsCode _hb_errPutFileName _hb_errPutFlags _hb_cmdargARGV можно ли в include\hbapierr.h добавить HB_EXPORT в определения этих функций (можно для всех функций в строках 102-129) ? Александр, Петр, если возражений у других разработчиков не будет, может сделаете ?

alkresin: Сделаем: ==================================== On Wed, 17 Jun 2009, Alexander S.Kresin wrote: Hi, > > are there objections to make functions from rtl/errorapi.c ( hb_errNew(), > > hb_errPutGenCode(), ... ) HB_EXPORT ? > > This could allow to build as dll third party RDD's, etc. They should be exported. I'll commit such modification in a while. best regards, Przemek ==============================

Oskar_Aa: Добрый день, форумчане.... использую xHarbour build 1.0.0 (Simplex), проект "Консольный" xHarbour.... Сегодня решил подключить LETODB.exe (2008-01-31 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su). Проект собрался нормально. При запуске вылетает по ошибке ERROR LETO/1021, интересно что ЭТО происходит с разными файлами.... Вопрос(ы): 1. Есть ли что похожее на NG по ошибкам для LETODB 2. Может ли влиять на открытие файлов ч/з LETODB структура полей файла (тип, размер, первого поля). PS. Открытие файла БД Use (Cdatabase) SHARED Alias &Use_Alias Скриншот: |//....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/BLNS19 |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/REKVIZIT |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/RELATION |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/MENU |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/PLANS |Error LETO/1021 Data type error: -003:32-1012

Oskar_Aa: Добрый день, форумчане.... использую xHarbour build 1.0.0 (Simplex), проект "Консольный" xHarbour.... Сегодня решил подключить LETODB.exe (2008-01-31 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su). Проект собрался нормально. При запуске вылетает по ошибке ERROR LETO/1021, интересно что ЭТО происходит с разными файлами.... Вопрос(ы): 1. Есть ли что похожее на NG по ошибкам для LETODB 2. Может ли влиять на открытие файлов ч/з LETODB структура полей файла (тип, размер, первого поля). 3. Количество открытых файлов в LETODB (аналог переменной CLIPPER Files=250) PS. Открытие файла БД Use (Cdatabase) SHARED Alias &Use_Alias Скриншот: |//....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/BLNS19 |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/REKVIZIT |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/RELATION |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/MENU |//.....168.1.19:2812/ANAL/BALANS.KKB/FILES.2008/PLANS |Error LETO/1021 Data type error: -003:32-1012 Открывает 4 файла и на 5 Error 1021

alkresin: Oskar_Aa пишет: LETODB.exe (2008-01-31 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) Вы действительно используете релиз от января прошлого года ???

Oskar_Aa: Александр, содержимое файла ChangeLog /* $Id: Changelog,v 1.176 2008/08/07 16:47:00 ptsarenko Exp $ */ /* Use this format for the entry headers: YYYY-MM-DD HH:MM UTC[-|+]hhmm Your Full Name <your_email@address> For example: 2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org> */ 2008-08-07 19:45 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * source/client/letomgmn.c * source/server/letofunc.c * include/rddleto.h * pCurrentConn moved from letofunc.c to leto1.c. The default connection now can be set by LETO_CONNECT() function for USE and CREATE command * If server name and port is skipped in file name in Leto_File() function, the default connection is used * LETO_MGGETINFO() function now return DataPath + added leto_InTransaction() function * skip buffer is used for dbSkip(-1) also * hb_rddFlushAll() replaced witn SELF_FLUSH( ( AREAP ) pArea ) in the flush command on server 2008-07-15 12:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Fixed memory size, allocated for leto_rec() function - there were GPF's in some cases. 2008-07-14 11:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * re-committed 2008-07-11 13:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/server.prg * The forth parameter od dbCreate ( lKeepOPen ) works now. * COPY TO command works now. 2008-07-10 22:25 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! fixed DBOI_SCOPETOPCLEAR and DBOI_SCOPEBOTTOMCLEAR evaluation with empty key item 2008-07-09 22:15 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * added bAppend parameter to letoSetBlankRecord() function, and ulRecNo is cleared only for dbAppend() * source/server/letofunc.c ! fixed scope operations in leto_Skip() 2008-07-09 19:45 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! fixed compilation for Harbour 2008-07-09 09:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Minor fix 2008-07-08 22:15 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c ! fixed gpf in letoOrderListFocus() if incorrect order number is passed * added check for already opened index bagname in letoOrderListAdd() 2008-07-08 16:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Fix in letoPutMemoValue() function * source/server/letofunc.c * source/common/hbip.c ! Fixes for hpux, provided by Luiz Rafael Culik Guimaraes 2008-07-07 04:10 UTC+0700 Andi Jahja <harbour/AT/cbn/net/id> * source/server/letofunc.c ! type casts 2008-07-06 18:30 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! another fix for FLOCK() * added DataPath to the second parameter in leto_FRename() * source/server/server.prg * changes in hs_createindex() if index bagname has path 2008-07-06 12:00 UTC+0700 Andi Jahja <harbour/AT/cbn/net/id> * source/client/leto1.c ! some type casts ! line 1835 is typo (?), should be ulLen (was uiSize), pse re-check * source/common/hbhip.c * source/server/letofunc.c ! some type casts 2008-07-02 19:40 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * source/server/letofunc.c ! fixed FLOCK() implemetnation 2008-06-16 19:40 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * include/rddleto.h * added szPath into LETOCONNECTION structure * source/client/letomgmn.c - removed writelog() declaration * connection number in LETO_CONNECT, LETO_SETCURRENTCONNECTION and LETO_GETCURRENTCONNECTION now is beginning from 1 + added LETO_PATH(cPath) function. cPath can be used instead of path in SET PATH and SET DEFAULT command * source/client/leto1.c ! typos in letoIsBinaryField + added support for nConnection parameter in the dbUseArea() and dbCreate() functions + added letoRemoveIpFromPath function. Index bag name in OrdCreate and OrdListAdd can be passed with ip name and port 2008-06-09 20:00 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! fixed bug in leto_filef() 2008-06-04 20:30 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * source/server/server.prg ! small fix in hs_OpenIndex(), introduced in my previos commit ! fixed hs_OrderInfo() 2008-06-03 20:30 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c + added support for _SET_AUTORDER flag * source/server/server.prg ! fixed hs_openindex() function if SET_AUTOPEN flag is disabled on a client * source/server/letofunc.c * added check into LETO_ADDTAG function if tag already opened 2008-06-03 00:20 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c + added support for _SET_AUTOPEN flag 2008-06-01 21:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/common/common_c.c * source/client/leto1.c * source/server/letofunc.c * source/server/leto_lnx.c * source/server/leto_win.c * source/server/server.prg * source/include/funcleto.h * writelog() function moved to common_c.c + added function LETO_SUM(cField, [cFilter], [ScopeTop], [ScopeBottom]) 2008-05-16 15:45 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c ! Bugs fixed, related to scopes implementation 2008-05-06 13:24 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/leto1.c * source/server/letofunc.c * version number has been changed to 0.7 * Place for a username and password added to the 'intro' command * 'Exact' setting removed from the 'intro' and from the user structure 2008-04-28 12:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * codepage conversion for memos added 2008-04-18 11:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h + ULONG ulDeciSec has been added to LETOAREAP + #define BUFF_REFRESH_TIME 100 * source/client/leto1.c * The time when records buffer is got from the server, is kept in pArea->ulDeciSec and if the time since this occurence exceeds the BUFF_REFRESH_TIME, the budder is refreshed. 2008-04-13 17:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c + added current codepage, SET_DATEFORMAT, SET_CENTURE and SET_EXACT into intro command * source/server/letofunc.c + added new user environment fields into USERSTRU. It's need for codeblock evaluation + added leto_SetUserEnv function + added filter set into leto_Seek() function * source/server/server.prg + added leto_SetUserEnv() call into hs_createindex() 2008-04-11 11:02 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c ! More type casts for MSVS, provided by Andi Jahja + make_vc.bat + makefile.vc + Makefiles for MSVS has been added 2008-04-10 15:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg ! Bug fixed, which prevented running of a server in a console mode. 2008-04-09 10:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! A lot of type casts for MSVS 2008-04-08 10:08 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Warning fixed. * source/common/common_c.c ! Few type casts for MSVS * source/common/hbip.c * hb_ipConnect() has been changed to decrease the time of connection ! Few type casts for MSVS 2008-04-04 12:55 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) + tests + tests/test_ta.prg + Added a sample, which demonstrates how to use transactions with Leto db server 2008-04-04 12:45 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Additional fix, related to records unlocking after transaction commit or rollback. 2008-04-04 12:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c ! Bugs fixed, related to transactions * leto_Rollback([lUnlock]) now unlocks all locked records, if lUnlock == Nil or .T. * source/server/server.prg ! Small bug fixed in hb_createtable() 2008-04-03 15:16 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c ! Few Bugs fixed, related to transactions and records locking 2008-04-03 10:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) + make_xhb.bat * Added bat file for xHarbour Builder * Readme.txt * Added info about make_xhb.bat 2008-04-03 10:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/common/hbip.c * hb_iprecv() and hb_ipsend() has been simplified - unused modes removed. * Changing of send/receive buffer, introduced in previous post, is isolated to separate function hb_ipSetBufSize(), buffer size is reduced to 16K. Changing of buffer size is moved from hb_ipServer() to hb_ipAccept() * include/funcleto.h * HB_SENDRECV_BUFFER_SIZE is increased to 16K * source/client/leto1.c * source/server/letofunc.c * Changed calls to hb_iprecv(), hb_ipsend() 2008-04-01 13:36 UTC+0100 Miguel Angel marchuet Frutos (miguelangel/at/marchuet.net) * source/common/hbip.c % increased SND and RCV buffers to 64k and use 1/2 of its capacitie to increase speed transfer. In the future this may be configurable settings. 2008-03-31 10:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Few warnings fixed. 2008-03-28 14:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Bug fixed in leto_FindTable() 2008-03-28 13:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/client/leto1.c * Transactions support is ready. Not properly tested yet, but simplest tests works. 2008-03-28 09:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/client/leto1.c * Continued implementation of transactions support. 2008-03-27 21:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c ! fixed several bugs for binary fields + add missing SELF_SYNCCHILDREN for letoGoTop and letoGoBottom + added letoSetBlankRecord function. It's need to fill record by empty values before commit operation 2008-03-27 12:44 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/client/leto1.c * Continued implementation of transactions support. New functions has been added: leto_BeginTransaction() leto_RollBack() leto_CommitTransaction() 2008-03-27 12:44 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * Started implementation of transactions support 2008-03-27 10:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/common/hbip.c * Added SO_KEEPALIVE option to the server side socket. * Whatsnew.txt * Added build 6 info. 2008-03-27 10:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * hb_strncpyLower is replaced by other functions 2008-03-26 21:20 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * include/funcleto.h * source/server/letofunc.c * source/client/leto1.c + added support for additional field types: HB_FT_INTEGER HB_FT_DOUBLE HB_FT_FLOAT HB_FT_DAYTIME HB_FT_MODTIME + added hb_strncpyLower function for xHarbour * source/server/server.prg + added requests for codepages * small change in hs_createindex 2008-03-26 12:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/server/letofunc.c * version number has been changed to "0.5" + Whatsnew.txt 2008-03-26 11:08 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * readme.txt * added info about new ini entries and leto_Connect() function. 2008-03-26 10:32 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg ! Bug fixed * source/client/leto1.c * ordBagExt() now returns ".NTX" if the dbf is opened via "DBFNTX" 2008-03-26 09:38 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg ! Few bugs fixed * Now it is possible to define [DATABASE] section and the following options for it: DataPath = some_path Driver = CDX/NTX 2008-03-25 21:55 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * DATABASE structures and appropriate code has been added. 2008-03-25 20:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/leto1.c * source/server/letofunc.c * source/server/server.prg * Support of DBFNTX has been added. For now, to force Letodb work via DBFNTX driver, you need to write in letodb.ini: DEFAULT_DRIVER = NTX 2008-03-25 17:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Small fix 2008-03-25 16:50 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/funcleto.h * source/client/leto1.c * source/server/letofunc.c * source/server/server.prg * letoOrderListClear() has been implemented. 2008-03-25 12:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c * Changed LETOTAG structure * All bagnames and tagnames are kept now in lower case 2008-03-24 14:06 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Bugs fixed, introduced in previous commit 2008-03-24 11:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * some changes in the protocol: SET DELETED flag is transferred now in all move commands instead of 'intro' and 'set;01;' * source/client/letomgmn.c * leto_setDeleted() has been removed. * source/server/letofunc.c * changes, related to SET DELETED handling * leto_goto(), leto_skip() and leto_seek() has been changed to use the leto_getParam() function. 2008-03-24 09:24 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * Some optimizations in leto_goto() and leto_skip() 2008-03-23 19:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Bugs fixed in leto_goto() and leto_SetFilter() * leto_SendAnswer() has been optimized. 2008-03-23 09:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c ! fixed bug in leto_Skip if filter is defined % memory allocations has been optimized in leto_Skip 2008-03-22 23:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c % optimized leto_SetScope calls 2008-03-22 22:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Memory leaks fixed in few functions. If hb_itemGetC() is used, the returned value must be freed, or hb_itemGetCPtr() should be used instead. * leto_getParam() function has been added to regularize handling of a string, gotten from the client. leto_mgmt() has been changed to use the leto_getParam(). 2008-03-22 21:00 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c * source/server/server.prg * hs_skip function has been converted to C level * added szTagName into LETOTAG structure and rewritten leto_FindTag function * renamed letoKeyToItem to leto_KeyToItem * DBOI_KEYTYPE call moved into leto_KeyToItem function * added check for current order into leto_SetFocus() * commented LETO_NSKIPBUF, HS_SETSCOPE, HS_CLEARSCOPE functions 2008-03-22 15:45 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c * added missing initialization for uiLen in leto_Goto() function * changes in leto_rec() for VarField: xHarbour return true in HB_IS_NUMERIC() for one byte strings 2008-03-21 22:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c * source/server/server.prg * hs_goto function has been converted to C level. 2008-03-19 00:15 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c * source/server/server.prg * scope functions has been converted to C level. 2008-03-18 15:56 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * Started implementation of OrderListClear method * source/client/letomgmn.c * leto_mgGetInfo() now accepts info about indexes * source/server/letofunc.c * source/server/server.prg * Handling of index and tag structures on C level has been extended * management function now transfers data about indexes. 2008-03-17 19:50 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c * added parameter in hb_gcCollectAll() for xHarbour 2008-03-17 16:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * itmFltExpr member ( to keep the filter codeblock ) has been added to the AREASTRU and appropriate code to set and release it. 2008-03-17 12:48 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * relations has been implemented 2008-03-16 20:14 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * letoOrderListAdd() has been implemented * source/server/letofunc.c * index structures added * source/server/server.prg ! Some fixes 2008-03-16 14:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * Small protocol corrections * source/client/letomgmn.c * leto_SetSkipBuffer() added * source/server/letofunc.c * Small protocol corrections * pTag structure added to the area structure * Support for the leto_SetSkipBuffer() * source/server/server.prg * skip procedure uses the value, set by leto_SetSkipBuffer() 2008-03-15 18:45 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/leto_lnx.c * source/server/leto_win.c * Small corrections * source/server/letofunc.c * source/server/server.prg * hs_file() has been converted to C level. 2008-03-15 11:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * Small fix in leto_CloseArea() - records unlocking is called * Cleanup 2008-03-15 11:22 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * hs_append(), hs_update() has been converted to C level. 2008-03-14 12:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * utils/manager/manage.prg * New possibilities added: disconnect and kill user. 2008-03-14 11:50 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Memory leak fixed in leto_ordfunc() * Garbage collection once in 5 minutes has been added. 2008-03-13 21:48 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/letomgmn.c + leto_mgKill() function added * source/server/leto_win.c * source/server/letofunc.c * support of leto_mgKill() has been added. 2008-03-13 16:38 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * Added conditional definition of DBENTRYP_RVVL to discard problems with previous change. 2008-03-13 12:50 UTC+0100 Miguel Angel marchuet Frutos (miguelangel/at/marchuet.net) * source/client/leto1.c + Added ulConnect as 4 parameter for DbDrop and DbExists 2008-03-13 11:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * makefile.bc * Makefile.linux * Makefiles has been updated to support MT mode 2008-03-13 11:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * The repository was tagged with 'v_single_thread' + include/funcleto.h + include/srvleto.h * include/rddleto.h * new header files has been added to separate server related headers. * Threads related function definitiona has been added * source/server/leto_lnx.c * source/server/leto_win.c * New functions for threads creating and synchronization has been added: BOOL leto_ThreadCreate( void* (*ThreadFunc)(void*) ); BOOL leto_ThreadMutexInit( LETO_MUTEX * pMutex ); void leto_ThreadMutexDestroy( LETO_MUTEX * pMutex ); BOOL leto_ThreadMutexLock( LETO_MUTEX * pMutex ); BOOL leto_ThreadMutexUnlock( LETO_MUTEX * pMutex ); BOOL leto_ThreadCondInit( LETO_COND * phEvent ); void leto_ThreadCondDestroy( LETO_COND * phEvent ); int leto_ThreadCondWait( LETO_COND * phEvent, int iMilliseconds ); BOOL leto_ThreadCondUnlock( LETO_COND * pCond ); * source/server/letofunc.c * server routines rewritten to work with two threads: first, which accepts connections, waits for clients requests and executes management functions; it doesn't touch Harbour's stack and RDD; second, which handles all requests, related to data access, and, so, works with Harbour's stack and RDD; 2008-03-05 15:24 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Fix in letoOpen() - now it doesn't give run-time error, only a NETERR, if a file can't be opened because of sharing problems 2008-03-05 13:18 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/letomgmn.c * utils/manager/manage.prg * Some improvements 2008-03-05 11:08 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * utils/manager/console.prg * Small cleanup * utils/manager/manage.prg * Rewritten using new management functions. 2008-03-05 10:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/client/leto1.c ! Small fixes * source/client/letomgmn.c * Following management functions has been implemented: leto_Disconnect() leto_SetCurrentConnection() leto_GetCurrentConnection() leto_GetServerVersion() leto_mgGetInfo() leto_mgGetUsers() leto_mgGetTables() * utils/manager/console.prg * Rewritten using new management functions. 2008-03-04 22:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * utils/manager/manage.prg * utils/manager/console.prg * Some changes in the protocol 2008-03-04 21:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/leto1.c * source/client/letomgmn.c * Some changes in LETOCONNECTION structure and connection functions. * leto_Connect() function implemented. * Introducing of management functions started. 2008-03-04 18:44 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Bug fixed in leto_FindTable() 2008-03-04 15:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * hs_ordfunc() is converted to C level * source/client/leto1.c ! Bug fixed in DBOI_POSITION implementation 2008-03-04 13:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Few warnings fixed. 2008-03-04 13:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Locking seems to work properly now 2008-03-04 10:55 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * source/client/leto1.c * Further locking changes 2008-03-03 22:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * HSTable() class and appropriate stuff is fully converted to C Level * source/client/leto1.c ! Some fixes in leto_RawLock() method 2008-03-01 20:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * include/rddleto.h * source/server/letofunc.c * source/server/server.prg * source/client/leto1.c + added support for "D", 3 and "D", 4 fields + added support for "V" varfields 2008-03-03 20:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Locking functions are converted to C level and fixed. 2008-03-03 16:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * leto_UnlockAllRec(), leto_Lock(), leto_Unlock() functions added. 2008-03-03 13:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * Restored a change, which was accidentally deleted while last commit * source/server/letofunc.c * Further HSTable conversion 2008-03-02 19:42 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/client/leto1.c ! Bugs fixed, related to delete/recall * fUnLockAll flag of dbAppend() is transferred now to the server. 2008-03-02 16:55 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Almost all of the HSTable converted to C level. 2008-03-01 22:24 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Yet another part of code converted to C level. 2008-03-01 14:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/client/leto1.c ! Few bugs fixed, related to index creation 2008-03-01 13:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * Few functions, which are not used now, has been removed: leto_At(), leto_Statis(), leto_Date2b() 2008-03-01 12:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Yet another part of code converted to C ...

Oskar_Aa: ... level, HSUser class is removed. 2008-02-29 13:01 UTC+0100 Miguel Angel marchuet Frutos (miguelangel/at/marchuet.net) * source/server/server.prg ! fixed OrdBagName now is transmited when dbf is open, and now BagName is correctly informed. 2008-02-28 21:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/common/hbip.c * C version of hb_ipClose() added. * source/server/server.prg * source/server/letofunc.c * Yet another part of code converted to C level 2008-02-28 21:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * Some cleanup and formatting 2008-02-28 15:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * Version number changed to 0.4 * source/server/letofunc.c * Version number changed to 0.4 2008-02-28 11:58 UTC+0100 Miguel Angel marchuet Frutos (miguelangel/at/marchuet.net) * source/client/leto1.c * source/server/letofunc.c * source/server/server.prg ! fixed unlock, extra Z founded. + added support to DbOrderInfo, DBOI_NAME, DBOI_BAGNAME and DBOI_UNIQUE (in setget mode) 2008-02-28 10:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * Added support for char fields with len >= 256 * source/server/server.prg * cValToChar() changed to avoid using of syntax, incompatible with Harbour ( SWITCH ... ) 2008-02-27 22:10 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source\server\server.prg * source\server\letofunc.c * source\client\leto1.c + initial support of relations 2008-02-27 21:56 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source\server\letofunc.c ! Bugs fixed, related to tables reallocation 2008-02-26 22:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source\server\server.prg * source\client\leto1.c + added INDEX ON ... CUSTOM support 2008-02-26 13:46 UTC+0100 Miguel Angel marchuet Frutos (miguelangel/at/marchuet.net) * include\rddleto.h * source\client\leto1.c * source\server\letofunc.c * source\server\server.prg + Added support to DbOrderInfo DBOI_ISDESC and DBOI_CUSTOM and prepared code to full support DbOrderInfo. PLEASE you can see if any thing is wrong in my first upload. 2008-02-26 11:24 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg ! Bug fixed in hs_createindex() * source/client/leto1.c ! Fix for Linux compiler 2008-02-25 22:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/server.prg * source/client/leto1.c * The key for scope operations is sent now like for seek command 2008-02-25 22:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * Few problems fixed. 2008-02-22 09:56 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c * Format of transferred data is optimized * Info about memo fields ( empty or filled ) is included in a transferred record. 2008-02-21 18:56 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Bug fixed in leto_Memo() function 2008-02-21 16:52 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/letofunc.c * source/server/server.prg ! Few bugs fixed 2008-02-21 14:42 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Few warnings fixed 2008-02-21 13:55 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/client/leto1.c ! Few warnings fixed * Makefile.linux ! hbct has been removed from the libraries.list 2008-02-20 22:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Small fix for xHarbour 2008-02-20 21:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * leto_SelectArea() has been added instead of oUser:SelectArea() * Some other C level data added instead of prg level 2008-02-20 17:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c ! Bug fixed 2008-02-20 16:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * utils/manager/manage.prg * Management functions extended - now it is possible to see files, opened by given client 2008-02-20 12:50 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * Time measurement reimplemented on C level * source/server/server.prg * Some cleanup * utils/manager/manage.prg ! Small fix 2008-02-19 22:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * C level table and area structures with appropriate init/release functions introduced. * utils/manager/manage.prg * utils/manager/console.prg * Small changes in format of received data 2008-02-19 15:50 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * Main server cycle, hs_intro(), hs_mgmt() has been converted to C level * makefile.bc * Small changes 2008-02-18 22:53 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * Few function declarations from hbip.c has been added. * source/server/leto_lnx.c * source/server/leto_win.c * source/server/letofunc.c * source/server/server.prg * Further prg to C conversion 2008-02-18 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/common/hbip.c * C level versions of hb_ip_rfd_... functions added 2008-02-18 16:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/common/hbip.c * C level versions of hb_ipServer() and hb_ipAccept() added 2008-02-18 12:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * hs_memo() is converted to C level. * source/client/leto1.c ! Few fixes, related to memo updating and record appending 2008-02-17 11:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * Conversion of management fucntions to C level has been started * source/client/leto1.c leto_Putvalue(): updating of memo field has been implemented. * include/rddleto.h * source/common/common_c.c * leto_Addlen() function has been changed 2008-02-16 14:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * hs_seek(), hs_deleted() are converted to C level. ! Some fixes * include/rddleto.h * source/client/leto1.c * source/common/common_c.c * leto_Addlen() function has been implemented 2008-02-15 09:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg * hs_pack(),hs_zap are converted to C level. * Code cleanup, few warnings fixed 2008-02-14 10:45 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * source/server/server.prg ! Fix in leto_reccount() * hs_flush() is converted to C level. 2008-02-14 09:45 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/leto1.c ! Some fixes, related with latest changes * source/server/letofunc.c * leto_Reccount() function added, which replaces prg level hs_reccount() 2008-02-13 21:50 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c ! Small fix * Alias and workarea number are sent now to server * source/server/server.prg * Generating workarea id from the client's workarea number 2008-02-13 16:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/server/server.prg * Small fix in hs_lock() 2008-02-13 14:59 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Next part of the server code is converted to a C level. 2008-02-12 12:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/letofunc.c * Reallocation of user structures array has been added. 2008-02-12 11:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/server/letofunc.c * Part of the server code is converted to a C level. * utils/manager/manage.prg * Small changes 2008-02-11 15:30 UTC+0200 Petr Chornyj (myorg63/at/mail.ru) * source/server/letofunc.c * GetCmdItem() function added * source/server/server.prg * GetCmdItem() function commented 2008-02-11 13:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/leto1.c * source/common/common_c.c * source/common/hb_ip.c * Some changes, needed to rewrite parts of server to C level. 2008-02-10 19:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * source/client/leto1.c * The key for seek is sent now as any other character field - with a length byte before. 2008-02-10 17:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/errorsys.prg * Few changes, provided by Francesco Saverio Giudice * Small change in wrlog() function * source/server/letofunc.c * leto_ScanAndDel() funcion added - provided by P.Chornyj <myorg63@mail.ru> * source/server/server.prg * Small fix ib hs_memo, provided by Francesco Saverio Giudice * Few code fragments are replaced with leto_ScanAndDel() * Non empty balue of DataPath ini file option is mandatory now for file functions be permitted. * New ini file options added: EnableFileFunc = 0 ( 1 - if using of file functions - leto_file(), leto_ferase(), leto_frename() is enabled ) EnableAnyExt = 0 ( 1 - if using of non standard database/index files is enabled ) * source/client/leto1.c * Small change, which eliminates using of "../" in a path. 2008-02-09 12:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/server.prg + added missing ordCondSet in hs_createindex() * source/client/leto1.c + added parameters for ordCondSet evaluation 2008-02-08 21:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * source/server/server.prg * dbDelete()/dbRecall() operations should be processed when leto_PutRec() called 2008-02-08 21:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/letomgmn.c + added LETO_FERASE(), LETO_FRENAME(), LETO_FERROR() functions * source/server/server.prg + implemented functions above 2008-02-07 21:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c * use HB_SET_DEFAULT instead of HB_SET_PATH in letoCreate() + added additional parameter lFile to leto_getIpFromPath() * leto_getIpFromPath() changed to parse directories from HB_SET_PATH * source/client/letomgmn.c * changed leto_getIpFromPath() usage 2008-02-07 10:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * utils/manager/manage.prg * exename() call is replaced by hb_Argv(0) to avoid using of ct library * utils/manager/bld.bat * hbct.lib is removed from the libraries list 2008-02-06 20:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * hs_openindex() implemented * utils/manager/manage.prg ! Small fix for xHarbour 2008-02-06 19:35 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) + source/common/common_c.c * C level functions, which are used in both client and server modules hb_millisec() has been renamed to leto_millisec() * source/client/leto1.c * source/server/letofunc.c * source/server/server.prg * include/rddleto.h * makefile.bc * Makefile.linux * appropiate changes in related files. 2008-02-06 15:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/client/leto1.c ! Bug fixed in letoOrderInfo(), thanks to Miguel Angel Marchuet 2008-02-06 09:20 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/server/server.prg ! source/client/leto1.c * Seeking caused an error if the keytype was wrong. 2008-02-05 22:50 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/server.prg + added requests for expression engine 2008-02-05 22:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/server/server.prg ! source/client/leto1.c * Fixed bugs with locking 2008-02-05 20:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg ! Fixed a bug in hs_seek() ( failure returned in case of empty key ) ! Fixed paths in hs_createindex() * Added cAlias member in HSArea - an alias from the client 2008-02-05 15:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * include/rddleto.h * Some changes in workarea definition to solve problem with diffences in [x]Harbour versions 2008-02-04 20:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/letomgmn.c * leto_DataSendRecv() function moved to leto1.c * source/server/server.prg * source/client/leto1.c * include/rddleto.h * rewritten scope operations to reduce server calls * utils/manager/console.prg * ExeName() replaced with HB_ARGV(0) 2008-02-04 13:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/client/leto1.c * Small fix, which allows to use a drive letter in a file path ! readme.txt * USE command sample fixed 2008-02-04 13:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/client/leto1.c * Few warnings fixed ! source/common/net.c * bug fixed 2008-02-03 21:50 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/server.prg * Errors while files opening and creation are written to the log now, subcode is passed to client. * Makefile.linux * added letomgmn.c * utils/manager/console.prg * utils/manager/manage.prg * Few functions has been changed to avoid using of hb_at() 2008-02-03 18:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/server.prg + added "file" command for LETO_FILE() function + source/client/letomgmn.c + added LETO_FILE() function * source/client/leto1.c * chahged some functions from static to export + added OrdBagExt(), OrdNumber() * include/rddleto.h + added uiTag to LETOTAGINFO structure * makefile.bc * added letomgmn.c 2008-02-03 11:30 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/server/errorsys.prg * file name converted to lowercase 2008-02-02 21:00 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * include/rddleto.h + added pKeyItem to LETOTAGINFO structure * source/client/leto1.c + added dbOrerInfo(DBOI_KEYVAL,...) 2008-02-02 16:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/server.prg * source/client/leto1.c * include/rddleto.h + added support for dbOrerInfo(DBOI_KEYSIZE,...) + added scope support: dbOrerInfo(DBOI_SCOPETOP,...) dbOrerInfo(DBOI_SCOPEBOTTOM,...) dbOrerInfo(DBOI_SCOPESET,...) dbOrerInfo(DBOI_SCOPETOPCLEAR) dbOrerInfo(DBOI_SCOPEBOTTOMCLEAR) dbOrerInfo(DBOI_SCOPECLEAR) * makefile.bc * changed terminal lib with gtwin for console mode 2008-02-01 20:12 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * include/rddleto.h * source/client/leto1.c * source/server/server.prg * source/server/letofunc.c * Yet another changes to provide compatibility with earlier versions of [x]Harbour 2008-02-01 14:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * source/server/server.prg * source/server/letofunc.c * Few changes to provide compatibility with earlier versions of [x]Harbour 2008-02-01 13:40 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * letodb/utils/manager/console.prg * small interface changes * Readme.txt * Added info about management utilities 2008-02-01 12:25 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/client/leto1.c ! Yet another fix in leto_getIpFromPath() 2008-02-01 11:15 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/client/leto1.c ! Fix in leto_getIpFromPath() 2008-02-01 09:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) ! source/client/leto1.c ! Important fix in leto_ParseRec() - convertion of date type field. * include/rddleto.h * Added HB_FT_... definitions, which was introduced in [x]Harbour in October 2007, to be compatible with earlier distributions. 2008-01-31 20:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * make_b32.bat * HB_PATH env var used for copy command * makefile.bc * changes for xharbour * source/client/leto1.c * warning cleanup * changes for xharbour * source/server/server.prg * changes for xharbour * source/server/letofunc.c * chanded HB_MILLISEC() for xharbour 2008-01-31 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) + letodb/utils/manager/console.prg * simple console management utility has been added + letodb/Changelog * this Changelog file has been created
PSP: Oskar_Aa пишет: Александр, содержимое файла ChangeLog ... 2008-08-07 19:45 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) Проект постоянно обновляется. http://sourceforge.net/projects/letodb Лучше всего пользоваться CVS.

Oskar_Aa: Скачал letodb-0.8.src.zip. начал собирать ч/з xHarbour Compiler build 1.0.0 (SimpLex) Copyright 1999-2007, http://www.xharbour.org http://www.harbour-project.org полезли ошибки: MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -c -Iinclude;\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -oobj\b32\leto1.obj source\client\leto1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\client\leto1.c: Error E2209 source\client\leto1.c 56: Unable to open include file 'hbapi.h' Error E2209 source\client\leto1.c 57: Unable to open include file 'hbinit.h' Error E2209 source\client\leto1.c 58: Unable to open include file 'hbapiitm.h' Error E2209 source\client\leto1.c 59: Unable to open include file 'hbapierr.h' Error E2209 source\client\leto1.c 60: Unable to open include file 'hbdbferr.h' Error E2209 source\client\leto1.c 61: Unable to open include file 'hbapilng.h' Error E2209 source\client\leto1.c 62: Unable to open include file 'hbdate.h' Error E2209 source\client\leto1.c 63: Unable to open include file 'hbset.h' Error E2209 source\client\leto1.c 64: Unable to open include file 'hbvm.h' Error E2209 source\client\leto1.c 65: Unable to open include file 'rddsys.ch' Error E2209 include\rddleto.h 51: Unable to open include file 'hbapirdd.h' Error E2141 include\funcleto.h 90: Declaration syntax error Error E2141 include\funcleto.h 94: Declaration syntax error Error E2147 include\funcleto.h 95: 'BYTE' cannot start a parameter declaration Error E2303 include\funcleto.h 95: Type name expected Error E2147 include\funcleto.h 99: 'BYTE' cannot start a parameter declaration Error E2303 include\funcleto.h 99: Type name expected Error E2147 include\funcleto.h 100: 'BYTE' cannot start a parameter declaration Error E2303 include\funcleto.h 100: Type name expected Error E2141 include\rddleto.h 59: Declaration syntax error Error E2139 include\rddleto.h 78: Declaration missing ; Error E2139 include\rddleto.h 79: Declaration missing ; Error E2139 include\rddleto.h 80: Declaration missing ; Error E2139 include\rddleto.h 81: Declaration missing ; Error E2238 include\rddleto.h 82: Multiple declaration for 'USHORT' Error E2228 include\rddleto.h 82: Too many error or warning messages *** 26 errors in Compile *** ** error 1 ** deleting obj\b32\leto1.obj ЗЫ. MAKEFILE.BC строка xHarbour = Yes комментарий снят MAKE_B32.bat @echo off if "%1" == "clean" goto CLEAN if "%1" == "CLEAN" goto CLEAN if not exist lib md lib if not exist obj md obj if not exist obj\b32 md obj\b32 :BUILD SET HB_PATH=C:\xHARBOUR - поставил сам make -l EXE_OBJ_DIR=obj\b32\bin OBJ_DIR=obj\b32 -fmakefile.bc %1 %2 %3 > make_b32.log if errorlevel 1 goto BUILD_ERR copy lib\rddleto.lib %HB_PATH%\lib\rddleto.lib :BUILD_OK goto EXIT :BUILD_ERR notepad make_b32.log goto EXIT :CLEAN del bin\*.exe del bin\*.tds del lib\*.lib del lib\*.bak del obj\b32\*.obj del obj\b32\*.c del make_b32.log goto EXIT :EXIT Куда копать и что делать????

Oskar_Aa: по поводу "старой" версии LETODB.... Error.Log ----------------------------- xHarbour Error Log ------------------------------ Date...............: 25/06/2009 Time...............: 13:02:22 Application name...: C:\BALANS.KKB\KKBLETO.exe Workstation name...: KYDYKEEV Available memory...: 127640 Current disk.......: C Current directory..: BALANS.KKB Free disk space....: 12929011712 Operating system...: Windows XP Professional 5.01.2600 Service Pack 2 xHarbour version...: xHarbour build 1.0.0 Intl. (SimpLex) xHarbour built on..: Nov 8 2007 09:23:44 C/C++ compiler.....: Borland C++ 5.5.1 Multi Threading....: NO VM Optimization....: 0 Current Area ......:40 -------------------------- Environmental Information -------------------------- SET ALTERNATE......: OFF SET ALTFILE........: SET AUTOPEN........: ON SET AUTORDER.......: 0 SET AUTOSHARE......: 0 SET BACKGROUNDTASKS: OFF SET BACKGROUNDTICK.: 1000 SET BELL...........: OFF SET BLINK..........: .T. SET CANCEL.........: ON SET CENTURY........: ON SET COLOR..........: W/N,N/BG,N/N,N/N,N/BG SET CONFIRM........: ON SET CONSOLE........: ON SET COUNT..........: 0 SET CURSOR.........: 0 SET DATE FORMAT....: DD/MM/YYYY SET DBFLOCKSCHEME..: 0 SET DEBUG..........: OFF SET DECIMALS.......: 9 SET DEFAULT........: SET DELETED........: ON SET DELIMCHARS.....: :: SET DELIMETERS.....: OFF SET DEVICE.........: SCREEN SET DIRCASE........: 0 SET DIRSEPARATOR...: \ SET EOL............: 13 SET EPOCH..........: 1900 SET ERRORLOG.......: ERROR.LOG,.F. SET ERRORLOOP......: 8 SET ESCAPE.........: OFF SET EVENTMASK......: 128 SET EXACT..........: ON SET EXCLUSIVE......: ON SET EXIT...........: OFF SET EXTRA..........: OFF SET EXTRAFILE......: SET FILECASE.......: 0 SET FIXED..........: OFF SET FORCEOPT.......: OFF SET GTMODE.........: 1 SET HARDCOMMIT.....: ON SET IDLEREPEAT.....: ON SET INSERT.........: OFF SET INTENSITY......: ON SET LANGUAGE.......: EN SET MARGIN.........: 0 SET MBLOCKSIZE.....: 0 SET MCENTER........: OFF SET MESSAGE........: 0 SET MFILEEXT.......: SET OPTIMIZE.......: ON SET OUTPUTSAFETY...: ON SET PATH...........: //127.0.0.1:2812/;//127.0.0.1:2812/BALANS.KKB/FILES.2008/;//127.0.0.1:2812/BALANS.KKB/FILES.2008/;;C:\TEMP.ZZ1;C:\TEMP.ZZ1;Q:\BALANS.GET;//127.0.0.1:2812/;Q:\BALANS.KKB\FILES.RAR;BALANS.GET;//127.0.0.1:2812/;//127.0.0.1:2812/;//127.0.0.1:2812/BALANS.KKB/TOOLS.DIR;Q:\BALANS.EXP;Q:\BALANS.GET; SET PRINTER........: OFF SET PRINTERJOB.....: SET PRINTFILE......: PRN SET SCOREBOARD.....: OFF SET SCROLLBREAK....: ON SET SOFTSEEK.......: OFF SET STRICTREAD.....: OFF SET TRACE..........: ON SET TRACEFILE......: TRACE.LOG SET TRACESTACK.....: 2 SET TRIMFILENAME...: .F. SET TYPEAHEAD......: 1024 SET UNIQUE.........: OFF SET VIDEOMODE......: 0 SET WRAP...........: OFF ---------------------------Detailed Work Area Items---------------------------- Work Area No ......: 1 Alias .............: CONFIG Current Recno .....: 1 Current Filter ....: Relation Exp. .....: Index Order .......: 0 Active Key ........: Work Area No ......: 2 Alias .............: BALANS Current Recno .....: 1 Current Filter ....: Relation Exp. .....: Index Order .......: 0 Active Key ........: -------------------- Internal Error Handling Information --------------------- Subsystem Call ....: LETO System Code .......: 1021 Default Status ....: .F. Description .......: Data type error Operation .........: Arguments .........: Involved File .....: -003:21-1003 Dos Error Code ....: 0 Trace Through: ---------------- ORDLISTADD : 0 in Module: OPEN_NTX : 115 in Module: FIL_COM1.prg MAIN : 54 in Module: KKBLETO.prg ############################## Video Screen Dump ############################## +--------------------------------------------------------------------------------+ | Дата:25/06/2009 13:02:22 | |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░╔════════════════════════════╗░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░║Открытие файлов. Ожидайте...║░░░░░░░░░░░░░░░░░░░░░░░░░░| |//127.0.0.1:2812/BALANS.KKB/FILES.2008/══════════════╝░░░░░░░░░░░░░░░░░░░░░░░░░░| |//127.0.0.1:2812/BALANS.KKB/FILES.2008/░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |//127.0.0.1:2812/BALANS.KKB/FILES.2008/BL28_1.Cdx░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |Error LETO/1021 Data type error: -003:21-1003░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |Error at ...: ORDLISTADD(0) in Module: ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |Called from : OPEN_NTX(115) in Module: FIL_COM1.prg░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |Called from : MAIN(54) in Module: KKBLETO.prg░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| | | | | +--------------------------------------------------------------------------------+ Фрагмент кода программы (открытие индексных файлов) Select STYLE Set Index To (Mar2+'BL28_1.Cdx'),(Mar2+'BL28_2.Cdx') Переменная MAR2 - путь к папке с файлами: //127.0.0.1:2812/BALANS.KKB/FILES.2008/

Oskar_Aa: Добрый день, еще раз.... Сегодня скачал версию xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406) Удалось собрать LETODB (от 01/06/2009). получил RDDLETO.Lib, LETODB.exe Тестирование продолжается....

alkresin: Oskar_Aa пишет: Сегодня скачал версию xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406) Это правильно :). С поддержкой разных версий - прямо беда. С Harbour мне удалось обеспечить поддержку более-менее широкого диапазона версий, а вот xHarbour охватить нет времени - поэтому, наверное, только свежие его версии можно использовать ( этого или конца прошлого года ).

Andrey: alkresin пишет: а вот xHarbour охватить нет времени Да и не нужна поддержка в старых версиях, самое главное чтоб в новых работало !

Oskar_Aa: Ошибка при запуске TEST_TA.prg из LETODB (06/01/2009) +xHarbour (REV6401) , ----------------------------- xHarbour Error Log ------------------------------ Date...............: 06/26/09 Time...............: 15:45:16 Operating system...: Windows XP Professional 5.01.2600 Service Pack 2 xHarbour version...: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6406) xHarbour built on..: Mar 26 2009 16:08:37 C/C++ compiler.....: Borland C++ 5.5.1 (32 bit) Multi Threading....: NO VM Optimization....: 2 -------------------------- Environmental Information -------------------------- SET ALTERNATE......: OFF SET ALTFILE........: SET AUTOPEN........: ON SET AUTORDER.......: 0 SET AUTOSHARE......: 0 SET BACKGROUNDTASKS: OFF SET BACKGROUNDTICK.: 1000 SET BELL...........: OFF SET BLINK..........: .T. SET CANCEL.........: ON SET CENTURY........: OFF SET COLOR..........: W/N,N/W,N/N,N/N,N/W SET CONFIRM........: OFF SET CONSOLE........: ON SET COUNT..........: 0 SET CURSOR.........: 1 SET DATE FORMAT....: MM/DD/YY SET DBFLOCKSCHEME..: 0 SET DEBUG..........: OFF SET DECIMALS.......: 2 SET DEFAULT........: SET DEFEXTENSIONS..: ON SET DELETED........: OFF SET DELIMCHARS.....: :: SET DELIMETERS.....: OFF SET DEVICE.........: SCREEN SET DIRCASE........: 0 SET DIRSEPARATOR...: \ SET EOL............: 13 SET EPOCH..........: 1900 SET ERRORLOG.......: ERROR.LOG,.F. SET ERRORLOOP......: 8 SET ESCAPE.........: ON SET EVENTMASK......: 128 SET EXACT..........: OFF SET EXCLUSIVE......: ON SET EXIT...........: OFF SET EXTRA..........: OFF SET EXTRAFILE......: SET FILECASE.......: 0 SET FIXED..........: OFF SET FORCEOPT.......: OFF SET HARDCOMMIT.....: ON SET IDLEREPEAT.....: ON SET INSERT.........: OFF SET INTENSITY......: ON SET LANGUAGE.......: EN SET MARGIN.........: 0 SET MBLOCKSIZE.....: 0 SET MCENTER........: OFF SET MESSAGE........: 0 SET MFILEEXT.......: SET OPTIMIZE.......: ON SET OUTPUTSAFETY...: ON SET PATH...........: SET PRINTER........: OFF SET PRINTERJOB.....: SET PRINTFILE......: PRN SET SCOREBOARD.....: ON SET SCROLLBREAK....: ON SET SOFTSEEK.......: OFF SET STRICTREAD.....: OFF SET TRACE..........: ON SET TRACEFILE......: TRACE.LOG SET TRACESTACK.....: 2 SET TRIMFILENAME...: .F. SET TYPEAHEAD......: 50 SET UNIQUE.........: OFF SET VIDEOMODE......: 0 SET WRAP...........: OFF ---------------------------Detailed Work Area Items---------------------------- -------------------- Internal Error Handling Information --------------------- Subsystem Call ....: LETO System Code .......: 1 Default Status ....: .F. Description .......: Open error Operation .........: Arguments .........: Involved File .....: //127.0.0.1:2812/Nakl1 Dos Error Code ....: 0 Trace Through: ---------------- DBCREATE : 0 in Module: MAIN : 14 in Module: test_ta.prg ############################## Video Screen Dump ############################## +--------------------------------------------------------------------------------+ | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>XHR_PRG.BAT | | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>Erase Test_Ta.C | | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>Erase Test_Ta.Obj | | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>Erase Test_Ta.Exe | | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>C:\XHARBOUR\BIN\HARBOUR test_ta -n -q0 -gc | |-iC:\XHARBOUR\INCLUDE -w 1>test_ta.0Hb | | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>C:\BORLAND\BCC55\BIN\BCC32 -O2 -d -IC:\XHAR| |BOUR\INCLUDE -LC:\XHARBOUR\LIB test_ta.C lang.lib vm.lib rtl.lib rdd.lib macro.l| |ib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib gtwin.lib codepage.lib ct.| |lib tip.lib pcrepos.lib hsx.lib hbsix.lib import32.lib cw32.lib RddLeto.Lib 1>te| |st_ta.0er | | | |C:\ASKAR.AAA\PROGRAMM.PRG\LETODB.PRG>Test_Ta.Exe | | | |Start | |Error LETO/1 Open error: //127.0.0.1:2812/Nakl1 Arguments: () | | | |Error at ...: DBCREATE(0) in Module: | |Called from : MAIN(14) in Module: test_ta.prg Что я сделал НЕ ТАК??? LETODB.exe, RDDLETO.lib скомпилировались без ошибок... |

alkresin: Извиняюсь за глупый вопрос, но: letodb.exe вы запустили ? В списке процессов он есть ? Утилита console.exe или manage.exe его обнаруживает ?

Oskar_Aa: Спасибо, точно, ошибка "ГЛУПЕЙШАЯ". LetoDb.exe был запущен на сервере.....

Oskar_Aa: тест работает.... Александр, еще вопросы. Базы данных БЕЗ ИНДЕКСНЫХ ФАЙЛОВ открыл без проблем. Затем переход через SELECT F_STYLE Set Index To (Mar2+'BL28_1.Cdx'),(Mar2+'BL28_2.Cdx') Вылетает по ошибке: Error LETO/1021 Data type error: -003:32-1012 Arguments: () PS. Subsystem Call ....: LETO System Code .......: 1021 Default Status ....: .F. Description .......: Data type error Operation .........: Arguments .........: Involved File .....: -003:32-1012 Dos Error Code ....: 0 Trace Through: ---------------- ORDLISTADD : 0 in Module: OPEN_NTX : 119 in Module: FIL_COM1.prg MAIN : 54 in Module: KKBLETO.prg

alkresin: Код 1012 согласно документации означает "Corruption detected". Все ли там хорошо с индексом ?

Oskar_Aa: "Простая" без LETODB версия работает на УРА... функция FILE() возвращает .F. в LETODB и .T. без LETO Благодарю за помощь...

alkresin: Вы же понимаете, что letodb.exe открывает таблицы и индексы через dbfcdx - т.е. это dbfcdx ругается на ваш индекс, выдает при его открытии такую ошибку. Может, там в индексном выражении что-то необычное ( UDF, алиасы, переменные ). Если получится, сделайте урезанный вариант dbf с cdx, убедитесь, что leto по-прежнему на них ругается и вышлите мне на email. функция FILE() возвращает .F. в LETODB и .T. без LETO С LETO, наверное, leto_file() ? А EnableFileFunc = 1 в .ini на сервере у вас стоит ?

Oskar_Aa: По индексу в LETO обошел ошибку. (Просто проиндексировал все БД, раньше пытался открыть индексный фай созданный без LETO). Александр,есть несколько вопросов: 1. максимальный размер символьного поля в БД для построения индесксного ключа (при длине 250 байт - ошибка, даже на примере TEST_TA.prg), сократил до 200 байт - пока нормально 2. Где можно посмотреть HELP по LETODB.exe (LETO_File() - не знал Можно выслать образец файла .INI....? По первому вопросу : Структура файла:LCHT01.DBF Поле Тип 1 CODE_FULL C 50 0 2 CODE_NBS C 5 0 3 CODE_ORG N 3 0 4 CODE_OTD N 3 0 5 VAL C 3 0 6 CODE_VIP N 7 0 7 CODE_OTR N 3 0 8 CODE_ZLG N 3 0 9 CODE_KAS N 3 0 10 CODE_COLOR N 3 0 11 CODE_ODB C 50 0 12 NAME_CHT C 200 0 13 DATE_OPN D 8 0 14 DATE_SRK D 8 0 15 DATE_DEL D 8 0 16 TYPE_SCH N 1 0 17 STATUS N 1 0 18 SYMV N 3 0 19 SHIFR N 3 0 20 SROK_DOG N 6 0 21 DOGOVOR N 5 0 22 DATE_DOG D 8 0 23 MEMO_CHET C 50 0 24 ARM N 1 0 25 ARM_NAME C 1 0 26 DATE_DBF D 8 0 27 DATE_PRC D 8 0 28 SUM_DOG N 10 0 29 DEL_TE C 1 0 30 KORRCHET C 1 0 31 CODE_VAL C 3 0 32 PRIZNAK_NL N 3 0 33 STYLE_DATA N 1 0 34 OPN_CLS C 1 0 35 CHET_TYPE C 50 0 Index On Str(Code_Org,3)+Code_Nbs+Val+Name_Cht To 'LCHT_10.CDX' ЕСЛИ поле NAME_CHT 250 байт - ошибка |Error LETO/1021 Data type error: -003:34-1026 Arguments: () |Error at ...: ORDCREATE(0) in Module: |Called from : DBCREATEINDEX(61) in Module: source\rdd\rddord.prg

alkresin: По индексу в LETO обошел ошибку. (Просто проиндексировал все БД, раньше пытался открыть индексный фай созданный без LETO). Т.е., индексы, созданные letodb, отличаются от созданных вашей программой с dbfcdx ? Это настораживающий признак и вам стоит выяснить, отчего так происходит. Скорее всего, дело в установленной кодовой странице. максимальный размер символьного поля в БД для построения индесксного ключа (при длине 250 байт - ошибка, даже на примере TEST_TA.prg), сократил до 200 байт - пока нормально Надо будет увеличить размер буфера. Где можно посмотреть HELP по LETODB.exe (LETO_File() - не знал В readme.txt. Списка функций в официальном релизе, правда, нет, он войдет в следующий релиз. Вот он: LETO_CONNECT( cAddress [, cUserName, cPassword ] ) --> nConnection, -1 if failed LETO_CONNECT_ERR() --> nError LETO_DISCONNECT() LETO_SETCURRENTCONNECTION( nConnection ) LETO_GETCURRENTCONNECTION() --> nConnection LETO_GETSERVERVERSION() --> cVersion LETO_BEGINTRANSACTION() LETO_ROLLBACK() LETO_COMMITTRANSACTION( [ lUnlockAll ] ) --> lSuccess LETO_INTRANSACTION() --> lTransactionActive LETO_SUM( cFieldName [, cFilter ] ) --> nSumma LETO_ISFLTOPTIM() --> lFilterOptimized LETO_SETSKIPBUFFER( nSkip ) LETO_FILE( cFileName ) --> lFileExists LETO_FERASE( cFileName ) --> -1 if failed LETO_FRENAME( cFileName, cFileNewName ) --> -1 if failed LETO_FERROR() --> nError LETO_MGGETINFO() LETO_MGGETUSERS() LETO_MGGETTABLES() LETO_MGKILL() LETO_USERADD( cUserName, cPass [, cRights ] ) --> lSuccess LETO_USERPASSWD( cUserName, cPass ) --> lSuccess LETO_USERRIGHTS( cUserName, cRights ) --> lSuccess LETO_USERFLUSH() --> lSuccess Можно выслать образец файла .INI....? В readme.txt описаны все опции ini - файла, а какие из них ставить - зависит от ваших конкретных нужд, поэтому я не вижу смысла в каком-то образце.

PSP: Для Александра Кресина. Сегодня скачал с CVS LetoDB: 2009-06-30 12:05 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * source/client/leto1.c * Increased buffer size for seek * source/server/server.prg ! Bug fixed in hs_openindex() Exe-шник собрался нормально. Но при попытке открыть базы процесс letodb.exe (на сервере) слетает с ошибкой. Начало файла letodb_crash.log: Breakdown at: 2009.06.30 14:02:03 Unrecoverable error 6005: Exception error: %s Exception Code:C0000005 Exception Address:00433EAB EAX:00000000 EBX:0000001A ECX:00000005 EDX:000000EC ESI:00000000 EDI:0000000D EBP:00EEFC20 CS:EIP:001B:00433EAB SS:ESP:0023:00EEFC08 DS:0023 ES:0023 FS:003B GS:0000 Flags:00010246 CS:EIP: 8B 80 7C 03 00 00 C3 90 90 A1 84 AE 4B 00 50 E8 SS:ESP: 004921E8 0000000D 00000000 003D56B1 0000001A 003D56B1 00EEFC40 0044D1D4 00EEFD5C 0000000D 003D56C2 003D56B1 003D56C1 003D993C 00EEFE6C 00404E82 Вот эта версия 2009-06-11 14:10 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) * Readme.txt * Added functions list. нормально открывает базы. Что я делаю не так? :)

alkresin: А Harbour какой у вас ?

PSP: Harbour у нас вот такой: 2009-06-17 00:05 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt) * harbour/contrib/hbwin/axcore.c ! fixed GPF on ActiveX application exit caused by invalid AtlAxWinTerm() call. ; It's inline function and it does not exists in atl.dll ; MSDN says: When Do I Need to Call AtlAxWinTerm? AtlAxWinTerm unregisters the "AtlAxWin7" window class. You should call this function... If don't call this function, the window class will be unregistered automatically when the process terminates. ; Thanks Toninho for self contained 3 lines GPF sample without FWH, gtwvg, etc! Обновить надо?

Петр: PSP пишет: Обновить надо? Ждать надо. Изменения в ближайшее время будут и в Harbour и я подозреваю, что в LETO.

alkresin: Обновить надо? Нет, лучше не надо. Сегодня там были изменения в структуре RDD, которые я еще не отразил в letodb. А примерчик, который рушит letodb, можно ? А то у меня тут, вроде, все в порядке.

PSP: Примерчик: REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT REQUEST HB_CODEPAGE_RU866 REQUEST LETO PROCEDURE Main CLS HB_SetCodePage( "RU866" ) RDDSETDEFAULT( "LETO" ) ? Leto_File( "//192.168.1.100:2812/TEMP/Tov.dbf" ) WAIT QUIT Leto_File() возвращает .F., причем после паузы 2-3 секунды. Пример нормально завершается, а процесс letodb.exe на сервере слетает. ЗЫ: я в начале написал "открыть базы". Прошу прощения за введение в заблуждение. До открытия дело не доходит.

PSP: ЗЫЗЫ: попытка открытия приводит к тому же эффекту.

alkresin: Странно. У меня ничего подобного не наблюдается. Впрочем, у меня Harbour от сентября прошлого года. Попробую со свежим.

PSP: Ok. Спасибо.

alkresin: Попробовал со свежим - все в порядке... А чем вы строите letodb, каким bat'ником ?

PSP: Батник make_b32.bat. Поищу еще у себя грабли. Спасибо.

PSP: Вопрос закрыт. Грабли у меня. Причина оказалась в сборке Harbour. Нашел у себя исходники на 5 дней старше, чем использовал. Пересобрал harbour из них и пересобрал letodb. Все работает. Еще раз спасибо и прошу извинить за беспокойство.

Oskar_Aa: Доброе утро. Как работает ф/я RECNO() в LETODB? У меня возвращает 0..... FUNCTION MAIN LOCAL i,j,cPath := "//127.0.0.1:2812/" REQUEST LETO RDDSETDEFAULT( "LETO" ) DBCREATE(cPath+'Test1',{{'DOK','N',10,0},{'KOK','C',100,0}}) USE ( cPath+'Test1' ) NEW Alias File1 INDEX ON STR(Dok,10) TO ( cPath+'Test1_0' ) Index On KOK To ( cPath+'Test1_1' ) Set Index To ( cPath+'Test1_0' ),( cPath+'Test1_1' ) For I =1 To 1000 Append Blank Repl Dok With i,Kok With StrZero(I,6) ?Recno() inkey(0) Next

alkresin: Исправлю. Пока можете после Append Blank Repl Dok With i,Kok With StrZero(I,6) поставить COMMIT, будет правильно работать.

Oskar_Aa: Александр, ОК... Где потом забрать LETODB? Спасибо, по тэгам еще не разбирался....

alkresin: С CVS. Подробнее - на http://kresin.belgorod.su/rus/hrbfaq.html, только вместо harbour-project , harbour в батник надо ставить letodb.

PSP: Александр, я снова к Вам... :) Не могу собрать утилиту Manage.exe из LetoDB, потому что не собирается HwGUI: MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -c -Iinclude;J:\Job\MiniGUI\Harbour\include -5 -6 -d -D__WIN32__ -g255 -oobj\b32\draw.obj source\draw.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\draw.c: Warning W8075 source\draw.c 730: Suspicious pointer conversion in function HB_FUN_OPENIMAGE Error E2227 source\draw.c 917: Extra parameter in call to hb_storni in function HB_FUN_INFLATERECT Error E2227 source\draw.c 918: Extra parameter in call to hb_storni in function HB_FUN_INFLATERECT Error E2227 source\draw.c 919: Extra parameter in call to hb_storni in function HB_FUN_INFLATERECT Error E2227 source\draw.c 920: Extra parameter in call to hb_storni in function HB_FUN_INFLATERECT Error E2227 source\draw.c 955: Extra parameter in call to hb_storni in function HB_FUN_OFFSETRECT Error E2227 source\draw.c 956: Extra parameter in call to hb_storni in function HB_FUN_OFFSETRECT Error E2227 source\draw.c 957: Extra parameter in call to hb_storni in function HB_FUN_OFFSETRECT Error E2227 source\draw.c 958: Extra parameter in call to hb_storni in function HB_FUN_OFFSETRECT *** 8 errors in Compile *** ** error 1 ** deleting obj\b32\draw.obj Я посмотрел Changelog к Harbour и увидел: 2009-06-20 22:24 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbapi.h * harbour/source/vm/extend.c * renamed existing hb_par*() and hb_stor*() functions which supports variable number of parameters (...) into hb_parv*() and hb_storv*() * added new hb_par*() and hb_stor*() functions which use strict number of parameters. New hb_par*() functions do not make hidden conversion between types, f.e. hb_parl() returns 1 only for logical parameters which contain .T. Но Вы уже, видимо, в курсе... :)

PSP: И еще: в nightly-sources в файле make_gnu.bat в строке 40, имхо, неточность. Есть if "%HB_LIB_INSTALL%" == "" set HB_LIB_INSTALL=%HB_INSTALL_PREFIX%\lib\%HB_ARCHITECTURE%\%HB_COMPILER% и библиотеки оказываются в папке, к примеру, harbour\lib\win\bcc вместо harbour\lib. Приходится руками переносить. Надо (имхо) if "%HB_LIB_INSTALL%" == "" set HB_LIB_INSTALL=%HB_INSTALL_PREFIX%\lib

alkresin: Не могу собрать утилиту Manage.exe из LetoDB, потому что не собирается HwGUI: Обновите HwGUI, это уже исправлено: 2009-06-29 15:20 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>

alkresin: И еще: в nightly-sources в файле make_gnu.bat в строке 40, имхо, неточность. Это не bug, это feature :). Некто Viktor Szakats решил, что так лучше. Определенная логика здесь есть, т.к. это позволяет хранить наборы библиотек для разных компиляторов.

PSP: alkresin пишет: Обновите HwGUI, это уже исправлено: Спасибо. Меня ввела в заблуждение дата архива hwgui-2.17.src.zip на Sourceforge.net - Sat Oct 11 2008 01:05 Загрузил c CVS. Это не bug, это feature :). Некто Viktor Szakats решил, что так лучше. Определенная логика здесь есть, т.к. это позволяет хранить наборы библиотек для разных компиляторов. В этом смысле - да, логично. :) Ладно, будем копировать. :) Спасибо.

Oskar_Aa: Александр, поставил COMMIT / DbCommit() - тормозит...... Исправления готовы? Спасибо....

alkresin: Исправления готовы? Спасибо.... Да.

Oskar_Aa: Александр. сегодня несколько раз пытался скачать BISON & Flex - ошибка ERROR 404 прискачивании. Архив harbour2.0.0-beta1-win.exe - вылетает по ошибке "неожиданный конец архива"? LETODB - так же не смог скачать....

alkresin: Александр. сегодня несколько раз пытался скачать BISON & Flex - ошибка ERROR 404 прискачивании. А они уже давно не нужны для построения Harbour. Архив harbour2.0.0-beta1-win.exe - вылетает по ошибке "неожиданный конец архива"? LETODB - так же не смог скачать.... Может, на Sourceforge временные проблемыю Попробуйте еще.

Oskar_Aa: Скачал обновленный xHarbour (xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476) при запуске MAKE_B32.BAT в LETODB от 01/06/2009 (2008-01-31 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) make_b32.bat @echo off if "%1" == "clean" goto CLEAN if "%1" == "CLEAN" goto CLEAN if not exist lib md lib if not exist obj md obj if not exist obj\b32 md obj\b32 :BUILD SET HB_PATH=C:\xHARBOUR make -l EXE_OBJ_DIR=obj\b32\bin OBJ_DIR=obj\b32 -fmakefile.bc %1 %2 %3 > make_b32.log if errorlevel 1 goto BUILD_ERR copy lib\rddleto.lib %HB_PATH%\lib\rddleto.lib :BUILD_OK goto EXIT :BUILD_ERR notepad make_b32.log goto EXIT :CLEAN del bin\*.exe del bin\*.tds del lib\*.lib del lib\*.bak del obj\b32\*.obj del obj\b32\*.c del make_b32.log goto EXIT :EXIT появляются следующие ошибки: MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -c -Iinclude;C:\xHARBOUR\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -oobj\b32\leto1.obj source\client\leto1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\client\leto1.c: Error E2451 source\client\leto1.c 337: Undefined symbol '_POSIX_PATH_MAX' in function leto_ConnectionNew Error E2451 source\client\leto1.c 873: Undefined symbol '_POSIX_PATH_MAX' in function ParseTagInfo Error E2451 source\client\leto1.c 2357: Undefined symbol '_POSIX_PATH_MAX' in function letoCreate Error E2451 source\client\leto1.c 2540: Undefined symbol '_POSIX_PATH_MAX' in function letoOpen Error E2451 source\client\leto1.c 2899: Undefined symbol '_POSIX_PATH_MAX' in function letoOrderListAdd *** 5 errors in Compile *** PS. в версии xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406) и LETODB (01/06/2009 (2008-01-31 17:00 UTC+0300 Alexander Kresin (alex/at/belacy.belgorod.su) удалось собрать LETODB.exe и RDDLETO.Lib

Pasha: Надо обновить letodb. Уже учтено это изменение в xHarbour

Oskar_Aa: Pasha, качаю по адресу http://sourceforge.net/projects/letodb/files/source/letodb-0.8.src.zip/download - или какой-нибудь другой адрес.... Спасибо.

Pasha: Архив был сделан до этих изменений Надо либо настроить CVS-клиента, как - см. http://sourceforge.net/projects/letodb/develop либо на этой же страничке зайти в browse code, и скачать include/funcleto.h

Oskar_Aa: спасибо, попробую

Oskar_Aa: Pasha, доброе утро.... Скачал include/funcleto.h Запустил Make_B32.bat - результат: MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -c -Iinclude;C:\xHARBOUR\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -oobj\b32\leto1.obj source\client\leto1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\client\leto1.c: bcc32 -c -Iinclude;C:\xHARBOUR\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -oobj\b32\letomgmn.obj source\client\letomgmn.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\client\letomgmn.c: bcc32 -c -Iinclude;C:\xHARBOUR\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -oobj\b32\common_c.obj source\common\common_c.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\common\common_c.c: Error E2356 source\common\common_c.c 81: Type mismatch in redeclaration of 'leto_writelog' Error E2344 include\funcleto.h 101: Earlier declaration of 'leto_writelog' Error E2356 source\common\common_c.c 133: Type mismatch in redeclaration of 'leto_b2n' Error E2344 include\funcleto.h 98: Earlier declaration of 'leto_b2n' Error E2356 source\common\common_c.c 147: Type mismatch in redeclaration of 'leto_n2b' Error E2344 include\funcleto.h 97: Earlier declaration of 'leto_n2b' Error E2356 source\common\common_c.c 162: Type mismatch in redeclaration of 'leto_AddLen' Error E2344 include\funcleto.h 99: Earlier declaration of 'leto_AddLen' Error E2356 source\common\common_c.c 204: Type mismatch in redeclaration of 'leto_BagCheck' Error E2344 include\funcleto.h 100: Earlier declaration of 'leto_BagCheck' Error E2356 source\common\common_c.c 240: Type mismatch in redeclaration of 'leto_byte2hexchar' Error E2344 include\funcleto.h 104: Earlier declaration of 'leto_byte2hexchar' Error E2356 source\common\common_c.c 253: Type mismatch in redeclaration of 'leto_hexchar2byte' Error E2344 include\funcleto.h 105: Earlier declaration of 'leto_hexchar2byte' *** 14 errors in Compile *** PS:Отпуск до 3/08/2009.....

Pasha: Oskar_Aa пишет: Pasha, доброе утро.... Скачал include/funcleto.h Теперь funcleto.h не соответствует остальным сырцам Надо полностью обновить letodb

PSP: Небольшой баг в утилите manage.exe: если адрес сервера ввести руками, а не выбирать из списка, получаем: Error BASE/1132 Bound error: array access Called from GOCONNECT(157) Called from (b)MAIN(92) Called from HBUTTON:ONCLICK(860) Called from (b)HBUTTON_NEW(770) Called from ONCOMMAND(512) Called from (b)(_INITSTATICS00003)(0) Called from HCONTROL:ONEVENT(226) Called from HPANEL:ONEVENT(105) Called from HWG_ACTIVATEMAINWINDOW(0) Called from HMAINWINDOW:ACTIVATE(341) Called from MAIN(115) HwGUI 2.17 Harbour 2.0.0beta2 (Rev. 11977) Date:08/13/09 Time:16:09:21 Имхо, просто переменная oApp:nItemCurr в этот момент == 0. Если выбирать из списка - всё гуд.

PSP: И исчо:

Oskar_Aa: Добрый день, вопрос разработчикам - когда выйдет обновленный релиз LETODB (совместимый с xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476)??? Спасибо.

alx_on: Привет В настоящий момент LetoDB развивается или уже заброшен?

PSP: alx_on пишет: В настоящий момент LetoDB развивается или уже заброшен? В настоящий момент LetoDB стабильно работает! :)

alx_on: PSP пишет: В настоящий момент LetoDB стабильно работает! :) Если использовать минимум функционала и для небольшого проекта, то да Я за два дня УЖЕ исправил несколько ошибок 1. SEEK, GO TOP (как и GO BOTTOM) не учитывает SCOPE (нижнюю или верхнюю) 2. DbAppend, DbRLock() не учитывают FLOCK 3. DbRLock() не снимает предыдущие блокировки В итоге все блокировки остаются и плюс все операции начинают тормозить (список блокированных записей становится огромным) еще что то...

alx_on: PSP Кстати, как впечатления от работы?

PSP: Серьезных багов я не встретил. Меня устраивает. :) То, что Вы написали выше, я не использую. Может быть Александр или Паша прокомментируют.

alx_on: PSP Сколько у Вас одновременных подключений? Как справляется с нагрузкой?

alx_on: Вот мой список исправлений: LetoDB (доработки и исправления) 1. DbAppend() сразу исполняется на сервере (плюс проверка на FLock) 2. DbRecordInfo(DBRI_LOCKED,nRecNo) - обрабатывается номер записи (ранее игнорировалось) 3. DbOrderInfo() - падало в отсутствии индекса 4. OrdCount() - теперь работает 5. Блокировки (dbrlock, flock) теперь учитывают FLock() другого пользователя 6. SEEK, DbGOTOP, DbGoBottom учитывают установленные scope

Pasha: alx_on пишет: Вот мой список исправлений: LetoDB (доработки и исправления) 1. DbAppend() сразу исполняется на сервере (плюс проверка на FLock) 2. DbRecordInfo(DBRI_LOCKED,nRecNo) - обрабатывается номер записи (ранее игнорировалось) 3. DbOrderInfo() - падало в отсутствии индекса 4. OrdCount() - теперь работает 5. Блокировки (dbrlock, flock) теперь учитывают FLock() другого пользователя 6. SEEK, DbGOTOP, DbGoBottom учитывают установленные scope Если можно, пришлите мне (на tpe2 (гав) mail . ru ) ваши исправления, я их сброшу на CVS И напишите, как вас назвать в Changelog

PSP: alx_on пишет: Сколько у Вас одновременных подключений? Как справляется с нагрузкой? Проект пока маленький. Максимум 10 пользователей. Задержек не наблюдается.

alx_on: Pasha пишет: Если можно, пришлите мне (на tpe2 (гав) mail . ru ) ваши исправления, я их сброшу на CVS В каком виде отдать? (или включите в разработчики для самостоятельного выкладывания, раз никто проектом больше не занимается) PSP пишет: Максимум 10 пользователе У нас 50 (доходит до 100 одновременно) :)

Pasha: alx_on пишет: В каком виде отдать? (или включите в разработчики для самостоятельного выкладывания, раз никто проектом больше не занимается) Администратор проекта - Александр, если есть желание поучавствовать - надо связяться с ним. Только он может добавить в список разработчиков и дать права на запись. Это только приветствуется. А так я просто обновлю исходники на CVS, и напишу, что это ваши правки

alx_on: Pasha отправил письмо

alx_on: Меня сейчас смущают несколько моментов 1. Realtions - в подчиненной базе не обновляется RECNO() (при этом OrdKeyNo правильный и запись позиционируется тоже вроде бы верно) 2. Долгие операции (на сервере), например, оптимизированный фильтр на большой базе, блокируют остальные операции (для пользователя складывается ощущение, что все зависло). Я даже думаю - не сделать ли опцию в letodb.ini для выключения оптимизации фильтров 3. DbRLockList - не работает (в принципе, не сильно важно) 4. DbRLock() - не снимает предыдущие блокировки (может поправлю сам) 5. Если индексы открываются автоматически (SET_AUTOPEN==.T.) - то установка SCOPE игнорируется (клиентская часть не информируется об открытии индексов?) PS Александр Кресин забросил проект?

alx_on: Pasha Добавил обработку OrdKeyGoto() Файлы выслал

Pasha: alx_on пишет: Добавил обработку OrdKeyGoto() Файлы выслал Спасибо. Отправил все на CVS

alkresin: alx_on пишет: 2. Долгие операции (на сервере), например, оптимизированный фильтр на большой базе, блокируют остальные операции (для пользователя складывается ощущение, что все зависло). Я даже думаю - не сделать ли опцию в letodb.ini для выключения оптимизации фильтров А что такое оптимизированный фильтр и как он реализован в letodb ? PS Александр Кресин забросил проект? Нет, не забросил. Просто иногда резко ограничиваю Интернет-активность, последнее время, к сожалению, все чаще и чаще. По поводу ваших изменений. Я категорически не согласен с тем, что dbAppend() стал сразу выполняться на сервере. Задержка его исполнения была сделана специально, чтобы ускорить добавление записи. В вашем варианте при обычной процедуре добавления: append blank replace ... commit ( , или unlock, или следующий append blank ) требуется отправить 2 команды, в то время как при старом варианте - одну.

Pasha: alkresin пишет: Я категорически не согласен с тем, что dbAppend() стал сразу выполняться на сервере. Я верну этот изменение назад. Думаю, проверку FilLock надо делать при вызове neterr()

alkresin: Думаю, проверку FilLock надо делать при вызове neterr() Не могу ничего пока сказать по этому поводу. Я не использую Flock() и поэтому не знаю нюансы, связанные с его использованием. До недавнего времени я полагал, что это то же, что открыть файл в exlusive mode, и был очень удивлен, когда узнал, что это не так :).

Pasha: Смотрим NG. NetErr() возвращает .t. в таких ситуациях: USE USE EXCLUSIVE by another process USE...EXCLUSIVE USE EXCLUSIVE or USE by another process APPEND BLANK FLOCK() or RLOCK() of LASTREC() + 1 by another user т.е., для letodb neterr() должен посылать запрос на сервер на предмет блокировок. В этом случае все равно получится 2 запроса при dbAppend: на neterr и commit. Но, если пользователь уверен, что FLock() не используется, он может не выдавать NetErr()

alx_on: alkresin пишет: А что такое оптимизированный фильтр и как он реализован в letodb ? Интересный вопрос :) Есть несложная проверка фильтра, по результату letoDB может сама на сервере отфильтровывать записи (по типу ADS), например: Простой фильтр - клиент сам проверяет выражение фильтра на каждой записи Оптимизированный - фильтр ставится на сервере требуется отправить 2 команды, в то время как при старом варианте - одну Возьмем самый простой пример: 1. (1) клиент вызвал FLock() 2. (2) клиент сделал dbappend() (успешно, ему ничего не помешало, на сервер ничего не ушло, запись НЕ заблокировалась, ошибки не произошло) теперь оба клиента уверены, что у них все хорошо чем это кончится в итоге я предсказать не берусь (в сложных вариантах непредсказуемые глюки в данных) Pasha пишет: Думаю, проверку FilLock надо делать при вызове neterr() Поменяем пример выше: первым было сделан dbappend(). Та же проблема в профиль Я считаю, что если необходимы быстрые dbappend (не используется FLock) - можно сделать некую настройку (при компиляции или в рантайме) Или блокировать FLock'ом (в этом случае, например, можно сделать быстрые dbappend)

alx_on: Pasha пишет: Но, если пользователь уверен, что FLock() не используется, он может не выдавать NetErr() Существуют и другие ошибки при добавлении записи (например, место на диске кончилось, сеть тоже кончилась:) и т.д.)

alkresin: alx_on пишет: Простой фильтр - клиент сам проверяет выражение фильтра на каждой записи Оптимизированный - фильтр ставится на сервере А, ну да, точно ... Просто есть какие-то еще оптимизированные фильтры в некоторых RDD - я подумал, что вы о них. 1. (1) клиент вызвал FLock() 2. (2) клиент сделал dbappend() (успешно, ему ничего не помешало, на сервер ничего не ушло, запись НЕ заблокировалась, ошибки не произошло) теперь оба клиента уверены, что у них все хорошо Не уверены. При реальном добавлении записи на сервере произойдет ошибка, клиенту будет послан соответствующий ответ и его программа ( если не стоит BEGIN SEQUENCE ... ) аварийно завершится. Но, конечно, проверка на NetErr() лучше, чем аварийное завершение. Я считаю, что если необходимы быстрые dbappend (не используется FLock) - можно сделать некую настройку (при компиляции или в рантайме) Согласен. Именно в runtime - какую-нибудь SetAppendMode(). Но чтоб прежний вариант ( быстрый ) стоял по умолчанию :) Существуют и другие ошибки при добавлении записи (например, место на диске кончилось, сеть тоже кончилась:) и т.д.) А вот при такого рода проблемах аварийное завершение, которое произойдет сразу после попытки записать добавленную запись на сервер, - это нормально.

alkresin: Pasha пишет: т.е., для letodb neterr() должен посылать запрос на сервер на предмет блокировок. В этом случае все равно получится 2 запроса при dbAppend: на neterr и commit. Но, если пользователь уверен, что FLock() не используется, он может не выдавать NetErr() Нет, пусть уж лучше dbAppend() посылается сразу на сервер и получает ответ, на основе которого можно выставить флаг для NetErr(). Но только при SetAppendMode( .t. )

alx_on: alkresin пишет: Не уверены. При реальном добавлении записи на сервере произойдет ошибка, клиенту будет послан соответствующий ответ и его программа ( если не стоит BEGIN SEQUENCE ... ) аварийно завершится. Это в случае, если не успели снять flock :) Но только при SetAppendMode( .t. ) Годится PS можете меня включить в список доступа на обновление letodb? :)

alkresin: Это в случае, если не успели снять flock :) А если успели, то запись успешно добавится. PS можете меня включить в список доступа на обновление letodb? Какой у вас логин на Sourceforge ?

alkresin: Pasha, а зачем вы в manage.prg изменили путь к rddleto.ch ? Оно ж так компилироваться не будет ...

alx_on: alkresin пишет: Какой у вас логин на Sourceforge ? aokhotnikov

Pasha: alkresin пишет: а зачем вы в manage.prg изменили путь к rddleto.ch ? Оно ж так компилироваться не будет ... Мне прислали это изменение Przemek'a для сборки с текущим Harbour SVN. Наверное, он собирал с помощью hbmk2. Если собирать через bld.bat, то действительно не скомпилируется

alkresin: alx_on пишет: aokhotnikov Добавлен.

alx_on: alkresin пишет: Добавлен спасибо

PSP: Чё-та у меня DBOrderInfo( DBOI_NUMBER, , cOrdName ) кажись косячит при работе с RDDLETO. Если указать в cOrdName существующее имя ордера, она возвращает его номер в списке ордеров правильно. Если же в cOrdName указать несуществующий ордер, функция возвращает число, равное количеству ордеров в файле. С OrdNumber() та же песня. А вот с RDDCDX при несуществующем cOrdName, обе функции возвращают 0. Как быть? Если можно, проверьте, плизззз...

Pasha: PSP пишет: Как быть? Если можно, проверьте, плизззз... В source\client\leto1.c вместо case DBOI_NUMBER: { hb_itemPutNI( pOrderInfo->itmResult, uiTag ); break; } надо поставить case DBOI_NUMBER: { hb_itemPutNI( pOrderInfo->itmResult, (pTagInfo) ? uiTag : 0 ); break; } я поправлю на cvs

PSP: Паша, большое спасибо! It works!

PSP: alx_on пишет: DbRLockList - не работает (в принципе, не сильно важно) Скажите, а нельзя ли сделать, чтобы заработало? Понадобилась... :)

alx_on: PSP пишет: Скажите, а нельзя ли сделать, чтобы заработало? Сделать можно все! :) А оно надо? Пример: заблокировано 10000 записей (обычная ситуация :) ) берем локи а) с клиента (хорошо, но переделка клиента и двойная работа по учету блокировок) б) с сервера (плохо, по сети минимум 50Кб на каждый вызов, вроде немного, но разом. а клиент то не один) Проще у себя сохранять в массиве (или не использовать совсем, а переделать логику программы)

PSP: alx_on пишет: Проще у себя сохранять в массиве Уже так и сделал. Хотел красивее... :) Спасибо за ответ.

PSP: Ошибка при сборке Letodb с последними Harbour nightly-sources bcc32 -c -Iinclude;J:\Job\MiniGUI\Harbour\include -d -tWM -D__WIN32__ -D__WIN_DAEMON__ -w-8075 -oobj\b32\errint.obj source\server\errint.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland source\server\errint.c: Error E2356 source\server\errint.c 66: Type mismatch in redeclaration of 'hb_errInternalRaw' Error E2344 J:\Job\MiniGUI\Harbour\include\hbapierr.h 171: Earlier declaration of 'hb_errInternalRaw' Error E2356 source\server\errint.c 96: Type mismatch in redeclaration of 'hb_errInternal' Error E2344 J:\Job\MiniGUI\Harbour\include\hbapierr.h 170: Earlier declaration of 'hb_errInternal' *** 4 errors in Compile ***

Pasha: Ошибка при сборке связана с этим изменением в Harbour: 2009-11-16 17:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbapierr.h * harbour/src/rtl/errint.c * harbour/src/rtl/errintlo.c ... * changed ULONG ulIntCode to HB_ERRCODE errCode in internal errors опять в разных версиях харборов определения одних и тех же функций разнятся :(

PSP: Наверное, лучше подождать выхода стабильной сборки Harbour. Петр говорил, что до Нового года может появиться...

Pasha: Ну это изменение назад все равно не вернут, так что приводить в соответствие letodb все равно надо Сделать это просто: в server\errint.c надо заменить определение ULONG ulIntCode на HB_ERRCODE ulIntCode Только как сделать, чтобы сохранить сборку и с предыдущими версиями, да и с xHarbour, надо подумать

PSP: Pasha пишет: Ну это изменение назад все равно не вернут Нееее, я не жду, что вернут... :) Я о том, что стоит подождать, пока сделают все изменения.

Pasha: Отправил изменения для errint. Теперь, чтобы собрать letodb для Harbour старых версий, надо будет править errint.c

PSP: Pasha пишет: Отправил изменения для errint. Теперь, чтобы собрать letodb для Harbour старых версий, надо будет править errint.c Спасибо, Паша.

PSP: Паша, можно еще просьбу? :) Добавьте, плиз, в letoRddInfo() (из leto1.c) обработку RDDI_ORDBAGEXT, чтобы можно было расширение индексов менять. Спасибо!

PSP: Уже не актуально. Сорри.

alkresin: Pasha пишет: Теперь, чтобы собрать letodb для Harbour старых версий, надо будет править errint.c Теперь не надо. Я для этих целей использую HB_VER_SVNID - очень удобно.

alkresin: Посмотрел Changelog, нашел это: 2009-10-29 19:25 UTC+0300 Alexandr Okhotnikov (alxokhotnikov/at/gmail.com) * source/client/leto1.c * source/server/letofunc.c * Increased the initial allocation of memory (the tables and users) (for tables - memory reallocation leads to falling letoDB) ... * Simultaneous launch of client parts led to the fall letoDB ... Для таблиц я не проверял ( нет у меня столько таблиц :) ), а вот для пользователей - никаких проблем при memory reallocation, так зачем было увеличивать, тем более до 1000 ? И поподробнее, пожалуйста, про "Simultaneous launch of client parts led to the fall letoDB"

alx_on: alkresin пишет: Для таблиц я не проверял ( нет у меня столько таблиц :) ), а вот для пользователей - никаких проблем при memory reallocation, так зачем было увеличивать, тем более до 1000 ? точно не помню, но вроде как тоже падало (тестировалось при 50 и более пользователях) памяти не много забирает :) alkresin пишет: И поподробнее, пожалуйста, про "Simultaneous launch of client parts led to the fall letoDB" Если (одновременно, в пределах секунд) происходит множество соединений (чай попили и резко запустили, человек десять, например)

alkresin: alx_on пишет: Если (одновременно, в пределах секунд) происходит множество соединений (чай попили и резко запустили, человек десять, например) И это теперь исправлено ? Если да, то что было не так ?

Andrey: Наверно пора список ВСЕХ функций выложить... И примерами новыми поделиться, а то что-то делается, делается, а как пользоваться, то не понятно....

alkresin: Andrey пишет: Наверно пора список ВСЕХ функций выложить... Список всех функций - в readme.txt

PSP: В последней редакции ошибки при сборке: Error E2356 source\server\errint.c 72: Type mismatch in redeclaration of 'hb_errInternalRaw' Error E2344 J:\Job\Harbour\include\hbapierr.h 171: Earlier declaration of 'hb_errInternalRaw' Error E2356 source\server\errint.c 102: Type mismatch in redeclaration of 'hb_errInternal' Error E2344 J:\Job\Harbour\include\hbapierr.h 170: Earlier declaration of 'hb_errInternal' *** 4 errors in Compile *** Используется Harbour 2.0.0 (13372).

PSP: Кто-нибудь может проверить, работает ли FLock(): у меня при попытке блокировки с помощью FLock(), она возвращает .T., но не блокирует файл. DBInfo( DBI_ISFLOCK ) возвращает .F. и все операции блокировок/изменения работают.

alkresin: В последней редакции ошибки при сборке: А HB_VER_SVNID ( см. hbverbld.h ) какой у вас ? 13372 ?

PSP: alkresin пишет: см. hbverbld.h У меня нет такого файла в Harbour. Сейчас скачал nightly sources. В них тоже нет.

gfilatov: PSP пишет: У меня нет такого файла в Harbour. Этот файл автоматически создается при сборке Харбора из сырцов

alkresin: Похоже, HB_VER_SVNID работает только для prg, так что придется использовать __HARBOUR__

PSP: Прошу прощения, может я торможу... Собрал из nightly sources. Файла нет. Я, конечно, могу поставить строку #define HB_VER_SVNID 13372 в error.c, но хочется с CVS обновления принимать...

PSP: Александр, проверьте FLock(), пожалуйста.

alkresin: PSP пишет: Я, конечно, могу поставить строку #define HB_VER_SVNID 13372 Не надо ставить. Я поправил, теперь должно собираться - у меня, во всяком случае, собирается ( Harbour Changelog: 2010-01-14 18:21 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) ) Flock() еще не смотрел, я пока работаю на летней версии letodb, не было времени разбираться с осенне-зимними изменениями.

PSP: alkresin пишет: теперь должно собираться Собралось. Flock() еще не смотрел, я пока работаю на летней версии letodb, не было времени разбираться с осенне-зимними изменениями. Я понял. Спасибо. Подожду. :)

PSP: Скажите, пожалуйста, как это работает в LetoDB? 1. DBAppend( .F. ) и DBAppend() 2. DBRLock( xRec ) и DBRLock() Имеется в виду, работает ли сохранение существующих блокирововк при вызовах DBAppend( .F. ) и DBRLock( xRec )?

PSP: И еще. Когда Share_Tables = 1, Leto_CommitTransaction() иногда (пока не понял закономерности), вываливатеся по ошибке: "Ошибка LETO/19727357 Ошибка типа данных: -101" Тот же самый код при Share_Tables = 0 работает нормально.

alx_on: PSP пишет: Имеется в виду, работает ли сохранение существующих блокирововк при вызовах DBAppend( .F. ) и DBRLock( xRec )? Должно! (по крайней мере, работало в ноябре 2009)

PSP: Т.е. в этом плане "все соответствует стандартам"? :) Значит показалось... :) Проверю еще раз. Спасибо.

spair2k: подскажите пожалуйста... я пытаюсь собрать сервер на Линхе (Ubuntu 8.04 LTS, xHaroubr 1.20 из DEB пакет взят с сервера xharbour.org) и у меня возникли проблемки. естественно пришлось переписать make_linux.sh под себя, поскольку описание путей для запуска харбора несколько отличается (спасибо сборщикам пакета). не это беда. вот что пишется в лог a2.log source/client/leto1.c: В функции ‘leto_CreateKeyExpr’ source/client/leto1.c:853: предупреждение: pointer targets in passing argument 2 of ‘(pArea)->lprfsHost->compile’ differ in signedness source/client/leto1.c: В функции ‘letoOpenConnection’ source/client/leto1.c:2395: предупреждение: pointer targets in passing argument 1 of ‘letoRemoveIpFromPath’ differ in signedness source/client/leto1.c:2422: предупреждение: pointer targets in passing argument 1 of ‘leto_getIpFromPath’ differ in signedness source/client/leto1.c:2427: предупреждение: pointer targets in passing argument 1 of ‘strrchr’ differ in signedness source/client/leto1.c:2429: предупреждение: pointer targets in passing argument 1 of ‘strrchr’ differ in signedness source/client/leto1.c: В функции ‘letoCreate’ source/client/leto1.c:2496: предупреждение: pointer targets in passing argument 1 of ‘leto_getFileFromPath’ differ in signedness source/client/leto1.c: В функции ‘letoOpen’ source/client/leto1.c:2672: предупреждение: pointer targets in passing argument 1 of ‘leto_getFileFromPath’ differ in signedness source/client/leto1.c:2678: предупреждение: pointer targets in assignment differ in signedness source/client/leto1.c:2691: предупреждение: pointer targets in passing argument 1 of ‘leto_getFileFromPath’ differ in signedness source/client/leto1.c:2750: предупреждение: pointer targets in assignment differ in signedness source/client/leto1.c: В функции ‘letoOrderCreate’ source/client/leto1.c:3235: предупреждение: passing argument 2 of ‘(pArea)->lprfsHost->compile’ discards qualifiers from pointer target type source/client/leto1.c:3256: предупреждение: pointer targets in passing argument 1 of ‘letoRemoveIpFromPath’ differ in signedness source/client/leto1.c:3260: предупреждение: несоответствие указательных типов в условном выражении source/client/leto1.c: На верхнем уровне: source/client/leto1.c:4038: ошибка: ‘DBENTRYP_SCP’ undeclared here (not in a function) source/client/leto1.c:4053: ошибка: ‘DBENTRYP_CP’ undeclared here (not in a function) source/client/leto1.c:4055: ошибка: ‘DBENTRYP_VO’ undeclared here (not in a function) source/client/leto1.c:4055: ошибка: expected ‘}’ before ‘letoCreate’ make: *** [obj/linux/leto1.o] Ошибка 1 лезть в исходники я не спец в СИ. посоветуйте, что делать?

alkresin: spair2k пишет: я пытаюсь собрать сервер на Линхе (Ubuntu 8.04 LTS, xHaroubr 1.20 из DEB пакет взят с сервера xharbour.org) и у меня возникли проблемки. Это связано с вашей версией xHarbour. Для Harbour сейчас есть средства автоопределения версии и я стараюсь их использовать, есть ли что-то аналогичное для xHarbour - не знаю. Поэтому просто откройте include/funcleto.h и раскомментируйте строку 85: #define __OLDRDD__

spair2k: alkresin пишет: #define __OLDRDD__ Сделал, попытался собрать, выдало следующее: source/server/server.prg(105) Error E0025 Error in #if expression

alkresin: source/server/server.prg(105) Error E0025 Error in #if expression А на строке 105 у вас "#if ( (HB_VER_SVNID - 0) > 11796 )" ? Если так, похоже что эта версия xHarbour не понимает такие выражения. Тогда просто закомментируйте эту и последующие 2 строчки, вплоть до #endif - все равно они не для xHarbour.

PSP: А можно попросить сделать функцию, которая бы возвращала клиенту системную дату и время компьютера (можно типа DateTime), на котором запущен сервер?

PSP: Как должна работать функция LETO_MILLISEC() ? Понятно, что подсчет миллисекунд... И, судя по исходникам, подсчет с начала года. Но у меня возвращает отрицательное число (сейчас что-то типа "-1652863174"). Причем, если вызывать в цикле, число увеличивается (т.е. стремится к нулю). Такое впечатление, что есть ошибка с типом числовой переменной и происходит отрицательное переполнение.

Pasha: Эта функция возвращает колличество миллисекунд "от царя панька", т.е. от условной даты, от которой считаются юлианские дни, до текущего момента. Получается: в сутках 86400000 миллисекунд, сейчас примерно 2500000-й юлианский день, вот результат и вылазит за пределы 32-битного целого Можно использовать, конечно, 64-битное целое, только я не возьму в толк, зачем такая функция нужна ?

PSP: Pasha пишет: Эта функция возвращает колличество миллисекунд "от царя панька", т.е. от условной даты, от которой считаются юлианские дни, до текущего момента. Да, да, да... точно. Там же в исходниках, в коде под Линукс, явно это видно. зачем такая функция нужна ? Мне нужна не имеено эта функция. Мне нужно брать дату и время (точнее, уникальный временной отпечаток, TimeStamp) для всех клиентов из одного источника (чтобы соблюдалась четкая временная последовательность операций). Мне не приходит в голову ничего лучшего, чем компьютер, где запущен сервер LetoDB. Как оттуда взять время? Вот я и стал рыться, искать. Нашел LETO_MILLISEC(). Паш, а можно ее подправить или сделать другую, которая возвратит переменную типа DateTime (yyyymmddhhmmssccc), а? Заранее спасибо.

Pasha: Понятно Но LETO_MILLISEC() выпоняется локально, так что нужное время она не вернет Функция leto_MgGetInfo() возвращает информацию с сервера, и 5-й элемент массива-результата - как раз время, прошедшее с момента запуска сервера. Это подойдет ?

PSP: Pasha пишет: Это подойдет ? Если сервер перезагрузить, отсчет пойдет сначала? Если да, то не подходит. Вполне подошло бы системное время... :) Может можно в Leto_MgGetInfo() еще один эдемент добавить? Извините за навязчивость... Спасибо.

Pasha: Может быть есть другой вариант, получать время сервера по протоколу NTP, подскажите, кто знает, как это сделать Если это делать средствами letodb (c точностю до миллисекунд), то это делается так: source\server\letofunc.c, строка 3736: sprintf( s,"+%d;%d;%d;%d;%lu;%lu;%lu;%lu;%u;%u;%s;%7.3f;%7.3f;%lu;%lu;%lu;%9.3f;", uiUsersCurr,uiUsersMax,uiTablesCurr,uiTablesMax, (leto_Date()-lStartDate)*86400+(long)(dCurrent-dStartsec), ulOperations,ulBytesSent,ulBytesRead,uiIndexCurr,uiIndexMax, (pDataPath ? pDataPath : ""),dMaxDayWait,(ulWait)? dWait/ulWait : 0, ulTransAll,ulTransOK, leto_Date(), dCurrent ); source\client\letomgmn.c, со строки 289: aInfo = hb_itemArrayNew( 17 ); for( i=1; i<=17; i++ ) 16-й и 17-й элемент массива будут соответственно дата (Long) и время: целая часть - секунды, дробная часть - миллисекунды после полуночи Если Александр не против, можно это сбросить на CVS

PSP: Паш, огромное спасибо! :) Выручил.

PSP: Pasha пишет: Если Александр не против, можно это сбросить на CVS Александр, Вы же не против? Имхо, пригодится.

PSP: Народ, я еще вас помучаю слегка, ок? Речь о блокировках при работе с транзакциями. Если при активной транзакции снять блокировку(ки), то она(и) успешно снимаются, не дожидаясь выполнения Leto_CommitTransaction(). Соответственно, когда наступает очередь Leto_CommitTransaction(), прога вываливается по ошибке из-за попытки писать в незаблокированную запись. Это фича или баг? По идее-то все действия, производимые с базой после Leto_BeginTransaction(), должны делаться в Leto_CommitTransaction() или я не прав?

PSP: PSP пишет: Речь о блокировках при работе с транзакциями. Если при активной транзакции снять блокировку(ки), то она(и) успешно снимаются, не дожидаясь выполнения Leto_CommitTransaction(). Соответственно, когда наступает очередь Leto_CommitTransaction(), прога вываливается по ошибке из-за попытки писать в незаблокированную запись. Это фича или баг? По идее-то все действия, производимые с базой после Leto_BeginTransaction(), должны делаться в Leto_CommitTransaction() или я не прав? Неужто никто не расскажет?

Pasha: Транзакции делал Александр. Попробуйте написать ему напрямую

PSP: Pasha пишет: Транзакции делал Александр. Попробуйте написать ему напрямую Спасибо.

alkresin: Речь о блокировках при работе с транзакциями. Повторю здесь то, что писал Сергею по email. Если при активной транзакции снять блокировку(ки), то она(и) успешно снимаются, не дожидаясь выполнения Leto_CommitTransaction(). При попытке разблокировке записи во время транзакции должна выскочить ошибка "LETO/1031 Syntax Error". По идее-то все действия, производимые с базой после Leto_BeginTransaction(), должны делаться в Leto_CommitTransaction() или я не прав? Не все, а только добавление, удаление, модификация записи. Некоторые операции вообще запрещены во время транзакции, в том числе и снятие блокировки. Кстати, если вызвать Leto_CommitTransaction( .t. ) вот так, с параметром .t., все записи будут по ее окончании разблокированы автоматически. ... Я взял за основу рекомендации из руководства к ADS: File locks and/or record locks must be acquired on data before it can be updated. Once data locks are acquired, they are maintained throughout the entire transaction to ensure that the updates can be made to the database during the commit of the transaction. Record and file locking is best performed before a transaction begins. If an update needs to be made to a record in order to complete the transaction, and the lock operation on that record is attempted during the transaction and is unsuccessful, the corresponding update cannot be performed. The application will most likely need to roll back the transaction. All previous update and insert operations performed prior to the failed data lock will be rolled back due to poor transaction programming. If all explicit data locks are acquired before a transaction begins, unnecessary rollbacks will be prevented. Explicit data locking during a transaction is not recommended, but is supported. Some data locking behavioral differences exist when data locks are performed during a transaction. Review the "Advantage TPS Special Conditions" section if data locking must be done during a transaction. Хотя здесь не запрещается категорически блокировать записи во время транзакции и ничего не говорится про деблокирование, но логика ясна и, мне кажется, разумна: 1. Подготовка транзакции: блокировки, сбор данных для последующей записи; 2. Осуществление транзакции; 3. Деблокировка. Такая последовательность обеспечивает успешное проведение транзакции, практически гарантирует, что она будет вся осуществлена. .... А как вам вот такой вариант ( я давно подумывал о нем, но все руки не доходят, да и практической необходимости не было ): Добавить в Leto_BeginTransaction() параметр, котрый определяет эту транзакцию, как "автоблокировочную" - т.е. все необходимые блокировки делаются сервером при выполнении Leto_CommitTransaction(). Это повышает риск неудачного завершения транзакции, теперь надо обязательно проверять код возврата Leto_CommitTransaction() и повторять ее в случае неудачи, но упрощает подготовку к транзакции и заметно ускоряет ее.

alkresin: Pasha пишет: ... 16-й и 17-й элемент массива будут соответственно дата (Long) и время: целая часть - секунды, дробная часть - миллисекунды после полуночи Если Александр не против, можно это сбросить на CVS Мне кажется, что лучше это сделать отдельной функцией, что-то вроде: HB_FUNC( LETO_MGGETTIME ) { if( pCurrentConn ) { if( leto_DataSendRecv( pCurrentConn, "mgmt;03;\r\n", 0 ) ) { PHB_ITEM temp; PHB_ITEM aInfo; char szData[32]; char * ptr = leto_firstchar(); int i; if( *(ptr-1) == '+' ) { aInfo = hb_itemArrayNew( 2 ); for( i=1; i<=2; i++ ) { if( !leto_getCmdItem( &ptr, szData ) ) { hb_itemReturn( aInfo ); hb_itemRelease( aInfo ); return; } ptr ++; temp = hb_itemPutCL( NULL, szData, strlen(szData) ); hb_itemArrayPut( aInfo, i, temp ); hb_itemRelease( temp ); } hb_itemReturn( aInfo ); hb_itemRelease( aInfo ); } } } } ну и соответственно в letofunc: case '3': { ... Если вы не возражаете, сбросьте на CVS, пожалуйста.

Pasha: Хорошо, сброшу

PSP: alkresin пишет: Я взял за основу рекомендации из руководства к ADS: O'kay, я согласен с этим. Спасибо. :)

PSP: alkresin пишет: А как вам вот такой вариант ( я давно подумывал о нем, но все руки не доходят, да и практической необходимости не было ): Добавить в Leto_BeginTransaction() параметр, котрый определяет эту транзакцию, как "автоблокировочную" - т.е. все необходимые блокировки делаются сервером при выполнении Leto_CommitTransaction(). Это повышает риск неудачного завершения транзакции, теперь надо обязательно проверять код возврата Leto_CommitTransaction() и повторять ее в случае неудачи, но упрощает подготовку к транзакции и заметно ускоряет ее. Ваша идея мне нравится. Единственное, "авторазблокировка" не должна касаться записей, заблокированных до начала транзакции. А повтор транзакции в cлучае неудачи - не проблема, имхо. Проще один раз проверить код возврата Leto_CommitTransaction(), чем проверять при подготовке к транзакции каждый RLock(). Это - мое мнение.

Andrey: Обращаюсь к PSP ! Так как вы разбираетесь с транзакциями, очень прошу (я думаю и другие поддержат) сделать небольшой пример с пояснениями, как нужно правильно делать эти операции... Потратьте чуть-чуть времени для всех нас ...

Dima: Andrey Из NG по ADS Смысл транзакций в Leto DB Server , вероятно тот же , или я вопроса не понял ? :) BEGIN TRANSACTION Определяет начало транзакции ------------------------------------------------------------------------------ Синтаксис BEGIN TRANSACTION Описание Эта команда отмечает начало Advantage TPS-транзакции. Из той точки Вашего приложения, где расположена команда BEGIN TRANSACTION, каждая встреченная команда APPEND или REPLACE, вставленная перед соответс- твующей командой COMMIT TRANSACTION или ROLLBACK TRANSACTION, будет считаться одной транзакцией. Учтите: Текущая рабочая область должна использоваться Advantage RDD для того, чтобы работали Advantage TPS-команды или функции. Если Вы вводите Advantage TPS-команду или функцию не в рабочей области, ис- пользуемой Advantage RDD, Вы получите ошибку 6034 - "Для транзакций требуется рабочая область Advantage" ("Advantage workarea required for transaction"). Как только выполнится команда BEGIN TRANSACTION, любые изменения (REPLACE и APPEND), произведенные с базой данных, будут помещены в журнал транзакций. Другие пользователи, использующие ту же базу дан- ных, не увидят этих изменений до тех пор, пока не завершится транзак- ция. Когда это произойдет, изменения запишутся в базу данных и индек- сы. Например, если Вы в примере, описанном ниже, остановили отладчик на операторе COMMIT TRANSACTION, другие пользователи этих двух баз дан- ных не смогут увидеть результатов команд APPEND и REPLACE пока Вы не пройдете COMMIT TRANSACTION. Для них запись будет содержать первона- чальные значения. Добавление записей не будет видно остальным. В пределах транзакции могут быть произведены изменения только над те- ми таблицами, которые расположены на том же файл-сервере. Пример В этом примере производится блокировка необходимой записи в первой таблице - CUSTOMER.DBF. Если блокировка происходит успешно, начинает- ся транзакция, в пределах которой производятся изменения в двух таб- лицах. После выполнения команд REPLACE, команда COMMIT TRANSACTION физически передает изменения сетевой ОС, которая производит физичес- кую запись данных на жесткий диск. Как упоминалось ранее, код между командами BEGIN TRANSACTION и COMMIT TRANSACTION должен содержать только команды REPLACE и APPEND. В этом случае транзакция точно описана и будет выполнена. Если между коман- дами BEGIN TRANSACTION и COMMIT TRANSACTION присутствует небольшое количество другого кода, то увеличивается вероятность того, что тран- закция завершится с ошибкой и потребуется откат транзакции. // Обеспечим блокировку первой базы данных и добавим необходимые записи SELECT CUSTOMER IF !RLock() Alert( "Невозможно заблокировать запись в CUSTOMER для транзакции" ) RETURN( .F. ) ENDIF // Начало транзакции BEGIN TRANSACTION // Модификация полей в текущей записи из CUSTOMER.DBF SELECT CUSTOMER REPLACE c_lname WITH cLastName REPLACE c_fname WITH cFirstName REPLACE c_add1 WITH cAdd1 REPLACE c_city WITH cCity REPLACE c_state WITH cState REPLACE c_zip WITH cZip // Добавление 2 записей в ORDER.DBF и редактирование // соответствующей информации APPEND BLANK REPLACE o_ordernum WITH cOrderNum REPLACE o_orddate WITH dOrdDate REPLACE o_sales WITH cSalesRep REPLACE o_terms WITH cTerms REPLACE o_amount WITH nAmount REPLACE o_salestax WITH nSalesTac APPEND BLANK REPLACE ol_ordernum WITH cOrderNum REPLACE ol_itemnum WITH cItemNum REPLACE ol_descr WITH cItemDescr REPLACE ol_cost WITH nCost REPLACE ol_numof WITH nNumItems REPLACE ol_subtotal WITH nSubTotal // Завершение транзакции COMMIT TRANSACTION

PSP: В общем-то Dima уже ответил. Добавлю, что для меня возможность использовать транзакции была решающим фактором для использования сервера LetoDB. Транзакция либо выполняется полностью, либо не выполняется вообще. Т.е., если в момент выполнения транзакции (между BeginTransaction и CommitTransaction) с рабочей станцией что-то случилось (вырубилось питание, случилась run-time error и т.п.), сервер не запишет в таблицы ошибочные или неполные данные. Соответственно, таблицы и индексы не повредятся. Это очень удобно в плане целостности данных. Как-то так...

PSP: Pasha пишет: Хорошо, сброшу Еще не сбрасывал?

Pasha: PSP пишет: Еще не сбрасывал? Только что сбросил: 2009-01-30 21:40 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/letomgmn.c * source/server/letofunc.c * Readme.txt + added LETO_MGGETTIME function. It's return array with server date and time (seconds after midnight): {dDate, nSeconds} Не стал возвращать одну переменную типа DateTime, в харборе функция DateTime() не возвращает миллисеунды, а они, как я понимаю, нужны.

PSP: Pasha пишет: Не стал возвращать одну переменную типа DateTime, в харборе функция DateTime() не возвращает миллисеунды, а они, как я понимаю, нужны. Конечно нужны. Все правильно. Спасибо большое!

Pasha: К слову. Непонятно, почему в харборе(ах) в функции DateTime() обрезаны миллисекунды. Разрядность double позволяел хранить и юлианские дни в целой части, и секунды с миллисекундами в дробной. Вот аналог DateTime() с миллисекундами: #include "hbapi.h" #include "hbdate.h" HB_FUNC( DATETIME2 ) { int iYear, iMonth, iDay, iHour, iMinute; double dSeconds; hb_dateToday( &iYear, &iMonth, &iDay ); dSeconds = hb_dateSeconds( ); iHour = (int) (dSeconds / 3600); iMinute = (int) (dSeconds / 60) - iHour*60; dSeconds -= iHour*3600 + iMinute * 60; hb_retdt( iYear, iMonth, iDay, iHour, iMinute, dSeconds, 0 ); }



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