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

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

Pasha: Немного доработал документацию к letodb

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

AlexMyr: Паша, эти нюансы тоже хорошо бы в readme* описать.

Pasha: AlexMyr пишет: Паша, эти нюансы тоже хорошо бы в readme* описать. Согласен, напишу

AlexMyr: Паша, предлагаю адаптировать к harbour доке: [pre2] /* $DOC$ * $TEMPLATE$ * Function * $NAME$ * LETO_FRENAME( ) * $CATEGORY$ * * $SUBCATEGORY$ * * $ONELINER$ * Renames a file * $SYNTAX$ * LETO_FRENAME( cFileName, cFileNewName ) --> -1 if failed * $ARGUMENTS$ * <cFileName> Old filenarne to he changed * <cFileNewName> New filename * $RETURNS$ * <nSuccess> If sucessful, a 0 will be returned otherwise, * a -1 will be returned. * $DESCRIPTION$ * This function renames the specified file <cFileName> to <cFileNewName>. * If the file specified in <cNewFile> exists or the file is open, * the function will be unable to rename the file. If the function * is unable to complete its operation,it will return a value of -1. * If it is able to rename the file, the return value for the function * will be 0. A call to LETO_FERROR() function will give additional infor- * mation about any error found. * $EXAMPLES$ * nResult := LETO_FRENAME( "x.txt", "x1.txt" ) * IF nResult < 0 * ? "File could not be renamed." * ENDIF * $STATUS$ * R * $COMPLIANCE$ * * $FILES$ * Library is letodb * $SEEALSO$ * LETO_FERASE(),LETO_FERROR(),LETO_FILE() * $END$ */[/pre2]


Pasha: AlexMyr пишет: Паша, предлагаю адаптировать к harbour доке: Принципиальных возражений конечно нет, но... это же надо все сделать, а когда - не знаю. А делать надо к тому же в 2-х экземплярах. Это мне еще повезло, что я португальского не знаю, а то пришлось бы 3-й экземпляр доки поддерживать.

AlexMyr: Pasha пишет: Принципиальных возражений конечно нет, но... это же надо все сделать, а когда - не знаю. Так как спешки большой нет, то я могу взять на себя эти ф-ии LETO_FERASE(),LETO_FERROR(),LETO_FILE(), сделаю diff файл и выложу, потом внесем правки если надо. Может тогда уже в отдельный файл затолкать letofile.txt?

Pasha: AlexMyr пишет: Так как спешки большой нет, то я могу взять на себя эти ф-ии LETO_FERASE(),LETO_FERROR(),LETO_FILE(), сделаю diff файл и выложу, потом внесем правки если надо. Может тогда уже в отдельный файл затолкать letofile.txt? Да спешки конечно нет. Можно создать в проекте папки doc\en, doc\ru, и туда выкладывать описание функций по разделам, примерно как это сделано в contrib\hbct\doc, файловые функции как раз пойдут в letofile.txt А в readme оставить краткий перечень функций Жаль, что А.Кресин не откликается, добавил бы вас в девелоперы. Я ему кстати в феврале писал, и даже получил от него ответ, но только один раз, больше он не отвечал.

AlexMyr: Pasha пишет: Жаль, что А.Кресин не откликается в hwgui он появился в 06.06.2012, внес изменения о снова молчит.

Pasha: Выложил пример LetoDB COM сервера: utils\olelsrv letosrv может использоваться для доступа к LetoDB из любых приложений, не только из харбора. Пока, конечно, это только "зародыш", а не полноценный сервер. Его еще надо нагрузить методами. Да и не со всем я еще разобрался, почему-то не работает метод OnError для непосредственного доступа к полям.

AlexMyr: Неприятная ситуация снова (пропали данные в базе), уже писал про нее, сейчас повторилась - суть следующая, letodb крутится на win98 (круглосуточно), там же запущена прога, к-я собирает данные с весов и записывает в базу, в какой-то момент комп завис, перезагрузка, и из базы пропали данные до даты когда последний раз перезапускалась прога, а прогу перезапускал 26.06.2012, и получилось что с 04.07 по 26.06 данных нету. Вот кусок кода где записываю в базу[pre2] leto_BeginTransaction() dbAppend() field -> res_str := res_vagy field -> res_date := Date() field -> res_time := Time() field -> res_vaga := nVaga leto_CommitTransaction()[/pre2] может что надо дописать? Получается, что на диск не сбрасывает, но такого быть не может И что делать?

Pasha: Я предполагаю, что эта ситауция связана с настройкой Optimize=1 в letodb.ini При этом на сервере выставляется set hardcommit off. При такой настройке сервер работает значительно быстрее, но данные на диск сбрасываются не сразу, и при внезапном падении сервера возможна подобная ситуация. Можно, конечно, выключить эту настройку, сервер будет работать помедленнее, но данные на диск будут сбрасываться сразу, вернее, такая команда поступит в windows, а в windows есть еще своя буферизация. Можно поступить по-другому: по leto_CommitTransaction() принудительно сбрасывать буфера для всех рабочих областей пользователя.

AlexMyr: В readme указано Optimize = 0 - if 1, SET HARDCOMMIT OFF 0 по умолчанию, правильно? Вот мой конф. файл: [pre2]DataPath = c:\cars\ Default_Driver = CDX EnableFileFunc = 1 Share_Tables = 0[/pre2] т.е. Optimize тут не влияет, так?

Pasha: AlexMyr пишет: т.е. Optimize тут не влияет, так? Да, не влияет. Значит, дело в буферизации windows, letodb выдает flush сразу. Надо пробовать, добавлять записи, нажимать на кнопку reset и смотреть на результат.

AlexMyr: Pasha пишет: нажимать на кнопку reset и смотреть на результат. винт жалко попробую достать старый комп, там потренеруюсь.

PSP: Паш, как-то не верится, что винда больше недели буфера на диск не записывала...

AlexMyr: Еще забыл заметить, посмотрел на файл базы, так дата файла тоже была 26.06.2012 года, вариант что прога не работала, отпадает, юзера каждый день смотрят на данные с этой базы и сразу бы сказали, т.к. по данным с весов выписывается накладная.

Pasha: AlexMyr пишет: Паш, как-то не верится, что винда больше недели буфера на диск не записывала... Погонял тест, посмотрел код. Увидел, что если делать обновление без транзакции, то все в порядке. А с транзакцией не выдается flush, поэтому на диск она сразу не сбрасывается, и висит в буфере rdd на сервере. Добавлю принудительный flush, да еще без различия к настройке Optimize, чтобы с гарантией.

AlexMyr: Паша, спасибо, будем работать дальше

Pasha: Некоторые rdd-команды не требуют получения результата на клиенте. Это к примеру set filter to, set scope, вызов leto_setSkipBuffer() Тем не менее, для каждой из них клиент выдает отдельный запрос серверу. В связи с этим возникла идея буферизации таких запросов. К примеру, последовательность: set filter to ... set scope.. leto_setSkipBuffer(...) go top Требует 4 запросов к серверу. Можно 3 первых запроса не передавать серверу сразу, а накапливать в буфере. Передавать этот блок запросов можно тогда, когда будет выдан запрос, требующий получения результата, или запрос для другой рабочей области, или команда управления. А на сервере обрабатывать эти запросы последовательно в одном пакете. Насколько я знаю, в ads подобной фичи нет. Такая оптимизация будет полезной для тонкого клиента. Какие могут быть при этом подводные камни ?

alex_II: Помогите решить проблему! Использую: Harbour+LetoDB+MiniGUI+TSBrowse В одном из дочерних окон открываю в TSBrowse таблицу с CDX-индексом. В индексе 4 тега, между которыми могу переключаться и TSBrowse все прекрасно показывает, но стоит окну с таблицей потерять фокус то при возвращении обратно вне зависимости от того какой тег был активным всегда устанавливается активным ПЕРВЫЙ по порядку тег.

Dima: alex_II Возможно тут дело не в LetoDB а в TSBrowse



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