Автор | Сообщение |
Pasha
|
| Администратор
|
Пост N: 2416
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.06.12 18:14. Заголовок: Leto DB Server (продолжение 8)
Немного доработал документацию к letodb
|
|
|
Ответов - 273
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 2256
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.12 20:16. Заголовок: Pasha пишет: Немног..
Pasha пишет: цитата: | Немного доработал документацию к letodb |
| Спасибо.
|
|
|
alex_II
|
| |
Пост N: 67
Зарегистрирован: 12.07.06
|
|
Отправлено: 26.06.12 09:11. Заголовок: Ошибка при создании индекса
Использую CDX Если в индексом выражении используется фунция Doy(), получаю ошибку: Error LETO/1001 Неизвестная функция: e:\Sou.may\Letodb\Data\letomay\oplata INDEX ON Doy(dtopl) TO oplata
|
|
|
Pasha
|
| Администратор
|
Пост N: 2419
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.06.12 09:27. Заголовок: alex_II пишет: Если..
alex_II пишет: цитата: | Если в индексом выражении используется фунция Doy(), получаю ошибку: |
| DOY - это функция из ct. Сервер естественно собран без этой функции, как и без любых других специфических функций, которые могут встречаться в индексных выражениях. Добавьте в source\server.prg строку: request doy В этой строке перечислите все необходимые Вам функции, и пересоберите сервер. В скрипт сборки сервера (letodb.hbp) в этом случае необходимо будет включить библиотеку hbct, и (возможно) другие сторонние библиотеки: -lhbct
|
|
|
alex_II
|
| |
Пост N: 68
Зарегистрирован: 12.07.06
|
|
Отправлено: 26.06.12 09:38. Заголовок: Спасибо, буду пробов..
Спасибо, буду пробовать
|
|
|
alex_II
|
| |
Пост N: 69
Зарегистрирован: 12.07.06
|
|
Отправлено: 26.06.12 10:36. Заголовок: Библиотеку hbct подк..
Библиотеку hbct подключил подправив файл makefile.bc и всё заработало. Через скрипт сборки сервера letodb.hbp не хватило тяму. Pasha можно пример на пальцах в студию?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2421
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.06.12 10:51. Заголовок: alex_II пишет: Pash..
alex_II пишет: цитата: | Pasha можно пример на пальцах в студию? |
| Сделайте батник сборки: set path=%path%;d:\bcc55\bin \harbour\bin\win\bcc\hbmk2 letodb.hbp \harbour\bin\win\bcc\hbmk2 rddleto.hbp или set path=%path%;d:\mingw32\bin \harbour\bin\win\mingw\hbmk2 letodb.hbp \harbour\bin\win\mingw\hbmk2 rddleto.hbp или set path=%path%;d:\mingw64\bin \harbour\bin\win\mingw64\hbmk2 letodb.hbp \harbour\bin\win\mingw64\hbmk2 rddleto.hbp
|
|
|
alex_II
|
| |
Пост N: 70
Зарегистрирован: 12.07.06
|
|
Отправлено: 26.06.12 11:27. Заголовок: Пардон, но я имел вв..
Пардон, но я имел ввиду другое Как в файле letodb.hbp описывать дополнительные библиотеки Ниже приведено содержимое этого файла -inc -obin/letodb -iinclude -n -w -q0 -es2 #-warn=max -prgflag={unix}-D__LINUX_DAEMON__ -prgflag={unix}-D__LINUX__ #-prgflag={win}-D__WIN_DAEMON__ -prgflag={win}-D__WIN_SERVICE__ -cflag={allmsvc}-D_CRT_SECURE_NO_DEPRECATE -cflag={win}-D__WIN_SERVICE__ -gui -mt source/server/server.prg source/server/errorsys.prg source/server/errint.c {unix}source/server/leto_lnx.c {win}source/server/leto_win.c source/server/letoacc.c source/server/letovars.c source/server/letofunc.c source/server/leto_2.c source/common/blowfish.c source/common/common_c.c #source/common/hbip.c source/common/common.prg
|
|
|
Pasha
|
| Администратор
|
Пост N: 2422
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.06.12 11:55. Заголовок: Просто добавить стро..
Просто добавить строку: -l<имя библиотеки> в произвольное место этого скрипта, лучше перед списком модулей
|
|
|
alex_II
|
| |
Пост N: 71
Зарегистрирован: 12.07.06
|
|
Отправлено: 26.06.12 12:09. Заголовок: Понял, спасибо..
Понял, спасибо
|
|
|
AlexMyr
|
| |
Пост N: 524
Зарегистрирован: 11.06.10
|
|
Отправлено: 26.06.12 17:20. Заголовок: варнинги... ../../...
варнинги... ../../../../source/client/leto1.c:1816:24: warning: 'pData' may be used uninitialized in this function [-Wuninitialized] ../../../../source/client/leto1.c:1829:12: warning: 'uiKeyLen' may be used uninitialized in this function [-Wuninitialized] ... ../../../../source/server/letofunc.c:6110:10: warning: 'pArea' may be used uninitialized in this function [-Wuninitialized] Инфа: Letodb /* $Id: Changelog,v 1.350.2.68 2012/06/22 14:17:23 ptsarenko Exp $ */ Harbour Version: Harbour 3.2.0dev (Rev. 17728) Compiler: MinGW GNU C 4.6.2 (32-bit) Platform: Windows XP 5.1.2600 Service Pack 3
|
|
|
Pasha
|
| Администратор
|
Пост N: 2423
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.06.12 18:17. Заголовок: AlexMyr пишет: варн..
AlexMyr пишет: цитата: | варнинги... ../../../../source/client/leto1.c:1816:24: warning: 'pData' may be used uninitialized in this function [-Wuninitialized] ../../../../source/client/leto1.c:1829:12: warning: 'uiKeyLen' may be used uninitialized in this function [-Wuninitialized] ... ../../../../source/server/letofunc.c:6110:10: warning: 'pArea' may be used uninitialized in this function [-Wuninitialized] |
| Да я эти варнинги знаю давно, не знаю как их убрать. Компилятор не может раскрутить сложную логику, и видит неинициализированные переменные, хотя по алгоритму они инициализируются в любом случае. А рабочий алгоритм переписывать не хочется. Я кое-что поправил для custom-индексов, вызовы OrdKeyAdd, OrdKeyDel
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 2424
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.06.12 18:28. Заголовок: У меня есть предложе..
У меня есть предложение к уже использующим letodb. Прочтите документацию (readme.txt), какая она есть в нынешнем виде, и попробуйте в ней что-нибудь дополнить. Может быть, там не отражен какой-то момент, который был существенным для вас. Можно дополнить какой-либо раздел, или создать новый. Это было бы полезно тем, кто только планирует использовать этот продукт. Выкладывать можно сюда. На русском или английском языке.
|
|
|
AlexMyr
|
| |
Пост N: 525
Зарегистрирован: 11.06.10
|
|
Отправлено: 27.06.12 09:55. Заголовок: 1. Пункт 2.5 (readme..
1. Пункт 2.5 (readme.txt) гласит, что при сборке letodb можно собрать и тесты опция -target, НО для этого нужен файл hbmk.hbm в папке letodb с таким содержимым: rddleto.hbc без этого файла тесты не соберутся. 2. Нужно добавить, что letodb для windows может быть собран в двух вариантах - 1) служба, 2) демон (процесс). И по умолчанию letodb собирается как служба, из чего вытекает, что letodb надо установить как службу, и потом ее запустить.
|
|
|
AlexMyr
|
| |
Пост N: 526
Зарегистрирован: 11.06.10
|
|
Отправлено: 27.06.12 10:03. Заголовок: 3. 5. Соединен..
3. 5. Соединение с сервером клиентских программ Чтобы сконнектиться с сервером, прежде всего необходимо прилинковать rddleto.lib (Windows) или librddleto.a (Linux) к своему приложению ... предлагаю упростить: Чтобы сконнектиться с сервером, прежде всего необходимо прилинковать библиотеку rddleto к своему приложению ...
|
|
|
Pasha
|
| Администратор
|
Пост N: 2426
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.06.12 21:47. Заголовок: Спасибо, добавил в д..
Спасибо, добавил в доку. Меня удивило, что сервер еще можно собрать как демон под Windows. Сам я это не делал, с тех пор как была добавлена поддержка службы.
|
|
|
alex_II
|
| |
Пост N: 74
Зарегистрирован: 12.07.06
|
|
Отправлено: 02.07.12 10:29. Заголовок: Не могу переименоват..
Не могу переименовать файл В ini-файле сервера указан путь: DataPath = e:\Sou.may\Letodb\Data В программе указан путь: Path_Dbf := '//localhost:2812/LetoMay/' Leto_Frename(Path_Dbf+'zar1.dbf', Path_Dbf+'zar3.dbf') возвращает -1 Leto_Frename(Path_Dbf+'zar1.dbf', 'zar3.dbf') отрабатывает и переносит файл на уровень вверх в папку Data
|
|
|
AlexMyr
|
| |
Пост N: 528
Зарегистрирован: 11.06.10
|
|
Отправлено: 02.07.12 11:56. Заголовок: alex_II пишет: Не м..
alex_II пишет: цитата: | Не могу переименовать файл |
| Читаем readme.txt или readme_rus.txt п.5, из последнего выдержка: Если задан параметр 'DataPath' в конфигурационном файле сервера, и он имеет непустое значение, необходимо указывать не полный путь к файлу на сервере, а путь относительный ( относительно значению 'DataPath' ). Например, если необходимо открыть файл test.dbf, который расположен на сервере 192.168.5.22 в каталоге /data/mydir и значение параметра 'DataPath' ( в файле конфигурации сервере letodb.ini ) '/data', синтаксис должен быть таким: USE "//192.168.5.22:2812/mydir/test" Если сервер не запущен или Вы указали неверный путь, будет сгенерирована ошибка открытия. Возможно проверить доступность сервера перед открытием файлов вызовом функции leto_Connect( cAddress ), которая вернет -1 в случае неудачной попытки: IF leto_Connect( "//192.168.5.22:2812/mydir/" ) == -1 Alert( "Can't connect to server ..." ) ENDIF Я думаю тут все ясно.
|
|
|
alex_II
|
| |
Пост N: 75
Зарегистрирован: 12.07.06
|
|
Отправлено: 02.07.12 12:52. Заголовок: Ничего не ясно Перем..
Ничего не ясно Переменная Path_Dbf := '//localhost:2812/LetoMay/' как раз и описывает относительный путь и цитирование лишний раз файла readme понимания ситуации не добавляет. Если я неверно описываю путь доступа к файлу, почему тогда без ошибок отрабатывают другие функции: Leto_File(Path_Dbf+'zar.dbf') Leto_Ferase(Path_Dbf+'zar.dbf') ?
|
|
|
AlexMyr
|
| |
Пост N: 529
Зарегистрирован: 11.06.10
|
|
Отправлено: 02.07.12 12:59. Заголовок: alex_II пишет: и ц..
alex_II пишет: цитата: | и цитирование лишний раз файла readme понимания ситуации не добавляет. |
|
потому как мало кто его читает Дайте самодостаточный пример и конкретно где лежат файлы из Вашего поста выше не ясно
|
|
|
Pasha
|
| Администратор
|
Пост N: 2428
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.12 13:31. Заголовок: alex_II пишет: Не м..
alex_II пишет: цитата: | Не могу переименовать файл В ini-файле сервера указан путь: DataPath = e:\Sou.may\Letodb\Data В программе указан путь: Path_Dbf := '//localhost:2812/LetoMay/' Leto_Frename(Path_Dbf+'zar1.dbf', Path_Dbf+'zar3.dbf') возвращает -1 |
| 2-й параметр надо указывать без строки коннента, т.е: Path_Srv := '//localhost:2812' Path_Dbf := '/LetoMay/' Leto_Frename(Path_Srv + Path_Dbf+'zar1.dbf', Path_Dbf+'zar3.dbf') цитата: | Leto_Frename(Path_Dbf+'zar1.dbf', 'zar3.dbf') отрабатывает и переносит файл на уровень вверх в папку Data |
| Так и должно быть, поскольку все файловые операции на сервере выполняются относительно DataPath
|
|
|
AlexMyr
|
| |
Пост N: 530
Зарегистрирован: 11.06.10
|
|
Отправлено: 02.07.12 13:39. Заголовок: Паша, эти нюансы тож..
Паша, эти нюансы тоже хорошо бы в readme* описать.
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 2429
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.12 14:03. Заголовок: AlexMyr пишет: Паша..
AlexMyr пишет: цитата: | Паша, эти нюансы тоже хорошо бы в readme* описать. |
| Согласен, напишу
|
|
|
AlexMyr
|
| |
Пост N: 531
Зарегистрирован: 11.06.10
|
|
Отправлено: 02.07.12 14:51. Заголовок: Паша, предлагаю адап..
Паша, предлагаю адаптировать к harbour доке: /* $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$ */
|
|
|
Pasha
|
| Администратор
|
Пост N: 2430
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.12 15:34. Заголовок: AlexMyr пишет: Паша..
AlexMyr пишет: цитата: | Паша, предлагаю адаптировать к harbour доке: |
| Принципиальных возражений конечно нет, но... это же надо все сделать, а когда - не знаю. А делать надо к тому же в 2-х экземплярах. Это мне еще повезло, что я португальского не знаю, а то пришлось бы 3-й экземпляр доки поддерживать.
|
|
|
AlexMyr
|
| |
Пост N: 532
Зарегистрирован: 11.06.10
|
|
Отправлено: 02.07.12 15:42. Заголовок: Pasha пишет: Принци..
Pasha пишет: цитата: | Принципиальных возражений конечно нет, но... это же надо все сделать, а когда - не знаю. |
|
Так как спешки большой нет, то я могу взять на себя эти ф-ии LETO_FERASE(),LETO_FERROR(),LETO_FILE(), сделаю diff файл и выложу, потом внесем правки если надо. Может тогда уже в отдельный файл затолкать letofile.txt?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2431
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.12 15:57. Заголовок: AlexMyr пишет: Так ..
AlexMyr пишет: цитата: | Так как спешки большой нет, то я могу взять на себя эти ф-ии LETO_FERASE(),LETO_FERROR(),LETO_FILE(), сделаю diff файл и выложу, потом внесем правки если надо. Может тогда уже в отдельный файл затолкать letofile.txt? |
| Да спешки конечно нет. Можно создать в проекте папки doc\en, doc\ru, и туда выкладывать описание функций по разделам, примерно как это сделано в contrib\hbct\doc, файловые функции как раз пойдут в letofile.txt А в readme оставить краткий перечень функций Жаль, что А.Кресин не откликается, добавил бы вас в девелоперы. Я ему кстати в феврале писал, и даже получил от него ответ, но только один раз, больше он не отвечал.
|
|
|
AlexMyr
|
| |
Пост N: 533
Зарегистрирован: 11.06.10
|
|
Отправлено: 02.07.12 16:26. Заголовок: Pasha пишет: Жаль, ..
Pasha пишет: цитата: | Жаль, что А.Кресин не откликается |
|
в hwgui он появился в 06.06.2012, внес изменения о снова молчит.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2432
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.12 18:14. Заголовок: Выложил пример LetoD..
Выложил пример LetoDB COM сервера: utils\olelsrv letosrv может использоваться для доступа к LetoDB из любых приложений, не только из харбора. Пока, конечно, это только "зародыш", а не полноценный сервер. Его еще надо нагрузить методами. Да и не со всем я еще разобрался, почему-то не работает метод OnError для непосредственного доступа к полям.
|
|
|
AlexMyr
|
| |
Пост N: 538
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.07.12 13:16. Заголовок: Неприятная ситуация ..
Неприятная ситуация снова (пропали данные в базе), уже писал про нее, сейчас повторилась - суть следующая, letodb крутится на win98 (круглосуточно), там же запущена прога, к-я собирает данные с весов и записывает в базу, в какой-то момент комп завис, перезагрузка, и из базы пропали данные до даты когда последний раз перезапускалась прога, а прогу перезапускал 26.06.2012, и получилось что с 04.07 по 26.06 данных нету. Вот кусок кода где записываю в базу leto_BeginTransaction() dbAppend() field -> res_str := res_vagy field -> res_date := Date() field -> res_time := Time() field -> res_vaga := nVaga leto_CommitTransaction() может что надо дописать? Получается, что на диск не сбрасывает, но такого быть не может И что делать?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2435
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.07.12 15:00. Заголовок: Я предполагаю, что э..
Я предполагаю, что эта ситауция связана с настройкой Optimize=1 в letodb.ini При этом на сервере выставляется set hardcommit off. При такой настройке сервер работает значительно быстрее, но данные на диск сбрасываются не сразу, и при внезапном падении сервера возможна подобная ситуация. Можно, конечно, выключить эту настройку, сервер будет работать помедленнее, но данные на диск будут сбрасываться сразу, вернее, такая команда поступит в windows, а в windows есть еще своя буферизация. Можно поступить по-другому: по leto_CommitTransaction() принудительно сбрасывать буфера для всех рабочих областей пользователя.
|
|
|
AlexMyr
|
| |
Пост N: 539
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.07.12 15:08. Заголовок: В readme указано ..
В readme указано Optimize = 0 - if 1, SET HARDCOMMIT OFF 0 по умолчанию, правильно? Вот мой конф. файл: DataPath = c:\cars\ Default_Driver = CDX EnableFileFunc = 1 Share_Tables = 0 т.е. Optimize тут не влияет, так?
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 2436
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.07.12 15:17. Заголовок: AlexMyr пишет: т.е...
AlexMyr пишет: цитата: | т.е. Optimize тут не влияет, так? |
| Да, не влияет. Значит, дело в буферизации windows, letodb выдает flush сразу. Надо пробовать, добавлять записи, нажимать на кнопку reset и смотреть на результат.
|
|
|
AlexMyr
|
| |
Пост N: 540
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.07.12 15:21. Заголовок: Pasha пишет: нажима..
Pasha пишет: цитата: | нажимать на кнопку reset и смотреть на результат. |
|
винт жалко попробую достать старый комп, там потренеруюсь.
|
|
|
PSP
|
| постоянный участник
|
Пост N: 783
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.07.12 15:23. Заголовок: Паш, как-то не верит..
Паш, как-то не верится, что винда больше недели буфера на диск не записывала...
|
|
|
AlexMyr
|
| |
Пост N: 541
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.07.12 15:31. Заголовок: Еще забыл заметить, ..
Еще забыл заметить, посмотрел на файл базы, так дата файла тоже была 26.06.2012 года, вариант что прога не работала, отпадает, юзера каждый день смотрят на данные с этой базы и сразу бы сказали, т.к. по данным с весов выписывается накладная.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2437
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.07.12 16:12. Заголовок: AlexMyr пишет: Паш,..
AlexMyr пишет: цитата: | Паш, как-то не верится, что винда больше недели буфера на диск не записывала... |
| Погонял тест, посмотрел код. Увидел, что если делать обновление без транзакции, то все в порядке. А с транзакцией не выдается flush, поэтому на диск она сразу не сбрасывается, и висит в буфере rdd на сервере. Добавлю принудительный flush, да еще без различия к настройке Optimize, чтобы с гарантией.
|
|
|
AlexMyr
|
| |
Пост N: 542
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.07.12 16:26. Заголовок: Паша, спасибо, будем..
Паша, спасибо, будем работать дальше
|
|
|
Pasha
|
| Администратор
|
Пост N: 2443
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.07.12 10:56. Заголовок: Некоторые rdd-команд..
Некоторые rdd-команды не требуют получения результата на клиенте. Это к примеру set filter to, set scope, вызов leto_setSkipBuffer() Тем не менее, для каждой из них клиент выдает отдельный запрос серверу. В связи с этим возникла идея буферизации таких запросов. К примеру, последовательность: set filter to ... set scope.. leto_setSkipBuffer(...) go top Требует 4 запросов к серверу. Можно 3 первых запроса не передавать серверу сразу, а накапливать в буфере. Передавать этот блок запросов можно тогда, когда будет выдан запрос, требующий получения результата, или запрос для другой рабочей области, или команда управления. А на сервере обрабатывать эти запросы последовательно в одном пакете. Насколько я знаю, в ads подобной фичи нет. Такая оптимизация будет полезной для тонкого клиента. Какие могут быть при этом подводные камни ?
|
|
|
alex_II
|
| |
Пост N: 76
Зарегистрирован: 12.07.06
|
|
Отправлено: 20.07.12 11:42. Заголовок: Помогите решить проб..
Помогите решить проблему! Использую: Harbour+LetoDB+MiniGUI+TSBrowse В одном из дочерних окон открываю в TSBrowse таблицу с CDX-индексом. В индексе 4 тега, между которыми могу переключаться и TSBrowse все прекрасно показывает, но стоит окну с таблицей потерять фокус то при возвращении обратно вне зависимости от того какой тег был активным всегда устанавливается активным ПЕРВЫЙ по порядку тег.
|
|
|
Dima
|
| |
Пост N: 2463
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.07.12 12:08. Заголовок: alex_II Возможно ту..
alex_II Возможно тут дело не в LetoDB а в TSBrowse
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2276
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.07.12 13:05. Заголовок: А почему ссылки на L..
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 2455
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.07.12 13:31. Заголовок: Andrey пишет: А поч..
Andrey пишет: Там перечисляются только библиотеки, которые входят в поставку Harbour. А letodb - это отдельный проект. У меня была мысль передать letodb в harbour\contrib, как один из вариантов, поскольку положение с проектом сейчас явно ненормальное, даже если кто-то захочет присоединиться к проекту - он не сможет этого сделать. Но тогда может быть прекращена поддержка клиентской библиотеки для xHarbour, да и делать это без согласия автора проекта не хотелось бы.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2278
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.07.12 13:38. Заголовок: Все равно надо там р..
Все равно надо там разместить ссылки на LetoDB и выложить что-нибудь, пускай знают что есть классный продукт под Harbour. И решить вопрос с автором проекта...
|
|
|
Pasha
|
| Администратор
|
Пост N: 2456
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.07.12 13:44. Заголовок: Dima пишет: Возможн..
Dima пишет: цитата: | Возможно тут дело не в LetoDB а в TSBrowse |
| Скорее всего, надо сделать что-то вроде: oB:bTagOrder := {|| ordNumber()} для восстановления тэга при получении фокуса
|
|
|
Pasha
|
| Администратор
|
Пост N: 2457
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.07.12 13:49. Заголовок: Andrey пишет: Все р..
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2279
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.07.12 15:55. Заголовок: Pasha пишет: Разве ..
Pasha пишет: Да хотя бы туда.
|
|
|
alex_II
|
| |
Пост N: 77
Зарегистрирован: 12.07.06
|
|
Отправлено: 21.07.12 06:13. Заголовок: Pasha пишет: Скорее..
Pasha пишет: цитата: | Скорее всего, надо сделать что-то вроде: oB:bTagOrder := {|| ordNumber()} для восстановления тэга при получении фокуса |
| Спасибо за подсказку, помогло! Проверил вариант без letoDB, получил тот же глюк, значит дело в TSBrowse
|
|
|
Pasha
|
| Администратор
|
Пост N: 2463
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.08.12 18:09. Заголовок: Новости проекта: 1...
Новости проекта: 1. Если открывается большая БД, содержащая много (десятки и сотни) таблиц, появилась возможность открывать все таблицы одним запросом, а не множеством запросов, каждый отдельный для команды use Для этого надо вызвать udf-функцию UDF_OpenTables, и передать ей массив с описанием открываемых таблиц. Эта функция вернет массив строк, каждый элемент которого надо передать команде use вместо имени таблицы. При этом use не будет делать запрос к серверу, а заполнит данные rdd, используя элемент массива. Использование алиаса при этом обязательно. Пример: if leto_UDFExist( "UDF_OpenTables" ) aAreas := leto_UDF( ""UDF_OpenTables"", {{"table1",, .t.}, {"table2",, .t.}, {"table3",, .t.}} ) use (aAreas[1]) alias table1 shared new use (aAreas[2]) alias table2 shared new use (aAreas[3]) alias table3 shared new else use table1 alias table1 shared new use table2 alias table2 shared new use table3 alias table3 shared new endif 2. Добавлена функция на сервере leto_RecLockList( nUserStru, aRecNo ) --> lSuccess Функция leto_RecLockList блокирует записи с номерами, указанными в массиве aRecNo. Если блокировка какой-либо записи не удалась, блокировки снимаются, и возвращается результат .F. Эту функцию можно вызывать на сервере в модуле letoudf.prg, или с клиента вызовом leto_UDF( "leto_RecLockList", aRecNo ) Вместо множества вызовов dbRLock можно использовать один вызов leto_RecLockList. У меня при некоторых операциях блокируется свыше тысячи записей, и новая функция позволит резко сократить количество запросов к серверу.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2291
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.08.12 11:40. Заголовок: Хорошее решение ! К..
Хорошее решение ! Классно !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2468
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.08.12 08:34. Заголовок: Вопрос касается выде..
Вопрос касается выделения памяти для списка блокированных записей в letodb сервере В dbfcdx/dbfntx список построен как простой массив значений типа unsigned long (это номера блокированных записей) При блокировке записи память под массив перевыделяется (его размер увеличивается), при снятии блокировки - размер уменьшается В letodb сделано примерно аналогично, только память под массив увеличивается порциями по 50 элементов, а при снятии блокировки - размер не уменьшается. В letodb это может привести к коллизиям при многопоточной обработке: при перевыделении памяти адрес массива может измениться, а в это время другой поток может к нему обращаться. Предложите другой способ организации этого списка. Пока я вижу только простейший список со ссылкой на следующий элемент. Может быть есть способ поэффективнее ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2469
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.08.12 10:14. Заголовок: Остановился на однон..
Остановился на однонаправленном отсортированном списке. Структура такая: typedef struct { ULONG ulRecNo; PLETO_LOCK_ITEM pNext; } LETO_LOCK_ITEM, *PLETO_LOCK_ITEM; typedef struct { BOOL bLocked; PLETO_LOCK_ITEM pItem; } LETO_LOCK_LIST, *PLETO_LOCK_LIST; 3 функции для нее: Поиск в списке static BOOL letoIsRecInList( PLETO_LOCK_LIST pLockList, ULONG ulRecNo ) Добавление в список static void letoAddRecToList( PLETO_LOCK_LIST pLockList, ULONG ulRecNo ) Удаление из списка static void letoDelRecFromList( PLETO_LOCK_LIST pLockList, ULONG ulRecNo ) Ну и функция очистки всего списка. Каждая функция перед тем, как работать со списком, выполняет цикл с проверкой pLockList->bLocked: static void letoLockWait( PLETO_LOCK_LIST pLockList ) { while( pLockList->bLocked ) ; } 2 последние функции перед добавлением/удалением элемента блокируют список: pLockList->bLocked = TRUE; После чего разблокируют его. Вопрос. Не может ли быть здесь коллизий при многопоточной работе ? Пусть один поток что-то делает со списком, и заблокировал его. Другой поток перед поиском в списке вызывает цикл letoLockWait( pLockList ); Зацикливания, даже теоретически, не произойдет ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2475
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.08.12 15:44. Заголовок: Переделал списки бло..
Переделал списки блокированных записей, списки индексов, рабочих областей вместо массивов, которые могут перевыделяться в памяти, на однонаправленные списки. Но все-таки, меня терзают смутные сомнения. Если один поток что-то делает со списком, добавляет и в него элемент или удаляет, то надо на время операции блокировать список для доступа на чтение и запись другим потокам, во избежание неприятностей в виде гпф. А как это сделать ? Я в список добавляю 2 флага: bLockRead и bLockWrite: typedef struct { BOOL bLockRead; BOOL bLockWrite; ULONG ulSize; PLETO_LIST_ITEM pItem; } LETO_LIST, *PLETO_LIST; и перед доступом к списку проверяю эти флаги: void letoWaitWrite( PLETO_LIST pLockList ) { while( pLockList->bLockWrite || pLockList->bLockRead ) pLockList->bLockWrite += 0 ; } void letoWaitRead( PLETO_LIST pLockList ) { while( pLockList->bLockWrite ) pLockList->bLockWrite += 0 ; } Но эта зараза, а именно компилятор C, оптимизирует эти циклы, и ничего не делает. Специально дизассемблировал на предмет посмотреть. Оно не понимает, что к структуре имеет доступ другой поток, который может изменять значение флагов Как сделать блокировку списка ? Может быть, у потоков есть стандартный механизм для этого ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2301
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.08.12 23:01. Заголовок: Pasha спасибо за сов..
Pasha спасибо за совершенствование LetoDB. Жалко что не могу помочь в таких сложных решениях. Поспрашивай, может на других Си-шных форумах помогут.
|
|
|
PSP
|
| постоянный участник
|
Пост N: 789
Зарегистрирован: 27.01.07
|
|
Отправлено: 23.08.12 08:34. Заголовок: Ну, а если в тело ци..
Ну, а если в тело цикла вставить дополнительные строки, не нарушающие логики, которые смогут убедить компилятор не оптимизировать цикл? К примеру: typedef struct { BOOL bLockRead; BOOL bLockWrite; int nTemp; ULONG ulSize; PLETO_LIST_ITEM pItem; } LETO_LIST, *PLETO_LIST; void letoWaitWrite( PLETO_LIST pLockList ) { while( pLockList->bLockWrite || pLockList->bLockRead ) { pLockList->bLockWrite += 0 ; if ( pLockList->nTemp ) { pLockList->nTemp := 0 ;} else { pLockList->nTemp := 1 ;} } } Upd: опечатка. Вместо pLockList->i д.б. pLockList->nTemp. Исправил.
|
|
|
santy
|
| |
Пост N: 93
Зарегистрирован: 16.12.08
|
|
Отправлено: 23.08.12 10:23. Заголовок: Паша, а если попроб..
|
|
|
Pasha
|
| Администратор
|
Пост N: 2476
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.08.12 12:57. Заголовок: santy пишет: Паша, ..
santy пишет: цитата: | Паша, а если попробовать использовать мьютекси. |
| Спасибо, это то что надо. Я чувствовал, что делаю что-то не то. Надо использовать мютексы.
|
|
|
AlexMyr
|
| |
Пост N: 584
Зарегистрирован: 11.06.10
|
|
Отправлено: 21.09.12 10:08. Заголовок: Хочу узнать дату пос..
Хочу узнать дату последнего обновления базы, dbinfo(4) возвращает пустую дату. Что делать?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2484
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.09.12 14:07. Заголовок: Сейчас LastUpdate не..
Сейчас LastUpdate не передается с сервера. Надо будет добавить. Только это связано с изменением протокола, вот думаю, как сделать, чтобы новые версии сервера и клиента при этом работали со старыми.
|
|
|
AlexMyr
|
| |
Пост N: 587
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 08:52. Заголовок: AlexMyr пишет: Сейч..
Pasha пишет: цитата: | Сейчас LastUpdate не передается с сервера. Надо будет добавить. |
|
Спасибо, работает!
|
|
|
AlexMyr
|
| |
Пост N: 588
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 09:44. Заголовок: Паша! Команда append..
Паша! Команда append from я так понимаю не сработает с letodb сервера на локальный диск, надо через массив записи переганять?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2485
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.09.12 10:00. Заголовок: Почему не сработает ..
Почему не сработает ? Должна. Но, поскольку используются разные rdd, то драйвер надо указать в команде напрямую. Если в файл, открытый через dbfcdx, и надо добавить записи с letodb, то append from (cFile) via LETO где cFile должен быть с параметрами коннекта Если наоборот, то: append from (cFile) via DBFCDX
|
|
|
AlexMyr
|
| |
Пост N: 589
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 10:10. Заголовок: Пробовал сначала без..
Пробовал сначала без параметров коннекта, вылетал по ошибке. Добавил параметры коннекта, ошибок нет, но и записи не переносятся, буду копать дальше.
|
|
|
AlexMyr
|
| |
Пост N: 590
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 10:18. Заголовок: Еще один момент: dbc..
Еще один момент: dbcreate("temp",{...},"DBFCDX",.T.) файл создался но не открывается, надо dbuseare("temp",...) использовать.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2486
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.09.12 10:24. Заголовок: AlexMyr пишет: Проб..
AlexMyr пишет: цитата: | Пробовал сначала без параметров коннекта, вылетал по ошибке. Добавил параметры коннекта, ошибок нет, но и записи не переносятся, буду копать дальше. |
| Так файл открывается через dbfcdx, и записи добавляются с leto ? А насчет временного файла, надо еще алиас в dbCreate указывать
|
|
|
AlexMyr
|
| |
Пост N: 591
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 10:31. Заголовок: Pasha пишет: Так фа..
Pasha пишет: цитата: | Так файл открывается через dbfcdx, и записи добавляются с leto ? |
| основная задача на leto, потом копируются записи с leto в локальную базу, открытую через dbfcdx, и потом локальная база улетает по почте. Pasha пишет: цитата: | А насчет временного файла, надо еще алиас в dbCreate указывать |
| спасибо, попробую
|
|
|
AlexMyr
|
| |
Пост N: 592
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 10:42. Заголовок: Вот что выяснил, есл..
Вот что выяснил, если создать локально файл и добавить одну пустую запись в него, то с leto все нормально переноситься по append from, если не добавлять, а сразу после dbcreate() делать append from, то добавляется одна запись в базу на leto. Вот!
|
|
|
Pasha
|
| Администратор
|
Пост N: 2487
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.09.12 10:53. Заголовок: Не очень понятно. Ал..
Не очень понятно. Алексей, а можно код показать, что не так работает ?
|
|
|
AlexMyr
|
| |
Пост N: 593
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 10:55. Заголовок: Pasha пишет: Не оче..
Pasha пишет: цитата: | Не очень понятно. Алексей, а можно код показать, что не так работает ? |
|
Сейчас попробую минимальный примерчик собрать.
|
|
|
AlexMyr
|
| |
Пост N: 594
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 11:20. Заголовок: На тестовом примере ..
На тестовом примере в базу на leto записи не добавляются, видно где-то у меня в коде что-то не так. Дальше, если dbappend() закомментировано, записи не переносятся, если раскомментировано, то все нормально. Function Main Local cPath := "//127.0.0.1:2812/temp/" REQUEST DBFCDX REQUEST LETO RDDSETDEFAULT( "LETO" ) ? "Start" dbCreate( cPath+"Nakl1", { {"NORD","N",10,0},{"DORD","D",8,0},{"SUMMA","N",12,2} } ) ? "Files has been created" use ( cPath+"Nakl1" ) New ? "Files has been opened and indexed" AddNakl( 1, Date(), { 1400.5, 28632.28, 800.51 } ) AddNakl( 2, Date(), { 58003, 930.5 } ) dbcloseall() altd() dbCreate("temp1",{ {"NORD","N",10,0},{"DORD","D",8,0},{"SUMMA","N",12,2} },"DBFCDX",.T.,"temp1") // dbappend() // uncomment for append from append from (cPath+"nakl1") via "LETO" Return Nil Function AddNakl( n_ord, d_ord, aSumm ) Local i, sumAll := 0 leto_BeginTransaction() select NAKL1 append blank replace NORD with n_ord, DORD with d_ord, SUMMA with sumAll leto_CommitTransaction() Return .T.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2488
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.09.12 11:31. Заголовок: AlexMyr пишет: Даль..
AlexMyr пишет: цитата: | Дальше, если dbappend() закомментировано, записи не переносятся, если раскомментировано, то все нормально. |
| Что очень странно, так как в файл открыт через dbfcdx, и команду append from отрабатывает dbfcdx, а не leto dbfcdx должен просто открыть файл через указанный драйвер, и в цикле по записям добавить их. Вставлю-ка я в свой dbedit выполнение append from через другой драйвер, и посмотрю, как он отработает.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2489
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.09.12 12:47. Заголовок: Я нашел глюк в leto ..
Я нашел глюк в leto для случая копирования записей между разными драйверами client\leto1.c строка 4026 надо добавить проверку: if( !leto_CheckArea( pAreaDst ) || вечером скину
|
|
|
AlexMyr
|
| |
Пост N: 596
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.09.12 12:49. Заголовок: Pasha пишет: вечеро..
Pasha пишет: будем ждать!
|
|
|
AlexMyr
|
| |
Пост N: 598
Зарегистрирован: 11.06.10
|
|
Отправлено: 25.09.12 08:39. Заголовок: Pasha Спасибо, работ..
Pasha Спасибо, работает
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 110
Зарегистрирован: 15.09.05
|
|
Отправлено: 12.11.12 11:43. Заголовок: PHP Extention для LetoDB ?
Привет Всем кто использует LetoDB ! Сервер LetoDB работает отлично ! У меня все программы уже на етой базе. Все работает безпроблемно . Самый большой клиент у меня имеет 25 р. мест. за год работы не наблюдались никакие пропажи информации и нарушение логической стр. данных , благодаря транзакций. Большое спасибо г-ну Крезину и Паше конечно за професионально проделную работу ! Но вот клиенты начали заекатся на возможность подключeния к базе через WEB . Так как я не знаток C у меня вопрос к Паше : Возможно ли написание PHP Extention для LetoDB ? Если да - Я БУДУ Хорошим тестером :) P.S. тут я читал как пишется такая щука
|
|
|
AlexMyr
|
| |
Пост N: 636
Зарегистрирован: 11.06.10
|
|
Отправлено: 12.11.12 11:53. Заголовок: sashaBG пишет: Но в..
sashaBG пишет: цитата: | Но вот клиенты начали заекатся на возможность подключeния к базе через WEB |
|
Но клиентская прога и есть своеобразный браузер для letodb, а через web как по мне то это уже лишнее.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2398
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.11.12 12:35. Заголовок: sashaBG пишет: за г..
sashaBG пишет: цитата: | за год работы не наблюдались никакие пропажи информации и нарушение логической стр. данных , благодаря транзакций. |
| Будьте так добры, напишите схематично как правильно надо писать транзакции. Заранее спасибо.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2525
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.11.12 12:59. Заголовок: sashaBG пишет: Возм..
sashaBG пишет: цитата: | Возможно ли написание PHP Extention для LetoDB ? |
| Из php можно обращаться к COM-серверу. А пример LetoDB COM сервера я делал: см. utils\olesrv Правда, это будет работать только в windows Может быть, такой вариант подойдет ?
|
|
|
alkresin
|
| moderator
|
Пост N: 427
Зарегистрирован: 06.07.06
|
|
Отправлено: 12.11.12 13:34. Заголовок: sashaBG пишет: Но в..
sashaBG пишет: цитата: | Но вот клиенты начали заекатся на возможность подключeния к базе через WEB . Так как я не знаток C у меня вопрос к Паше : Возможно ли написание PHP Extention для LetoDB ? |
| Я не Паша, но постараюсь ответить. Чтобы сделать PHP Extention, надо сначала существенно переработать код Leto RDD - отделить, собственно, RDD от функций, осуществляющих обмен с сервером - создать слой, API, к которому можно обращаться из не-Харборовских программ. Это вполне реальная, но довольно трудоемкая задача. Я бы вам посоветовал для подключения через Web использовать CGI интерфейс. Компьютеры сейчас довольно мощные - потянут, если только у вас не сотни одновременых подключений через Web. Я сам использую CGI, Javascript и Ajax, все нормально работает.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2526
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.11.12 13:58. Заголовок: Александр, а что есл..
Александр, а что если прикрутить запросы query из dbc к letodb ? Хотя бы в качестве readonly запросов
|
|
|
AlexMyr
|
| |
Пост N: 639
Зарегистрирован: 11.06.10
|
|
Отправлено: 12.11.12 14:01. Заголовок: Andrey пишет: Будьт..
Andrey пишет: цитата: | Будьте так добры, напишите схематично как правильно надо писать транзакции. |
| Смотрим пример letodb\tests\test_ta.prg
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 111
Зарегистрирован: 15.09.05
|
|
Отправлено: 12.11.12 14:27. Заголовок: Спасибо
Спасибо за ответы ! Pasha пишет: цитата: | Правда, это будет работать только в windows |
| Паша ты имееш виду IIS Сервер или можно и через например XAMPP под Windows? Андрей вот етот код у меня сейчас работает сначало немножко раскажу конкретно етот Документ сохраняется в двух файлах (Нулевая так я назвал ) 0-ая часть ( или Master часть) и N-ая часть (или Detail часть) //Начало транзакции-------------------------------------------- LETO_BEGINTRANSACTION( ) lSaveN := _N_SAVE() //Сохраняем (Detail часть) IF lNew0 // если у нас новы документ или новая Master часть lSave0 := _0_SAVE() // Сохранеям Master часть SET_SCOPE() // Устанавливаем зону видимости от Мастер к Детаил ENDIF IF lSaveN .and. lSave0 // если все удачно сохранилось IF ! LETO_COMMITTRANSACTION() msgstop( "НЕУДАЧНАЯ Транзакция !" ) ENDIF ELSE LETO_ROLLBACK() //откат ENDIF //Конец транзакции-------------------------------------------- Пока так работает К спецам: Если что-то не так СОВЕТУЙТЕ ! P.S. Не могу отформатировать текст :(
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2401
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.11.12 14:59. Заголовок: alkresin пишет: Я б..
alkresin пишет: цитата: | Я бы вам посоветовал для подключения через Web использовать CGI интерфейс. Компьютеры сейчас довольно мощные - потянут, если только у вас не сотни одновременых подключений через Web. Я сам использую CGI, Javascript и Ajax, все нормально работает. |
| Очень интересно ! Давно хочу такое... Никто и не ответил мне в этой теме http://clipper.borda.ru/?1-3-20-00000218-000-0-0-1342804573 А чуть подробней по "подключению через Web используя CGI интерфейс" можно отписаться в другой теме, чтобы здесь не "мусорить" ! Заранее спасибо за ответ !
|
|
|
alkresin
|
| moderator
|
Пост N: 429
Зарегистрирован: 06.07.06
|
|
Отправлено: 12.11.12 15:11. Заголовок: Pasha пишет: Алекса..
Pasha пишет: цитата: | Александр, а что если прикрутить запросы query из dbc к letodb ? Хотя бы в качестве readonly запросов |
| Я так и хотел сделать - может, помните, писал когда-то о планах реализовать SQL - запросы в letodb. Даже начал переводить тот фрагмент кода из dbc на C - но потом что-то отвлекло и забыл про это дело...
|
|
|
santy
|
| |
Пост N: 129
Зарегистрирован: 16.12.08
|
|
Отправлено: 12.11.12 15:33. Заголовок: Вот это интересно. S..
Вот это интересно. SQL на letodb - прекрасная идея. Потом уже на уровне ядра (x)Harbour.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2527
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.11.12 16:49. Заголовок: alkresin пишет: Я ..
alkresin пишет: цитата: | Я так и хотел сделать - может, помните, писал когда-то о планах реализовать SQL - запросы в letodb. Даже начал переводить тот фрагмент кода из dbc на C - но потом что-то отвлекло и забыл про это дело... |
| Я планировал это сделать в виде отдельного rdd - наследника DBFCDX/DBFNTX. Для простых запросов по одной или нескольким таблицам в этом rdd можно было бы добавлять/удалять поля (FIELD), для более сложных - формировать таблицу в памяти (временный файл) и заполнять ее. Этот rdd можно прикрутить к серверу letodb, а клиентская часть leto в таком случае почти не меняется.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2529
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.11.12 14:46. Заголовок: Александр, а можно л..
Александр, а можно ли перенести проект с CVS на SVN ?
|
|
|
alkresin
|
| moderator
|
Пост N: 435
Зарегистрирован: 06.07.06
|
|
Отправлено: 13.11.12 15:25. Заголовок: Pasha пишет: Алекса..
Pasha пишет: цитата: | Александр, а можно ли перенести проект с CVS на SVN ? |
| А как это делается ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2530
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.11.12 15:34. Заголовок: Не знаю. Наверное, н..
Не знаю. Наверное, надо спросить в harbour dev, они же переносили головной проект. В любом случае у меня прав на это нет.
|
|
|
santy
|
| |
Пост N: 131
Зарегистрирован: 16.12.08
|
|
Отправлено: 13.11.12 15:46. Заголовок: Заходите под админом..
|
|
|
alkresin
|
| moderator
|
Пост N: 437
Зарегистрирован: 06.07.06
|
|
Отправлено: 13.11.12 17:55. Заголовок: Pasha пишет: Не зна..
Pasha пишет: цитата: | Не знаю. Наверное, надо спросить в harbour dev, они же переносили головной проект. В любом случае у меня прав на это нет. |
| Теперь есть, я вас добавил в project admins.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2531
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.11.12 20:42. Заголовок: Спасибо !..
Спасибо !
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 112
Зарегистрирован: 15.09.05
|
|
Отправлено: 20.11.12 12:28. Заголовок: ТРАНЗАКЦИИ
Вот финкция из примерчика TEST_TA.PRG: Function AddNakl( n_ord, d_ord, aSumm ) Local i, sumAll := 0 leto_BeginTransaction() select NAKL2 for i := 1 to Len( aSumm ) append blank replace NORD with n_ord, DORD with d_ord, NPROD with i, SUMMA with aSumm sumAll += aSumm next select NAKL1 append blank replace NORD with n_ord, DORD with d_ord, SUMMA with sumAll leto_CommitTransaction() // Я добавил етот кусок select NAKL2 leto_commit() ?"NAKL2 recno() ->",recno() // Выходит 0 select NAKL1 leto_commit() ?"NAKL1 recno() ->",recno()// здесь тоже 0 Return .T. А нужно показать номер новодобавленой записи !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 38
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.11.12 14:46. Заголовок: Andrey пишет: Очень ..
Andrey пишет: цитата: | Очень интересно ! Давно хочу такое... |
| Путь к этому: - подобрать под себя CMS - изучить - научиться подключать CGI интерфейс в CMS - возможно подправить под себя CMS Мы используем CMS с MySql и php. CGI интерфейс hb2.0 с использованием scripta (см.hb20\examples\hscript\hscript.prg). Базы на LetoDb и cdx. CMS обеспечивает внешний вид (css), меню, данные пользователя, пароли ... В CGI из MySql подчитываются данные сессии (user, password, css-ы и т.д.) Все нормально работает. Задача: Ввод жильцами данных по счетчикам учета воды в квартплате
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2411
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.11.12 17:05. Заголовок: SergKis Чтобы не ра..
|
|
|
Pasha
|
| Администратор
|
Пост N: 2546
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.11.12 17:30. Заголовок: sashaBG пишет: А ну..
sashaBG пишет: цитата: | А нужно показать номер новодобавленой записи ! |
| Вызов leto_commit в данном случае не поможет, он будет просто проигнорирован. Сейчас leto_CommitTransaction просто возвращает результат выполнения: успешно или нет. Надо добавить возврат массива номеров последних добавленных записей для каждой рабочей области, которая задействована в транзакции. А на клиенте обрабатывать этот массив, устанавливая номера добавленных записей. Сделаю.
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 113
Зарегистрирован: 15.09.05
|
|
Отправлено: 20.11.12 22:53. Заголовок: Стоит ли ?
Паша, наверное не стой усложнять leto_CommitTransaction Все дело было потому что в моем проекте после добавления нового документа я показываю в статус линии данные о текущей записи и так замаетил что после транзакции добавления нового документа показывает 0. я пока в своем проекте справился делая после leto_CommitTransaction , DBSEEK(cNewDOK) и все о.к. После етого показывает все нормально . Спасибо !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2547
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.11.12 08:54. Заголовок: Дело в том, что если..
Дело в том, что если после транзакции указатель остается на добавленной записи, то будут неправильно работать операции навигации по этой рабоче области (skip). Так что лучше эти данные все-таки передавать и отрабатывать их.
|
|
|
alkresin
|
| moderator
|
Пост N: 448
Зарегистрирован: 06.07.06
|
|
Отправлено: 21.11.12 09:08. Заголовок: Pasha пишет: Дело в..
Pasha пишет: цитата: | Дело в том, что если после транзакции указатель остается на добавленной записи, то будут неправильно работать операции навигации по этой рабоче области (skip). Так что лучше эти данные все-таки передавать и отрабатывать их. |
| А как именно обрабатывать ? По-моему, указатель записи после транзакции должен быть там же, где и в том случае, если этот фрагмент кода исполняется без транзакции. Т.е., если речь идеь о добавлении группы записей, то - на последней добавленной записи.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2548
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.11.12 09:24. Заголовок: Алгоритм примерно та..
Алгоритм примерно такой. Сервер пусть формирует массив вида ulAreaID, ulRecNo, ... и заполняет при добавлении последний номер добавленной записи (только один для р/о) Клиент после транзакции просматривает этот массив, и, если для указанной в нем р/о номер записи на клиенте 0, заменяет его на принятый номер записи. Иначе получится, что если после транзакции с добавленной записью клиент выполняет какое-то действие, то сервер ее просто не найдет.
|
|
|
alkresin
|
| moderator
|
Пост N: 449
Зарегистрирован: 06.07.06
|
|
Отправлено: 21.11.12 10:34. Заголовок: А почему о массиве р..
А почему о массиве речь идет, а не об одной последней добавленной записи ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2549
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.11.12 12:24. Заголовок: Так я и имел в ввиду..
Так я и имел в ввиду номер последней добавленной записи для каждой р/о, в которой производилось добавление во время транзакции. Если на клиенте текущей останется добавленная запись, то для нее заменять номер записи 0 на полученный с сервера. Надо еще подумать, какая еще информация нужна клиенту по результату транзакции, чтобы сразу все сделать.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2563
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.11.12 14:47. Заголовок: На сайте проекта я д..
На сайте проекта я добавил сборку letodb для windows для различных компиляторов: Cервер и менеджер - для bcc55, mingw и mingw64. Клиентская библиотека: Harbour - для bcc55, mingw, mingw64 и watcom, xHarbour - для bcc55.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2439
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.11.12 22:05. Заголовок: Pasha пишет: сборку..
Pasha пишет: цитата: | сборку letodb для windows |
| А сборка для Linux можно будет в дальнейшем сделать ? А то хочется сделать сервер на Ubuntu, а клиента под windows. Спасибо ОГРОМНОЕ Pasha за твой труд !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2564
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.11.12 08:49. Заголовок: Andrey пишет: А сбо..
Andrey пишет: цитата: | А сборка для Linux можно будет в дальнейшем сделать ? А то хочется сделать сервер на Ubuntu, а клиента под windows. |
| Как появится под рукой Ubuntu, сделаю А самому сделать не получается ?
|
|
|
dimao
|
| |
Пост N: 67
Зарегистрирован: 14.01.09
|
|
Отправлено: 30.11.12 08:57. Заголовок: Я когда-то пробовал запустить LETODB на UBUNTU
|
|
|
alex_II
|
| |
Пост N: 81
Зарегистрирован: 12.07.06
|
|
Отправлено: 04.12.12 07:17. Заголовок: Pasha пишет: На сай..
Pasha пишет: цитата: | На сайте проекта я добавил сборку letodb |
| Не могу выкачать дистрибутив, просит пароль Раньше всё было нормально
|
|
|
Pasha
|
| Администратор
|
Пост N: 2580
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.12.12 08:53. Заголовок: Пароль на скачивание..
|
|
|
AlexMyr
|
| |
Пост N: 655
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.12.12 09:25. Заголовок: Вчера и сегодня тоже..
Вчера и сегодня тоже не могу: cvs [login aborted]: recv() from server letodb.cvs.sourceforge.net: Connection r eset by peer C:\dev\_svn>cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P -r rel-1-mt letodb cvs [checkout aborted]: recv() from server letodb.cvs.sourceforge.net: Connectio n reset by peer
|
|
|
Pasha
|
| Администратор
|
Пост N: 2581
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.12.12 09:41. Заголовок: Новости с sf от 28.1..
Новости с sf от 28.11.2012: http://sourceforge.net/blog/viewvc-and-anonymous-pserver-access-for-cvs-offline/ ViewVC and anonymous pserver access for CVS offline Greetings, Since the CVS downtime yesterday, we’ve been experiencing poor performance for CVS. As such, we’ve disabled ViewVC and anonymous pserver access for the time being to prioritize developer read/write access while we address the performance issue. We do not have an estimate for the completion of this yet, but we will keep this post updated as this develops. UPDATE: ViewVC is now available again, however, the data in ViewVC is still from before the previous downtime. Anonymous pserver is still offline. We’re working to get both these caught up with the latest updates as soon as we can. Best Regards, Chris Tsai, SourceForge.net Support
|
|
|
AlexMyr
|
| |
Пост N: 656
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.12.12 10:17. Заголовок: Pasha пишет: Алекса..
Pasha пишет: цитата: | Александр, а можно ли перенести проект с CVS на SVN ? |
|
Может быть пора?
|
|
|
alkresin
|
| moderator
|
Пост N: 460
Зарегистрирован: 06.07.06
|
|
Отправлено: 04.12.12 11:58. Заголовок: Павел, мне тут напис..
Павел, мне тут написали: цитата: | OP system : Win 7, Win XP, Win 2008 bcc, mingv, mingv64 letodb v 1.350.2.90 2012/11/23 16:11:46 bug: 12/03/12 09:41:37: LetoDB service has had some problems: 1063 |
| Я такого сообщения не припомню. Что бы это могло значить ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2582
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.12.12 12:28. Заголовок: Ошибка возникает при..
Ошибка возникает при неудачной попытке запуска службы letodb Код ошибки 1063 расшифровывается так: Процесс службы не может установить связь с контроллером службы. С именно такой ошибкой я не сталкивался. Мне встречались проблемы с правами при установке службы (нужны права администратора). Еще службу нельзя запускать с сетевого диска, что тоже понятно. Встречалась проблема, когда после какого-то обновления avast служба letodb при запуске просто висла, в диспетчере служб в колонке состояние было что-то вроде running или starting Лечилось заменой антивируса на другой. Возможно, тут что-то тоже связано с антивирусом. Или сам модуль letodb.exe поврежден. Хотя, видно что скачан уже собранный letodb, который я выложил. Может быть, пользователь просто не установил службу ? Т.е. не отработал letodb install ? В инструкции про это есть.
|
|
|
AlexMyr
|
| |
Пост N: 657
Зарегистрирован: 11.06.10
|
|
Отправлено: 06.12.12 11:33. Заголовок: AlexMyr пишет: Вчер..
AlexMyr пишет: цитата: | Вчера и сегодня тоже не могу: cvs [login aborted]: recv() from server letodb.cvs.sourceforge.net: Connection r eset by peer C:\dev\_svn>cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P -r rel-1-mt letodb cvs [checkout aborted]: recv() from server letodb.cvs.sourceforge.net: Connectio n reset by peer |
| Уже работает!
|
|
|
Pasha
|
| Администратор
|
Пост N: 2589
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.12.12 09:20. Заголовок: Александр, мне пришл..
Александр, мне пришло письмо с sf, они предлагают проапгрейдить проект на новую платформу. Пишут, что старая скоро не будет поддерживаться. Делать ?
|
|
|
alkresin
|
| moderator
|
Пост N: 470
Зарегистрирован: 06.07.06
|
|
Отправлено: 07.12.12 09:50. Заголовок: Pasha пишет: Алекса..
Pasha пишет: цитата: | Александр, мне пришло письмо с sf, они предлагают проапгрейдить проект на новую платформу. |
| Да, я тоже получил. Ну а куда деваться ...
|
|
|
alkresin
|
| moderator
|
Пост N: 471
Зарегистрирован: 06.07.06
|
|
Отправлено: 07.12.12 09:57. Заголовок: Я сделал Upgrade, по..
Я сделал Upgrade, посмотрим, что получится.
|
|
|
alkresin
|
| moderator
|
Пост N: 472
Зарегистрирован: 06.07.06
|
|
Отправлено: 07.12.12 10:06. Заголовок: Я думал, этот upgrad..
Я думал, этот upgrade имеет какое-то отношение к переходу с CVS на SVN - но, вроде, это не так.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2460
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.12.12 18:46. Заголовок: А откуда качать исхо..
А откуда качать исходники LetoDB ? с CVS или SVN ? Адрес дайте пожалуйста. И готовые бинарники есть ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2599
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.12.12 18:52. Заголовок: Как и раньше, с CVS,..
Как и раньше, с CVS, ничего не изменилось. А бинарники я же только выложил, неделя с небольшим прошла, на этой странице чуть выше все есть.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2603
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.12.12 11:04. Заголовок: Просьба тем, у кого ..
Просьба тем, у кого есть msvc, проверить сборку сервера letodb с правкой: include/funcleto.h строка 81 #include <winsock2.h> заменить на #ifndef HB_SOCKET_H_ #include <winsock2.h> #endif С этой заменой сборка для openwatcom выполняется успешно (раньше были ошибки). А msvc у меня не установлен. Хотелось бы знать, поможет ли этот фикс для msvc
|
|
|
Pasha
|
| Администратор
|
Пост N: 2622
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.12.12 20:48. Заголовок: Сейчас время актуаль..
Сейчас время актуальности skip и seek буфера - 1 секунда. Для медленного удаленного интернет-соединения это может быть недостаточно. Поэтому я добавил возможность задать это время: 5-й параметр leto_Connect
|
|
|
alkresin
|
| moderator
|
Пост N: 504
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.12.12 08:52. Заголовок: Это время, как я пон..
Это время, как я понимаю, сейчас имеет одно значение для всех файлов ? Мне кажется, тут нужен более гибкий подход - возможность установки и общего значения, и - для каждой таблицы в отдельности. И должно быть значение, равное 0 как эквивалент бесконечности, т.е., чтобы это время актуальности было бесконечным. Я бы в своих приложениях ( пока это теоретическое предположение, поскольку у меня стоит пока старая версия, где этого времени нет вообще ) поставил бы общее значение 0 и, возможно, только для некоторых файлов какое-то фиксированное - например, 5 сек.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2623
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.12.12 10:11. Заголовок: Добавлю еще в LETOAR..
Добавлю еще в LETOAREA это параметр, знаковый. -1 будет означать общую настройку для соединения, 0 - бесконечность. Для установки добавлю новую константу для dbInfo: DBI_XXX. Кстати, сейчас проверю, насколько поможет увеличение этого параметра для удаленного соединения.
|
|
|
alkresin
|
| moderator
|
Пост N: 506
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.12.12 10:16. Заголовок: Этот -1 для LETOAREA..
Этот -1 для LETOAREA должен быть, по идее, значением по умолчанию.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2626
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.12.12 10:10. Заголовок: Увеличение времени а..
Увеличение времени актуальности буфера немного помолго, но оказалось далеко не решающим фактором. Пришлось оптимизировать еще несколько действий. Включил использование seek-буфера там, где это необходимо, доработал его: теперь если dbSeek(xKey) возвращает .F., результат все равно сохраняется в seek-буфере и затем используется. Убрал несколько лишних операций. В результате количество запросов к серверу сократилось с 265 до 29-ти, т.е. почти на порядок.
|
|
|
alkresin
|
| moderator
|
Пост N: 511
Зарегистрирован: 06.07.06
|
|
Отправлено: 21.12.12 11:12. Заголовок: Отлично. А что это з..
Отлично. А что это за seek-буфер ? Какие записи он хранит, тем более когда dbSeek возвращает .f. ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2627
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.12.12 11:28. Заголовок: Я использую seek-буф..
Я использую seek-буфер к примеру для выборки данных из небольшого справочника размером несколько десятков-сотен записей. Среди них есть как правило наиболее часто используемые. Определяю размер seek-буфера 20-30 записей вызовом leto_SetSeekBufer(20) При этом результат работы dbSeek: значение ключа и копия полученной с сервера записи будет сохранен в буфере, и при следующем вызове seek с тем же значением ключа запись будет браться из буфера без обращения к серверу. Вызов leto_SetSeekBufer без параметров вернет количество попаданий в буфер. А вчера я добавил сохранение в буфер ненайденной записи. Если будет еще раз seek с тем же значеним ключа, запись будет перемещена на eof() без запроса к серверу. Механизм примерно такой же, как и для skip-буфера. Можно использовать к примеру в случае использования set relation, или просто для dbSeek
|
|
|
Pasha
|
| Администратор
|
Пост N: 2628
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.12.12 15:33. Заголовок: Меня спрашивают, что..
Меня спрашивают, что предпочтительнее по производительности, использование dbfcdx в терминалке или letodb ? А я не знаю, что ответить, так как сам терминал-сервер не использую. Кто может сказать, большой траффик получается в случае использования терминал-сервера windows ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2505
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.12.12 15:56. Заголовок: Pasha пишет: Кто мо..
Pasha пишет: цитата: | Кто может сказать, большой траффик получается в случае использования терминал-сервера windows |
| Я использую на нескольких фирмах терминал-сервера. Так как сервер для терминалов используют как правило более мощный, то задача с использованием обычного dbfcdx - просто летает.... Но по цене и простоте лучше использовать конечно LetoDb (экономим на обслуживание и настройке терминал-сервера windows ) !
|
|
|
PSP
|
| постоянный участник
|
Пост N: 810
Зарегистрирован: 27.01.07
|
|
Отправлено: 21.12.12 21:36. Заголовок: Да, тут главное - це..
Да, тут главное - цена. Терминальный сервер легально можно поднять только на MS Server 20xx. Про его цену вместе с лицензиями говорить не обязательно. Думаю, что вариант с терминалом будет побыстрее, особенно через интернет соединение, но и затраты несоизмеримо выше.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 326
Зарегистрирован: 13.10.05
|
|
Отправлено: 22.12.12 14:06. Заголовок: Есть платные термина..
Есть платные терминалы , работают и на Win 7 64, других разработчиков, цены доступные
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 327
Зарегистрирован: 13.10.05
|
|
Отправлено: 22.12.12 14:08. Заголовок: Но под терминалом не..
Но под терминалом не работает ADS local.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2631
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.12.12 18:59. Заголовок: Я давно косо смотрел..
Я давно косо смотрел на выборку из таблицы с использованием scope и filter. Для нее необходимо сделать несколько запросов: set scope set filter seek skip (один или несколько) clear scope clear filter Получается как минимум 6 запросов к серверу. Мне хотелось их минимизировать, до одного запроса.. Сначала возникла идея сделать обработку блоков команд. Но таких команд немного: set filter и set scope, и в конце концов я от этой идеи отказался. Но вопрос как-то решать надо. Решил использовать возможности skip-буфера: его заполнение одной командой и обработка результата на клиенте обычными вызовами навигационых функций. Я не стал добавлять новую команду для сервера, а сделал через механизм udf-функций, для которых есть аналогичный, но более гибкий интерфейс. Теперь вместо кода: set index to <indexname> set scopetop to <s1> set scopebottom to <s2> set filter to <f> go top while ! eof() ... skip enddo set scope to set filter to можно использовать код: leto_ParseRecords(leto_Udf('UDF_dbEval', <s1>, <s2>, <indexname>, <f>)) while ! eof() ... skip enddo Это делается одним запросом к серверу. Конечно, большую выборку надо использовать с осторожностью, поскольку вся она передается одним запросом. дока будет чуть позже.
|
|
|
alkresin
|
| moderator
|
Пост N: 519
Зарегистрирован: 06.07.06
|
|
Отправлено: 24.12.12 08:12. Заголовок: Дело хорошее! Leto_P..
Дело хорошее! Leto_ParseRecords() - это новая функция, которая разбирает результат, присланный UDF_dbEval ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2632
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.12 09:02. Заголовок: alkresin пишет: Let..
alkresin пишет: цитата: | Leto_ParseRecords() - это новая функция, которая разбирает результат, присланный UDF_dbEval ? |
| Да, именно так. Она заполняет skip-буфер (без ограничения на размер, сколько получится), и затем команды dbSeek(1) ... while ! eof() могут выбирать из него данные без обращения к серверу. Послу выборки желательно сбросить skip-буфер командой dbInfo(DBI_CLEARBUFFER) чтобы случайно командами skip(-1) не выбрать не те данные. Мне еще хочется в skip-буфере сделать такое изменение. Сейчас при обновлении данных он просто сбрасывается. Если обновлялись неиндексные поля текущей записи, можно это не делать, а прямо в буфере в поле флагов записи, которая обновилась, делать пометку, что именно эту запись из буфера брать не надо. Тогда skip-буфер можно быдет полноценно использовать при обновлении данных.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 53
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 11:06. Заголовок: alkresin пишет:Дело ..
alkresin пишет: Дело ОЧЕНЬ ХОРОШЕЕ !!! А добавив aFields, можно и без вызова UDF работать, добавив возврат в буфере массива Recno записей выборки (для больших и неопределенных в объеме выборок), получится вариант SELECT ... ! И если такое добавить в версию LETO, собираемую xHabour - совсем ЗАМЕЧАТЕЛЬНО !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2634
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.12 11:43. Заголовок: Я вчера забыл сделат..
Я вчера забыл сделать коммит для server.prg, там небольшое изменение - надо добавить request для leto_dbEval. Сегодня сброшу. Кстати, в mail dev list почему-то не проходят письма. А насчет aFields: я не очень понял, что имеется в виду. Можно подробнее ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 55
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 12:26. Заголовок: Pasha пишет: А насче..
Pasha пишет: цитата: | А насчет aFields: я не очень понял, что имеется в виду. Можно подробнее ? |
| Как я понял, сейчас в skip-буфере находится все поля записи. При помощи aFields := {"Field1", "Field10"} - только нужные.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2635
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.12 13:24. Заголовок: Добавить к UDB_dbEva..
Добавить к UDB_dbEval еще один параметр aFields, что ли ? И передавать с сервера только значения тех полей, которые есть в этом массиве ? Тогда значения остальных полей будут пустыми, и в skip буфере, и при считывании записей. Конечно, для передачи даже пустых полей требуется один-два байта. Это можно сделать, но пользоваться таким запросом надо с осторожностью, понимая, что делаешь. Обращение к полям, которых нет в aFields, даст пустое значние, а ведь значение у них есть. Если в массиве не будет ключевых полей, то не получится вычисление ключевого выражения.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 56
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 13:57. Заголовок: Pasha пишет но польз..
Pasha пишет цитата: | но пользоваться таким запросом надо с осторожностью |
| Конечно - это для тех, кто понимает, что происходит ! Зато можно значительно уменьшить трафик в различных расчетах где символьные данные не нужны и т.д. и т.п. Еще можно добавить параметр .T./.F., что в skip буфере: записи с полями или ссылки на записи, участвующие в запросе и работать вместо skip через goto.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2636
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.12 14:13. Заголовок: SergKis пишет: Еще ..
SergKis пишет: цитата: | Еще можно добавить параметр .T./.F., что в skip буфере: записи с полями или ссылки на записи, участвующие в запросе и работать вместо skip через goto. |
| Это как раз наоборот увеличит траффик. Если в skip-буфере хранятся записи, то они выбираются из него без обращения к серверу. Если номера записей (ссылки), то каждый goto потребует запроса к серверу, что нивелирует саму идею буфера.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 57
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 15:26. Заголовок: Pasha пишет:что ниве..
Pasha пишет: цитата: | что нивелирует саму идею буфера |
|
Это как применять имеющиеся возможности. Если запрос к данным за несколько лет , т.е. для больших и неопределенных в объеме выборок, я бы предпочел быстро получить ссылки и потом работать по ним, а при работе с карточками, документами конечно skip-буфер. И что особенно нравится, не надо городить функции UDF, которые появившись, начинают жить вместе с проектом, но где то на сервере, и в общей куче, и хорошо если делал их сам. Функция Leto_ParseRecords() - это реальный вариант команды SELECT ... FROM ..., что радует. Pasha пишет: цитата: | Тогда skip-буфер можно будет полноценно использовать при обновлении данных |
| Наверно и эта возможность интересна, но как она будет сочетаться с транзакциями? Сегодня мы делаем так: - делаем выборку (select функция) - сохраняем в MemIO - даем для работы клиенту (Browse) - если были изменения, в транзакции сбрасываем на сервер как это будет выглядеть со skip буфером ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2638
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.12 15:47. Заголовок: SergKis пишет: Это ..
SergKis пишет: цитата: | Это как применять имеющиеся возможности. Если запрос к данным за несколько лет , т.е. для больших и неопределенных в объеме выборок, я бы предпочел быстро получить ссылки и потом работать по ним, а при работе с карточками, документами конечно skip-буфер. И что особенно нравится, не надо городить функции UDF, которые появившись, начинают жить вместе с проектом, но где то на сервере, и в общей куче, и хорошо если делал их сам. Функция Leto_ParseRecords() - это реальный вариант команды SELECT ... FROM ..., что радует. |
| Если установить фильтр: обычный и scope, то в skip-буфер как раз будут занесены только те записи, которые ему удовлетворяют, и нет необходимости в ссылках на номера записей с их дальнейшей выборкой цитата: | Наверно и эта возможность интересна, но как она будет сочетаться с транзакциями? |
| Смысл skip-буфера в том, чтобы прочитать с сервера сразу блок записей и затем его использовать без обращения к серверу. Как только запись изменяется, то skip-блок полностью очищается, и при обращении к следующей записи она будет вновь считана с сервера. Это относится к изменениям как в рамках транзации, так и без нее. Я при изменении записи хочу не очищать полностью skip-блок, а только помечать измененную запись в нем. Если потребуется выбрать запись, которая есть в буфере и не изменялась, то она будет выбрана из буфера, а если изменялась - считана вновь с сервера. Есть транзакция или нет - при этом роли не играет. К примеру, пусть в таблице 10 записей. Как сейчас обрабатывается выражение вида: go top while ! eof() if RLock() Field->FName := 'fsdfsdfsd' commit unlock endif skip enddo Сейчас: 1. Считано 10 записей в буфер, текущая запись номер 1 2. Запрос на update, буфер очищается 3. Skip - считывается 9 записей 4. Запрос на update, буфер очищается 5. Skip - считывается 8 записей ... Если изменить алгоритм: 1. Считано 10 записей в буфер, текущая запись номер 1 2. Запрос на update, буфер не очищается, в нем делается пометка для записи 1 3. Skip - берется следующая запись из буфера 4. Запрос на update, буфер не очищается, в нем делается пометка для записи 2 5. Skip - берется следующая запись из буфера ... Транзакция только влияет на то, как выполняется update: сразу или по commit transaction
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 59
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 16:16. Заголовок: Pasha пишет:К пример..
Pasha пишет: цитата: | К примеру, пусть в таблице 10 записей. Как сейчас обрабатывается выражение вида go top while ! eof() ... |
| Я правильно понял, что если написать на эти 10 записей Browse: go top Browse(...) и в функции пользователя при корректировке: if RLock() Field->FName := 'fsdfsdfsd' commit unlock endif ... Return REFRESH такая схема будет работать !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2640
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.12.12 16:20. Заголовок: Работать то будет, н..
Работать то будет, но неоптимально. До корректировки будет использоваться skip-буфер. При корректировке он будет очищен, и вся страница browse опять будет считана с сервера. Я хочу сделать, чтобы буфер полностью не очищался, а считывалась только измененная запись при повторном обращении к ней.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 61
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 16:37. Заголовок: Pasha спасибо за объ..
Pasha спасибо за объяснения !!!
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 62
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.12.12 09:22. Заголовок: Паша, еще вопрос по ..
Паша, еще вопрос по skip-буферу. Сейчас некоторые справочники читаю в массивы и потом, работаю по AScan(...), со skip-буфером можно ли делать так: select AAA; leto_SetSeekBufer(LastRec()); leto_ParseRecords(...) // справочник 1 select BBB; leto_SetSeekBufer(LastRec()); leto_ParseRecords(...) // справочник 2 потом, по надобности делать: select AAA; LOCATE ... select BBB; LOCATE ... или skip-буфер один, а не для каждой области ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2642
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.12.12 10:27. Заголовок: skip-буфер создается..
skip-буфер создается для каждой рабочей области, а seek-буфер - для каждого индекса рабочей области. Но по умолчанию seek-буфер не создается, его надо задать. Но это разные буфера, один для операции skip, второй - для seek leto_ParseRecords заполняет именно skip-буфер, к seek-буферу он не имеет отношения. Если locate хочется использовать данных skip-буфера, полученных после leto_ParseRecords, то так просто это не сделаешь. locate первым делом сделает go top, что сразу сбросит skip-буфер и испортит весь кайф. Поэтому надо делать locate с опцией rest В результате locate переместится на найденную запись или на eof, если запись не найдена, и последующий locate в этом skip-буфере без его сброса будет сделать затруднительно. Поэтому предпочтительнее все-таки будет алгоритм с просмотром всего полученного skip-буфера сразу: while ! eof() и в цикле делать все нужные сравнения skip enddo все равно этот skip буфер уже получен с сервера и находится на клиенте.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 64
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.12.12 10:46. Заголовок: Pasha пишет:все равн..
Pasha пишет: цитата: | все равно этот skip буфер уже получен с сервера и находится на клиенте |
| Это все очень ЗДОРОВО ! Тогда вместо memio можно использовать следующее: select DOKUM; leto_SetSkipBufer(100); leto_ParseRecords(...) while ! eof() RLock() skip enddo Browse(...) // с корректировкой если изменения были в нескольких RecNo, то while ! eof() commit skip enddo Unlock() Как в таком случае быть с dbAppend() ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2643
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.12.12 11:04. Заголовок: leto_SetSkipBufer(1..
leto_SetSkipBufer(100) перед leto_ParseRecords(...) делать необязательно, так как в буфер заносятся все данные, удовлетворяющие заданному условию. После всех операций изменения данных сейчас буфер сбрасывается. Я только собираюсь сделать другой алгоритм: не сброс буфера, а пометку в нем измененных записей, но еще это не сделал.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2644
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.12.12 11:06. Заголовок: Я так понимаю, вы хо..
Я так понимаю, вы хотите сделать что-то вроде аналога fetch для результатов sql-запроса. Я думаю, может стоит сделать отдельный набор функций для навигации по skip-буферу: текущая позиция в буфере, перемещение вперед/назад Но это вопрос дискуссинный. Может достаточно будет обойтись функцией, которая бы возвращала позицию текущей записи в буфере.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 66
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.12.12 11:31. Заголовок: Pasha пишет:Я так по..
Pasha пишет: цитата: | Я так понимаю, вы хотите сделать что-то вроде аналога fetch для результатов sql-запроса |
|
Как конечный результат - да, а как промежуточный - избавится от кода закачки справочников в массивы и работа с документами, карточками со skip-буфером вместо закачки в memio, т.е. значительно сократить код в программе. цитата: | Я думаю, может стоит сделать отдельный набор функций для навигации по skip-буферу |
|
это не принципиально, если будет какой-то базовый набор функций - обвесить можно всегда.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2523
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.12.12 00:57. Заголовок: sashaBG пишет: Прив..
sashaBG пишет: цитата: | Привет Всем кто использует LetoDB ! Сервер LetoDB работает отлично ! |
| sashaBG пишет: цитата: | Кстати в letodbtray но для моего проекта е сделал исправление : потому что Letodb падает из за постоянного подключение и отключения я в цикле по таймеру сделал възов функцию IsAlive() вместо IsConnected(): FUNCTION IsAlive() Return leto_file( _Server+"USER.DBF" ) и таким образом серввер не падает. но для общего использования она не подойдет , нельзя ли сделать на C leto_islive() ? И еще интересное наблюдение : на серверах ( я пробую на windows Serwer 2008 ) скорость работы letodb заметно ниже чем на обычном XP процессор на сервере нагружается небольше 5% а под XP и Win7 доходит до 60% и больше , наверное ето потому что letodb не серверный процесс. |
| Как решились эти проблемы ? Есть ли новая версия letodbtray ? Если можно, то поделитесь пожалуйста. В вашей предыдущей программе не хватает информации по Номеру версии (сборки) LetoDB и и заодно и Номера версии вашей программы. Я так понял Вы пишите программы с LetoDB на МиниГуи. Как МиниГуи работает с базами, какие тонкости есть при использовании МиниГуи ?
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 117
Зарегистрирован: 15.09.05
|
|
Отправлено: 29.12.12 12:16. Заголовок: Привет
Андрей прошло много времени с того поста что в цитате , сервер сайчас работает намного лучше. Когда у меня будет болше времени , обещаю сделать небольшой пример СЕРВЕРА(комбинация между letodb + HBNETIO + MiniGUI) и КЛИЕНТА(MiniGUI + rddleto) В принципе нет большой разницы при работе letodb чем с другими RDD . Я постараюсь показать кое чего в примере :)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2524
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.12.12 18:54. Заголовок: sashaBG пишет: Я по..
sashaBG пишет: цитата: | Я постараюсь показать кое чего в примере :) |
| Заранее спасибо, буду ждать. С наступающим Новым Годом !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2525
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.12.12 11:06. Заголовок: Что-то не хочет запу..
Что-то не хочет запускаться letodb.exe на Win8 (32bit) из под администратора. Версия letodb-2.09-win, пробовал из папки Bin\BCC и Bin\MinGW D:\@TEST_LETODB\letodb.log 12/29/12 02:14:16: Error installing LetoDB service: 5 12/29/12 02:18:20: LetoDB service has had some problems: 1063 12/29/12 02:20:20: LetoDB service has had some problems: 1063 12/29/12 02:22:11: LetoDB service has had some problems: 1063 12/30/12 12:00:11: LetoDB service has had some problems: 1063 12/30/12 12:01:53: LetoDB service has had some problems: 1063 Старая версия letodb.exe (672256) 14.06.10 - запускается. 12/30/12 12:04:34: Leto DB Server has been started.
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 118
Зарегистрирован: 15.09.05
|
|
Отправлено: 30.12.12 16:46. Заголовок: Ето потому что сервер откомпилирован как (SERVICE)
Ето потому что сервер откомпилирован как (SERVICE) сначало сделай letodb install , потом в срвисах найди запусти и (SERVICE) LetoDB Service после етого даже после рестарта компьютера служба будет работать я тоже на WIN8 почитай readme_rus.txt там все написано :) потом из командной строки или из программы можно останавливать и запускать net start "LetoDB Service" - СТАРТ net stop "LetoDB Service" - СТОП
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2526
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.12.12 20:54. Заголовок: sashaBG пишет: снач..
sashaBG пишет: цитата: | сначало сделай letodb install |
| Да читал я доку: Для установки и удаления службы необходимы права администратора. Для установки службы вызовите letodb с параметром 'install': letodb.exe install Делаю, пишет вот это: 12/30/12 21:54:00: Error installing LetoDB service: 5
|
|
|
Pasha
|
| Администратор
|
Пост N: 2647
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.12.12 21:17. Заголовок: Andrey пишет: Делаю..
Andrey пишет: цитата: | Делаю, пишет вот это: 12/30/12 21:54:00: Error installing LetoDB service: 5 |
| Ошибка 5 - это ERROR_ACCESS_DENIED, что однозначно идентифицирует причину ошибки как недостаток прав доступа для установки службы. Убедитесь, что есть права админа. В конце концов, создайте ярлык на "letodb install" и запустите его с правами администратора, если такое возможно под win8
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2527
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.12.12 23:20. Заголовок: Pasha пишет: В кон..
Pasha пишет: цитата: | В конце концов, создайте ярлык на "letodb install" и запустите его с правами администратора, если такое возможно под win8 |
| Спасибо БОЛЬШОЕ !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2648
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.01.13 14:28. Заголовок: Обнаружилось, что пр..
Обнаружилось, что при создании дочерних потоков в mt-версии letodb не копируются настройки set и некоторые другие из основного потока, что вызывает некоторые неудобства. Команды SET, установленные для основного потока, не действуют в дочерних Как бы это поправить ? Вроде бы надо задать параметр для вызова в leto_2.c: hb_vmThreadInit( NULL ); Просто указать: PHB_THREADSTATE pThread = hb_threadStateClone( 0, NULL ); hb_vmThreadInit( ( void * ) pThread ); я не могу, так как структуры вида PHB_THREADSTATE требуют установки #define _HB_API_INTERNAL_ Чего хотелось бы избежать. Есть ли другой способ ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2663
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.01.13 12:26. Заголовок: С копированием струк..
С копированием структуры set возникли некоторые проблемы, поэтому пока я просто обавлю новый параметр настройки в letodb.ini: AutOrder = ... Мне собственно был нужен этот параметр
|
|
|
Панченко
|
| |
Пост N: 22
Зарегистрирован: 13.06.12
|
|
Отправлено: 23.01.13 14:14. Заголовок: Pasha, "добавлю&..
Pasha, "добавлю" или "добавил"?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2664
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.01.13 14:27. Заголовок: Панченко пишет: ..
Панченко пишет: На своей локальной копии уже добавил. На CVS сброшу вечером.
|
|
|
Панченко
|
| |
Пост N: 23
Зарегистрирован: 13.06.12
|
|
Отправлено: 23.01.13 14:38. Заголовок: Pasha пишет: На CVS..
Pasha пишет: А можно повторить адрес CVS LetoDB? А то у меня версия 2.09 от 07.12.12 с Sourceforge :(
|
|
|
Pasha
|
| Администратор
|
Пост N: 2666
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.01.13 16:07. Заголовок: Адрес CVS - это не u..
Адрес CVS - это не url. Надо установить какой-нибудь CVS-клиент под windows, например TortoiseCVS (он бесплатный), и затем сделать checkout с параметрами: cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb checkout -r rel-1-mt letodb
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2587
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.13 17:14. Заголовок: http://f2.s.qip.ru/e..
|
|
|
Pasha
|
| Администратор
|
Пост N: 2667
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.01.13 19:56. Заголовок: Надо вводить адрес: ..
Надо вводить адрес: :pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb и ревизия: rel-1-mt
|
|
|
Панченко
|
| |
Пост N: 24
Зарегистрирован: 13.06.12
|
|
Отправлено: 24.01.13 09:46. Заголовок: Pasha, а можно подро..
Pasha, а можно подробнее: цитата: | AutOrder = 0 - настройка для SET AUTORDER |
| Что будет при о, а что при 1?
|
|
|
PSP
|
| постоянный участник
|
Пост N: 819
Зарегистрирован: 27.01.07
|
|
Отправлено: 24.01.13 09:53. Заголовок: Панченко пишет: Что..
|
|
|
Панченко
|
| |
Пост N: 25
Зарегистрирован: 13.06.12
|
|
Отправлено: 24.01.13 10:09. Заголовок: to PSP My English is..
to PSP My English is very-very poor - это одна из тех немногих фраз, которые я вынес из уроков английского. Поэтому хочу уточнить: речь идет о том, будет ли по USE автоматически открываться индекс. Правильно я понял?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2668
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.01.13 10:18. Заголовок: Панченко пишет: Что..
Панченко пишет: цитата: | Что будет при о, а что при 1? |
| SET AUTORDER - это стандартная настройка харбора. Она определяет, какой индекс по номеру будет активен после открытия файла, и по какому будет отработан go top. По умолчанию это 0. Я хочу, чтобы сразу был установлен 1-й индекс, чтобы не делать лишних действий при открытии БД Я это делаю для оптимизации открытия БД Предположим, БД состоит из 50 таблиц, с индексом в каждой Раньше открытие БД заключалось в действиях: 1) проверка существования таблицы через leto_File (2 запроса - для таблицы и для индекса) 2) открытие через use 3) вызов ordSetFocus(1), go top Для такой БД получалось 50*(2+1+1) = 200 запросов к серверу (на самом деле еще больше). Сейчас я обхожусь двумя запросами: 1. Вызов UDF_FilesExist 2. Вызов UDF_OpenTables Разница есть ? Мне так кажется, что есть маленькая :)
|
|
|
PSP
|
| постоянный участник
|
Пост N: 820
Зарегистрирован: 27.01.07
|
|
Отправлено: 24.01.13 10:22. Заголовок: Да. Есть команда SET..
Да. Есть команда SET AUTOPEN. Используется для автоматического открытия индекса при открытии dbf. По-умолчанию она в OFF. Так вот, если выполнить SET AUTOPEN ON, то с помощью SET AUTORDER можно указать, какой индекс станет управляющим в составном индексном файле. По-умолчанию установлена в 0.
|
|
|
Панченко
|
| |
Пост N: 26
Зарегистрирован: 13.06.12
|
|
Отправлено: 24.01.13 10:54. Заголовок: Pasha пишет: Раньше..
Pasha пишет: цитата: | Раньше открытие БД заключалось в действиях: 1) проверка существования таблицы через leto_File (2 запроса - для таблицы и для индекса) 2) открытие через use 3) вызов ordSetFocus(1), go top |
| Т.е., теперь по умолчанию (AutOrder=0) выполняются только 1 и 2 пункты?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2669
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.01.13 11:02. Заголовок: Панченко пишет: Т.е..
Панченко пишет: цитата: | Т.е., теперь по умолчанию (AutOrder=0) выполняются только 1 и 2 пункты? |
| Вместо 1 я проверяю существование всех таблиц и индексов одним вызовом UDF_FilesExist, а вместо 2 - открываю все существующие таблицы одним вызовом UDF_OpenTables.
|
|
|
Панченко
|
| |
Пост N: 27
Зарегистрирован: 13.06.12
|
|
Отправлено: 24.01.13 11:12. Заголовок: Pasha пишет: Разниц..
Pasha пишет: цитата: | Разница есть ? Мне так кажется, что есть маленькая :) |
| НУ тогда конечно :))
|
|
|
AlexMyr
|
| |
Пост N: 700
Зарегистрирован: 11.06.10
|
|
Отправлено: 24.01.13 11:20. Заголовок: PSP пишет: Да. Есть..
PSP пишет: цитата: | Да. Есть команда SET AUTOPEN. Используется для автоматического открытия индекса при открытии dbf. По-умолчанию она в OFF. |
|
Вроде всегда была .T., или я не прав?
|
|
|
PSP
|
| постоянный участник
|
Пост N: 821
Зарегистрирован: 27.01.07
|
|
Отправлено: 24.01.13 11:44. Заголовок: AlexMyr пишет: Врод..
AlexMyr пишет: цитата: | Вроде всегда была .T., или я не прав? |
| Да, я ошибся
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2635
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.02.13 00:17. Заголовок: Проясните пожалуйста..
Проясните пожалуйста вопрос взаимодействия LetoDB и FastReport. Мне нужно будет для построения отчетов FastrReport делать выгрузку из базы на локальный комп ?
|
|
|
AlexMyr
|
| |
Пост N: 714
Зарегистрирован: 11.06.10
|
|
Отправлено: 09.02.13 01:01. Заголовок: Andrey пишет: Мне н..
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2636
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.02.13 01:57. Заголовок: Pasha пишет: Можно ..
Pasha пишет: цитата: | Можно создать в проекте папки doc\en, doc\ru, и туда выкладывать описание функций по разделам, примерно как это сделано в contrib\hbct\doc, файловые функции как раз пойдут в letofile.txt |
| Когда появиться дока хотя бы на русском ? Пытаюсь пользоваться letodb-2.09-win Пока тормоз полнейший по хХарбору. Переписал lib.xharbour\rddleto.lib в xHarbour\lib, include в xHarbour\include Пытаюсь собрать пример \letodb-2.09-win\tests\test_var.prg, выдает ошибку: Error: Unresolved external '_hb_setGetAutOrder' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_arraySetCL' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_arraySetND' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_arraySetDS' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_arraySetL' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_arraySetNL' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_setGetDeleted' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|leto1 Error: Unresolved external '_hb_arraySetC' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|letomgmn Error: Unresolved external '_hb_arraySetNInt' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|letomgmn Error: Unresolved external '_hb_arraySetDL' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|letomgmn Error: Unresolved external '_hb_itemReturnRelease' referenced from Z:\XHARBOUR\LIB\RDDLETO.LIB|letomgmn
|
|
|
Pasha
|
| Администратор
|
Пост N: 2680
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.02.13 08:25. Заголовок: Andrey пишет: Когда..
Andrey пишет: цитата: | Когда появится дока хотя бы на русском ? |
| Дока на русском есть. Это было предложение по ее переработке, а не созданию. А переработана она будет, когда это кто-нибудь сделает. У меня сейчас таких планов нет. цитата: | Пытаюсь пользоваться letodb-2.09-win Пока тормоз полнейший по хХарбору. Переписал lib.xharbour\rddleto.lib в xHarbour\lib, include в xHarbour\include Пытаюсь собрать пример \letodb-2.09-win\tests\test_var.prg, выдает ошибку: |
| Все ошибки связаны со стандартными функциями xHarbour из vm.lib. Проверьте свои правила сборки, эта библиотека должна быть указана. Она обязательна для сборки любой xHarbour-программы, не только использующей rddleto.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2638
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.02.13 09:48. Заголовок: Pasha пишет: Все ош..
Pasha пишет: цитата: | Все ошибки связаны со стандартными функциями xHarbour из vm.lib. Проверьте свои правила сборки, эта библиотека должна быть указана. Она обязательна для сборки любой xHarbour-программы |
| Любая другая программа собирается. xHarbour Compiler build 1.0.0 (SimpLex) собираю стандартно, через - HBMAKE test_var.bc Скрытый текст #BCC VERSION=BCB.01 !ifndef CC_DIR CC_DIR = $(MAKE_DIR) !endif !ifndef HB_DIR HB_DIR = $(HARBOUR_DIR) !endif RECURSE= NO SHELL = COMPRESS = NO EXTERNALLIB = NO XFWH = NO FILESTOADD = 5 WARNINGLEVEL = 2 USERDEFINE = USERINCLUDE = USERLIBS = EDITOR = notepad GUI = NO MT = NO SRC02 = obj PROJECT = test_var.exe $(PR) OBJFILES = $(SRC02)\TEST_VAR.obj $(OB) PRGFILES = TEST_VAR.PRG $(PS) OBJCFILES = $(OBC) CFILES = $(CF) RESFILES = RESDEPEN = TOPMODULE = TEST_VAR.PRG LIBFILES = lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib gtwin.lib codepage.lib ct.lib tip.lib pcrepos.lib hsx.lib hbsix.lib rddleto.lib EXTLIBFILES = DEFFILE = HARBOURFLAGS = -m -w2 CFLAG1 = -OS $(SHELL) $(CFLAGS) -d -c -L$(HB_DIR)\lib CFLAG2 = -I$(HB_DIR)\include;$(CC_DIR)\include RFLAGS = LFLAGS = -L$(CC_DIR)\lib\obj;$(CC_DIR)\lib;$(HB_DIR)\lib -Gn -M -m -s -Tpe -x -ap IFLAGS = LINKER = ilink32 ALLOBJ = c0x32.obj $(OBJFILES) $(OBJCFILES) ALLRES = $(RESDEPEN) ALLLIB = $(USERLIBS) $(LIBFILES) import32.lib cw32.lib .autodepend #DEPENDS #COMMANDS .cpp.obj: $(CC_DIR)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $** .c.obj: $(CC_DIR)\BIN\bcc32 -I$(HB_DIR)\include $(CFLAG1) $(CFLAG2) -o$* $** .prg.obj: $(HB_DIR)\bin\harbour -D__EXPORT__ -n -go -I$(HB_DIR)\include $(HARBOURFLAGS) -o$* $** .rc.res: $(CC_DIR)\BIN\brcc32 $(RFLAGS) $< #BUILD $(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(CC_DIR)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) !
| makefile.lnk Скрытый текст -LZ:\BCC55\lib\obj;Z:\BCC55\lib;Z:\xHARBOUR\lib -Gn -M -m -s -Tpe -x -ap + c0x32.obj obj\TEST_VAR.obj, + test_var.exe,, + rddleto.lib lang.lib vm.lib rtl.lib rdd.lib macro.lib 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 и в начале и в конце, ошибка та же. Pasha я понимаю что вопрос у меня тупой (не собирается и все тут), но я сейчас пытаюсь для новичков составить инструкцию работы на LetoDB. Пока начал с хХарбора. А то у нас получается что LetoDb используют только "продвинутые программеры" ...
|
|
|
PSP
|
| постоянный участник
|
Пост N: 825
Зарегистрирован: 27.01.07
|
|
Отправлено: 09.02.13 10:28. Заголовок: Может проблема в уст..
Может проблема в установке "MT = NO"?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2639
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.02.13 10:51. Заголовок: PSP пишет: Может пр..
PSP пишет: цитата: | Может проблема в установке "MT = NO"? |
| Поставил MT = YES, не помогает ....
|
|
|
Pasha
|
| Администратор
|
Пост N: 2681
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.02.13 11:34. Заголовок: rddleto.lib из letod..
rddleto.lib из letodb-2.09-win был собран для xHarbour SVN bcc55 У Вас наверняка другая версия xHarbour. rddleto.lib должен быть совместим с ней, если она конечно не очень древняя. Но лучше пересобрать rddleto.lib своим xHarbour, все-таки время от времени в api вносятся изменения, которые приводят к несовместмости. Что касается этих ошибок линкера, то поищите в vm.lib например строку "_hb_itemReturnRelease" (можно любую из списка). Если она есть, то сборка должна выполняться, надо копаться в правилах сборки. Если нет, или имя функции немного другое, к примеру без символа '_': просто "hb_itemReturnRelease", то однозначно надо пересобирать rddleto.lib
|
|
|
k_dima
|
| |
Пост N: 48
Зарегистрирован: 19.12.06
|
|
Отправлено: 21.02.13 20:59. Заголовок: Использует ли кто DB..
Использует ли кто DBFNTX с мемо полями и файлом .dbt ? Я глянул в исходники, в leto1. letoRddInfo() похоже для мемо забит только .fpt case RDDI_MEMOEXT: hb_itemPutC( pItem, ".fpt" ); break; Можно ли это поправить, или это не приведет к ошибке ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2697
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.02.13 21:41. Заголовок: k_dima пишет: Можно..
k_dima пишет: Традиционно со времен клиппера считается, что DBFNTX работает с форматои dbf, а DBFCDX - с fpt. В Харборе и DBFNTX, и DBFCDX понимает как dbt, так и fpt мемо-файл. Формат memo не привязан к формату индекса. И в letodb можно работать и с форматом dbt, и с fpt Настройка RDDI_MEMOEXT - это используемый формат memo по умолчанию. Для DBFNTX/DBFCDX эту настройку можно изменять, для letodb - нельзя. Кстати, если вызвать: hb_rddinfo(RDDI_MEMOEXT,, "DBFNTX") результат будет ".dbt" Вызов hb_rddinfo(RDDI_MEMOEXT,, "DBFCDX") дает пустую строку. Сейчас hb_rddinfo(RDDI_MEMOEXT,, "LETO") возвращает ".fpt". Это ни на что не влияет, но конечно немного некорректно. Можно было бы анализировать, с каким драйвером работает по умолчанию сервер letodb. и для DBFNTX возвращать ".ntx", а в случае DBFCDX - непонятно. То ли ".fpt", то ли для совместимости тоже пустую строку. Для полной совместимости конечно можно в letodb тоже дать возможность задавать эту настройку, но с клиента это делать было бы некорректно, так как один клиент смог бы влиять на настройки другого. Можно добавить настройку формата memo по умолчанию в letodb.ini. Какие будут соображения ?
|
|
|
AlexMyr
|
| |
Пост N: 726
Зарегистрирован: 11.06.10
|
|
Отправлено: 21.02.13 22:56. Заголовок: Если не задана настр..
Если не задана настройка формата memo в letodb.ini, то возвращать логически ожидаемое для DBFCDX - fpt, DBFNTX - dbt, если задан формат, то это значение.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2700
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.02.13 00:39. Заголовок: Pasha пишет: У Вас ..
Pasha пишет: цитата: | У Вас наверняка другая версия xHarbour. rddleto.lib должен быть совместим с ней, если она конечно не очень древняя. |
| xHarbour не очень древний, всего 1.0.0 Но вот на нем и не собирался. Перешел на версию 1.2.1 - все нормально собирается. Вот открыл примеры в папке tests - всего 4 примера... Так и получается что LetoDb предназначен для профи ! В доках конечно описано многое, но вот примеров как правильно делать нет... Хотя бы простого, с обработкой ошибок открытия, созданием базы (обработка ошибки создания), поиском, фильтрацией... Ну блин не пойдет такой продукт в массы... Почему так об этом пишу: D:\@TEST_LETODB\PRG>test_var.exe Connect to //127.0.0.1:2812/temp/test - Ok Adding 'var_int' = 100 to [main] - Err (3) Adding 'var_int' = 100 to [main] - Ok Adding 'var_log' = .T. to [main] - Ok Adding 'var_char' = 'Just a small test;' to [main] - Ok Ну нет у меня такой папки - temp/test, а пишет что все Ok... Если сервер не запущен или Вы указали неверный путь, будет сгенерирована ошибка открытия. Возможно проверить доступность сервера перед открытием файлов вызовом функции leto_Connect( cAddress ), которая вернет -1 в случае неудачной попытки: Ну не "догоняю" я пока простых вещей... Вот код и ошибка: http://files.mail.ru/CA12B2402E4F44FBA16846354711523C Собрано на хХарборе 1.2.1 Народ, дайте хоть исходник любой как надо работать с LetoDb ....
|
|
|
PSP
|
| постоянный участник
|
Пост N: 837
Зарегистрирован: 27.01.07
|
|
Отправлено: 27.02.13 09:10. Заголовок: Андрей, для начала п..
Андрей, для начала посмотри что в letodb.ini присвоено в DataPath К примеру, файл BaseName.dbf лежит в c:\work\dbf Делаем в letodb.ini: DataPath=c:\work в программе: USE "//127.0.0.1:2812/dbf/BaseName.dbf" Если, к примеру, тот же файл лежит на компе с адресом 192.168.0.100, то в программе: USE "//192.168.0.100:2812/dbf/BaseName.dbf" (соответственно, на компе 192.168.0.100 должен быть запущен сервер letodb и брандмауэр/антивирусник должен разрешать серверу letodb общение с внешним миром)
|
|
|
Pasha
|
| Администратор
|
Пост N: 2698
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.02.13 10:56. Заголовок: Andrey пишет: Вот о..
Andrey пишет: цитата: | Вот открыл примеры в папке tests - всего 4 примера... Так и получается что LetoDb предназначен для профи ! В доках конечно описано многое, но вот примеров как правильно делать нет... Хотя бы простого, с обработкой ошибок открытия, созданием базы (обработка ошибки создания), поиском, фильтрацией... Ну блин не пойдет такой продукт в массы... |
| Андрей, у нас же уже был подобный разговор. Все эти действия - обработка ошибок, создание (dbCreate), поиск, фильтрация и прочее выполняются точно так же, как и для стандартных rdd харбора, DBFNTX/DBFCDX Приводить примеры стандартных операций для rdd в описании letodb бессмыссленно. Это необходимое условие использования letodb. Если програмист с этим не знаком, то ему надо сначала выучить язык. А для опытного клиппериста такие проблемы выглядят странно. цитата: | Ну нет у меня такой папки - temp/test, а пишет что все Ok... Если сервер не запущен или Вы указали неверный путь, будет сгенерирована ошибка открытия. Возможно проверить доступность сервера перед открытием файлов вызовом функции leto_Connect( cAddress ), которая вернет -1 в случае неудачной попытки: Ну не "догоняю" я пока простых вещей... |
| Описание "Если сервер не запущен или Вы указали неверный путь, будет сгенерирована ошибка открытия. " вырвано из контекста и относится к команде use, а не к leto_connect, которая только проверяет доступность сервера и коннектится с ним. Насколько я понимаю, с коннектом уже проблем нет. А с чем тогда есть ? С созданием папки ? Это что, очень сложно ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 142
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.02.13 11:25. Заголовок: Andrey пишет:Народ, ..
Andrey пишет: цитата: | Народ, дайте хоть исходник любой как надо работать с LetoDb |
| Пример:
|
|
|
AlexMyr
|
| |
Пост N: 730
Зарегистрирован: 11.06.10
|
|
Отправлено: 27.02.13 11:47. Заголовок: Andrey пишет: Народ..
Andrey пишет: цитата: | Народ, дайте хоть исходник любой как надо работать с LetoDb .... |
|
А чем не устраивают те, которые идут вместе с LetoDB?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2701
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.02.13 23:39. Заголовок: AlexMyr пишет: А че..
SergKis пишет: Спасибо БОЛЬШОЕ ! Буду разбираться... AlexMyr пишет: цитата: | А чем не устраивают те, которые идут вместе с LetoDB? |
| Потому что не понятно как LetoDB работает .... Запустил LetoDb.exe на Win8 с тупизмом присущим 8-ке, через батник. Установил как службу. D:\@TEST_LETODB\letodb.ini [MAIN] Port=2812 Log=letodb.log DataPath=D:\@TEST_LETODB\DATA Служба запущена нормально: D:\@TEST_LETODB\letodb.log 02/27/13 10:45:22: Leto DB Server has been started. Leto DB Server v.2.09 ! INIT: DataPath=D:\@TEST_LETODB\DATA, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10 Собираю на хХарборе 1.2.1 пример test_var.exe, запускаю: D:\@TEST_LETODB\PRG>test_var.exe Connect to //127.0.0.1:2812/temp/test - Ok Adding 'var_int' = 100 to [main] - Err (3) Adding 'var_int' = 100 to [main] - Ok Adding 'var_log' = .T. to [main] - Ok Adding 'var_char' = 'Just a small test;' to [main] - Ok Ну нет у меня такой папки - temp/test, а пишет что все Ok... У меня возращает - Connect to //127.0.0.1:2812/temp/test - Ok Это правило действует ТОЛЬКО на удаленные адреса ? На локальном компе ошибка генерироваться будет или нет ? Может 8-ка тупит ? Далее создаю еще папку D:\@TEST_LETODB\DATA\MyDir Делаю свой пример: Function Main Local cPath := "//127.0.0.1:2812/mydir" Local lRes ...... // создаю 2-тестовые базы.... Не могу создать базы, вешается программа - мертво с системной ошибкой... Ссылка на пример и ошибка, приведена выше ! Pasha пишет: цитата: | Андрей, у нас же уже был подобный разговор. Все эти действия - обработка ошибок, создание (dbCreate), поиск, фильтрация и прочее выполняются точно так же, как и для стандартных rdd харбора, |
| Может был, уже и не помню. Простите меня, памяти не хватает на все. С чем столкнулся, о том и пишу... Pasha пишет: цитата: | вырвано из контекста и относится к команде use, а не к leto_connect, которая только проверяет доступность сервера и коннектится с ним. Насколько я понимаю, с коннектом уже проблем нет. А с чем тогда есть ? С созданием папки ? Это что, очень сложно ? |
| Понял, спасибо. Видать по доке ошибся... Коннект есть. Папку ручками создал. Не могу создать файл DBF в папке MyDir ! Где и что не так делаю ? Как проверить, что можно в папке на сервере создать файл ?
|
|
|
AlexMyr
|
| |
Пост N: 736
Зарегистрирован: 11.06.10
|
|
Отправлено: 28.02.13 09:32. Заголовок: Andrey пишет: Ну не..
Andrey пишет: цитата: | Ну нет у меня такой папки - temp/test, а пишет что все Ok... У меня возращает - Connect to //127.0.0.1:2812/temp/test - Ok |
|
И правильно пишет, что ОК, это значит, что Вы успешно присоединились к серверу по ip адресу 127.0.0.1, на порту 2812. А /temp/... это уже где искать базы. В вашем случае temp/test не папка, а файл test в папке temp. Сначала попробуйте test_ta.prg покрутить.
|
|
|
AlexMyr
|
| |
Пост N: 737
Зарегистрирован: 11.06.10
|
|
Отправлено: 28.02.13 09:33. Заголовок: Andrey пишет: Далее..
Andrey пишет: цитата: | Далее создаю еще папку D:\@TEST_LETODB\DATA\MyDir Делаю свой пример: Function Main Local cPath := "//127.0.0.1:2812/mydir" Local lRes ...... // создаю 2-тестовые базы.... Не могу создать базы, вешается программа - мертво с системной ошибкой... Ссылка на пример и ошибка, приведена выше ! |
| Правильно будет Local cPath := "//127.0.0.1:2812/mydir/"
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2702
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.02.13 13:12. Заголовок: AlexMyr пишет: Прав..
|
|
|
Pasha
|
| Администратор
|
Пост N: 2701
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.02.13 13:23. Заголовок: Andrey пишет: Что я..
Andrey пишет: Мне кажется, надо все-таки пересобрать rddleto.lib своей версией xHarbour. Я выкладывал сборку этой библиотеки с xHarbour SVN, и она может быть несовместима с более ранней версией xHarbour.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2703
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.02.13 14:13. Заголовок: Спасибо.Понял. Буду ..
Спасибо.Понял. Буду пробовать.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2705
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.02.13 17:03. Заголовок: Pasha пишет: Я выкл..
Pasha пишет: цитата: | Я выкладывал сборку этой библиотеки с xHarbour SVN, и она может быть несовместима с более ранней версией xHarbour. |
| Точно, не совместима ! Скачал xHarbour 1.2.3 SVN и ВСЕ ЗАРАБОТАЛО.... Блин, как баран в стенку долбился... Pasha а нельзя где нибудь файлик к этой либе ( lib.xharbour\rddleto.lib ) приложить - типа "совместимо/собрано только для xHarbour 1.2.3 SVN" ? Другие чтобы не залетали... А еще лучше запросить версию rddleto.lib из своей программы, функцию какую нибудь. Так можно ?
|
|
|
Dima
|
| |
Пост N: 2645
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.02.13 18:25. Заголовок: Pasha А в LetoDB ес..
Pasha А в LetoDB есть серверные (оптимизированные) фильтры как в ADS ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2702
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.02.13 19:51. Заголовок: Andrey пишет: Pasha..
Andrey пишет: цитата: | Pasha а нельзя где нибудь файлик к этой либе ( lib.xharbour\rddleto.lib ) приложить - типа "совместимо/собрано только для xHarbour 1.2.3 SVN" ? Другие чтобы не залетали... |
| Мое упущение. Сейчас уже архив перезаливать не буду, учту на следующий раз. цитата: | А еще лучше запросить версию rddleto.lib из своей программы, функцию какую нибудь. Так можно ? |
| Версию клиента можно запросить вызовом dbinfo(DBI_RDD_VERSION) версию letodb сервера, к которому выполнен коннект: LETO_GETSERVERVERSION() Но это все не для случая сборки программы и клиентской библиотеки разными версиями харбора.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2703
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.02.13 19:53. Заголовок: Dima пишет: А в Let..
Dima пишет: цитата: | А в LetoDB есть серверные (оптимизированные) фильтры как в ADS ? |
| Да, конечно. При установке фильтра командой set filter сервер пытается выполнить выражение фильтра. Если попытка успешна, то устанавливается серверный фильтр, если нет - фильтр выполняется на клиенте.
|
|
|
Dima
|
| |
Пост N: 2646
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.02.13 20:42. Заголовок: Pasha Понял. А как ..
Pasha Понял. А как узнать успешна ли попытка установки фильтра на сервере ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2704
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.02.13 21:04. Заголовок: После dbSetFilter на..
После dbSetFilter надо вызвать проверку: LETO_ISFLTOPTIM() Фильтр может быть неоптимальным (клиентским), если в нем присутствуют переменные памяти или вызовы функций, незарегистрированных на сервере. Еще сервер не поймет ссылки на другие рабочие области. Я не рассматриваю случай просто неверного выражения.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2708
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.02.13 21:57. Заголовок: На МиниГуи с ходу ст..
На МиниГуи с ходу стало собираться и конектиться... Вопрос по путям: D:\@TEST_LETODB\letodb.ini [MAIN] Port=2812 Log=letodb.log DataPath=D:\@TEST_LETODB\DATA Посмотрел лог-файл на всякий случай: 02/28/13 23:11:37: Leto DB Server has been started. Leto DB Server v.2.09 ! INIT: DataPath=D:\@TEST_LETODB\DATA, ShareTables=.... У меня в программе: #include "rddleto.ch" #include "minigui.ch" Local cPath := "//127.0.0.1:2812/" ..... // Создать базу перед формой, иначе данные будут недоступны MyDbf866(cPath) .... ITEMS LoadDbf866(cPath) ; // загрузить базу на форму // далее эти 2 функции Скрытый текст //////////////////////////////////////////////////////////// Procedure MyDbf866(cPath) LOCAL cFileDbf, aDbf := {}, nI cFileDbf := cPath + "test866.dbf" AADD( aDbf , {"FIO" ,"C", 25,0 } ) AADD( aDbf , {"STATUS" ,"C", 10,0 } ) AADD( aDbf , {"CLASS" ,"C", 4,0 } ) DBCreate( cFileDbf, aDbf ) USE ( cFileDbf ) Alias TEMP866 CODEPAGE "RU866" NEW EXCLUSIVE aDbf := {} AADD( aDbf , {"Петров Артем" ,"ученик" ,"1a"} ) ........................... AADD( aDbf , {"Куликов Сергей Борисович" ,"учитель","-"} ) SELECT TEMP866 FOR nI := 1 TO LEN(aDbf) APPEND BLANK TEMP866->FIO := aDbf[nI,1] TEMP866->STATUS := aDbf[nI,2] TEMP866->CLASS := aDbf[nI,3] NEXT CLOSE TEMP866 Return //////////////////////////////////////////////////////////// FUNCTION LoadDbf866(cPath) LOCAL aRows := {}, cFileDbf, cNum cFileDbf := cPath + "test866.dbf" MsgInfo("LETO_FILE( "+cFileDbf+" )=" ) MsgInfo( LETO_FILE( cFileDbf ) ) IF !LETO_FILE( cFileDbf ) AAdd( aRows, {"", "Нет базы / No Base !" , "" , "" } ) AAdd( aRows, {"", cPath , "test866.dbf" , "" } ) ELSE // открытие базы 866 / open base 866 USE ( cFileDbf ) Alias TEMP866 CODEPAGE "RU866" //NEW SHARED SELECT TEMP866 GOTO TOP DO WHILE !EOF() cNum := ALLTRIM(STR( RECNO() ))+"." AAdd( aRows, {cNum, ALLTRIM(FIELD->FIO) , FIELD->STATUS, FIELD->CLASS } ) SKIP ENDDO CLOSE TEMP866 ENDIF RETURN aRows
| Так вот сам вопрос. База успешно создается по пути: D:\@TEST_LETODB\DATA\test866.dbf А почему при открытии в функции LoadDbf866(cPath) cFileDbf := cPath + "test866.dbf" IF !LETO_FILE( cFileDbf ) -> возвращает .F. Что я не так делаю ?
|
|
|
AlexMyr
|
| |
Пост N: 738
Зарегистрирован: 11.06.10
|
|
Отправлено: 28.02.13 22:14. Заголовок: Andrey пишет: IF !L..
Andrey пишет: цитата: | IF !LETO_FILE( cFileDbf ) -> возвращает .F. |
| в letodb.ini надо EnableFileFunc = 0 - если 1, разрешено использование файловых функций ( leto_file(), leto_ferase(), leto_frename(); читаем readme
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2709
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.02.13 22:19. Заголовок: AlexMyr пишет: чита..
AlexMyr пишет: Спасибо БОЛЬШОЕ ! Пропустил.... А как заставить запущенную службу LETODB перечитать заново letodb.ini ?
|
|
|
AlexMyr
|
| |
Пост N: 739
Зарегистрирован: 11.06.10
|
|
Отправлено: 28.02.13 22:24. Заголовок: Andrey пишет: А как..
Andrey пишет: администрирование-службы-letodb-перезапустить
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2710
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.02.13 22:38. Заголовок: AlexMyr пишет: адми..
AlexMyr пишет: цитата: | администрирование-службы-letodb-перезапустить |
| Это понятно, а как на ходу перечитать конфигурацию сервера ? Если удаленно нужно это сделать ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2706
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.03.13 09:40. Заголовок: Только перезапуск сл..
Только перезапуск службы Его можно автоматизировать батником: net stop "LetoDB Service" net start "LetoDB Service"
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2713
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.13 10:00. Заголовок: Pasha пишет: Его мо..
Pasha пишет: цитата: | Его можно автоматизировать батником: |
| Спасибо БОЛЬШОЕ ! А не планируется ли какая то хитрая команда на сервер LetoDB чтобы на "ходу" править конфигурацию его. А то если нет доступа по удаленке на комп, то труба... Ножками топать придется к заказчику...
|
|
|
PSP
|
| постоянный участник
|
Пост N: 838
Зарегистрирован: 27.01.07
|
|
Отправлено: 01.03.13 10:17. Заголовок: Андрей, зачем? ..
Андрей, зачем?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2707
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.03.13 10:32. Заголовок: Andrey пишет: А не ..
Andrey пишет: цитата: | А не планируется ли какая то хитрая команда на сервер LetoDB чтобы на "ходу" править конфигурацию его. А то если нет доступа по удаленке на комп, то труба... Ножками топать придется к заказчику... |
| Не планируется. Этих настроек всего-то 3-4 позиции, и выставить их правильно изначально труда не составляет.
|
|
|
Dima
|
| |
Пост N: 2647
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.03.13 10:33. Заголовок: PSP пишет: А не пла..
PSP пишет: цитата: | А не планируется ли какая то хитрая команда на сервер LetoDB чтобы на "ходу" править конфигурацию его |
| Даже в ADS нет такого.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2714
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.13 14:28. Заголовок: Уже и сразу запинали..
Уже и сразу запинали....
|
|
|
Dima
|
| |
Пост N: 2655
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.03.13 17:28. Заголовок: Что то не могу обнов..
|
|
|
Pasha
|
| Администратор
|
Пост N: 2710
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.03.13 21:53. Заголовок: Только что успешно о..
Только что успешно обновился с точно такими же параметрами. Но у меня очень старая версия TortoiseCVS: 1.8.3 2004 года С тех пор, как начал работать с харбором (делать коммиты) - не обновлял ее. А это было 9 лет назад
|
|
|
Pasha
|
| Администратор
|
Пост N: 2711
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.03.13 21:56. Заголовок: AlexMyr пишет: Если..
AlexMyr пишет: цитата: | Если не задана настройка формата memo в letodb.ini, то возвращать логически ожидаемое для DBFCDX - fpt, DBFNTX - dbt, если задан формат, то это значение. |
| Наконец-то дошли руки, и сделал поддержку параметра Memo_Type в letodb.ini
|
|
|
Dima
|
| |
Пост N: 2656
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 11:29. Заголовок: Dima пишет: Что то ..
Dima пишет: цитата: | Что то не могу обновиться |
| Переустановил TortoiseCVS , заработало ;)
|
|
|
Dima
|
| |
Пост N: 2657
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 13:14. Заголовок: Pasha А какие то тр..
Pasha А какие то требования к OS Windows есть , там где будет крутится LetoDB Server ? Это должна быть серверная OS или нет ? Я имею в виду что на обычной винде не серверной есть ограничение на кол-во подключений по сети.
|
|
|
PSP
|
| постоянный участник
|
Пост N: 840
Зарегистрирован: 27.01.07
|
|
Отправлено: 03.03.13 14:31. Заголовок: LetoDB не создает кл..
LetoDB не создает клиентскую сессию Windows. Так что эти ограничения его не касаются.
|
|
|
Dima
|
| |
Пост N: 2658
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 14:40. Заголовок: PSP Спасиб..
PSP Спасиб
|
|
|
Dima
|
| |
Пост N: 2659
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 15:51. Заголовок: Pasha пишет: Да, ко..
Pasha пишет: цитата: | Да, конечно. При установке фильтра командой set filter сервер пытается выполнить выражение фильтра. Если попытка успешна, то устанавливается серверный фильтр, если нет - фильтр выполняется на клиенте. |
| Это понятно. А серверные фильтры оптимизированы (при наличии соответствующего индекса) как в ADS или SIX ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2712
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.03.13 17:04. Заголовок: Dima пишет: А серве..
Dima пишет: цитата: | А серверные фильтры оптимизированы (при наличии соответствующего индекса) как в ADS или SIX ? |
| Нет, не оптимизированы, поскольку их не поддерживает сам харбор В этом случае фильтр надо самому разделить на 2 части: для индексных полей использовать set scope, для неиндексных - set filter
|
|
|
Dima
|
| |
Пост N: 2660
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 17:07. Заголовок: Pasha пишет: Нет, н..
Pasha пишет: цитата: | Нет, не оптимизированы, поскольку их не поддерживает сам харбор |
| А планируется ли такая фича ? По ходу харбор их не поддерживает но ведь они все же поддерживаются в RDDADS а точнее сказать наверное в ADS сервере.
|
|
|
Dima
|
| |
Пост N: 2661
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 17:40. Заголовок: Pasha пишет: Нет, н..
Pasha пишет: цитата: | Нет, не оптимизированы, поскольку их не поддерживает сам харбор |
| А это что тогда ? SET OPTIMIZE ON | OFF | (<lToggle>) Arguments ON enables optimization. OFF disables optimization. <lToggle> is a logical expression that must be enclosed in parentheses. A value of true (.T.) is the same as ON, and a value of false (.F.) is the same as OFF. Note: The initial default of this setting depends on the RDD. Description The SET OPTIMIZE command determines whether or not to optimize filters in the current work area. Optimization is based on index expressions of indexes open in the current work area. When a filter condition matches with an index expression, the RDD, such as DBFCDX, compares values stored in the index rather than the database. This leads to an enhanced performance since less disk I/O is required during database navigation.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2713
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.03.13 17:45. Заголовок: Dima пишет: А плани..
Dima пишет: цитата: | А планируется ли такая фича ? По ходу харбор их не поддерживает но ведь они все же поддерживаются в RDDADS а точнее сказать наверное в ADS сервере. |
| Даже Przemek не упоминал об этом. А rddads поддерживает такие фильтры, поскольку их поддерживает сам Ads.
|
|
|
Dima
|
| |
Пост N: 2662
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.03.13 17:57. Заголовок: Dima пишет: SET OPT..
Dima пишет: Не фига она не оптимизирует. Нужный индекс есть , ставлю фильтр и получаю такой же тормоз как и без индекса. Упс ;) Не прав. Не ту доку смотрел. Оптимизирует но только "BMDBFCDX"
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2724
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.13 19:42. Заголовок: Dima пишет: SET OPT..
Dima пишет: цитата: | SET OPTIMIZE ON | OFF | (<lToggle>) |
| Я тоже расстраивался, когда перешел с Клипера на Харбор. Pasha пишет: Вопрос по НАСТРОЙКЕ LetoDB. Как настроить его для внешней и внутренней сети одновременно. Т.е. нужно, чтобы часть рабочих станций работала через внешний IP, а часть по локальной сети предприятия. Как быть в этом случае ?
|
|
|
a_sidorov
|
| |
Пост N: 36
Зарегистрирован: 07.06.08
|
|
Отправлено: 03.03.13 20:06. Заголовок: Так ты настраивай пр..
Так ты настраивай программу, а не LetoDB. LetoDB будет свой на каждом сервере. А как и где открывать файлы решать программе. Можно часть файлов открывать без Letodb. Я определяю это в зависимости от пути к файлам. Если путь к серверу с LetoDВ, открываю файл VIA LETO. Программе все равно, сколько серверов и сколько LetoDB используется. Я таким образом синхронизирую данные на удаленном сервере со своим сервером, оба на разных LetoDB. Для программы это просто разные пути к файлам, открытые VIA LETO и все.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2714
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.03.13 20:11. Заголовок: Andrey пишет: Как н..
Andrey пишет: цитата: | Как настроить его для внешней и внутренней сети одновременно. Т.е. нужно, чтобы часть рабочих станций работала через внешний IP, а часть по локальной сети предприятия. |
| Если я правильно понял, letodb сервер планируется поставить один, но часть клиентов будет к нему обращаться по ЛВС, а часть - через интернет. В любом случае на клиенте должна быть настройка адреса сервера. Если это для ЛВС - то это должен быть ip или имя компьютера внутри ЛВС, если через интернет - то внешний ip компьютера, на котором работает сервер letodb.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2725
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.13 20:32. Заголовок: Pasha пишет: Если ..
Pasha пишет: цитата: | Если я правильно понял, letodb сервер планируется поставить один |
| Да, именно так ! А кто так работает, поделитесь статистикой, нормально ли работает ? Можно ли по сотовому модему (медленному) работать с базой через LetoDB ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2715
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.03.13 22:24. Заголовок: Andrey пишет: А кто..
Andrey пишет: цитата: | А кто так работает, поделитесь статистикой, нормально ли работает ? Можно ли по сотовому модему (медленному) работать с базой через LetoDB ? |
| Все зависит от того, насколько медленному. Я работал через инет соединение только в качестве теста. С обеих сторон скорость была не очень высокой. Кое-какие операции пришлось оптимизировать. Я в letodb.ini включал опцию "Debug=10", и анализировал лог запросов. Сразу становилось видно, что неоптимально. Те операции, которые в локалке были некритичными, через инет тормозили работу. В результате оптимизации получилось более-менее приемлемо. Но это был только тест.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 147
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.03.13 09:23. Заголовок: Andrey пишет:А кто т..
Andrey пишет: цитата: | А кто так работает, поделитесь статистикой, нормально ли работает ? Можно ли по сотовому модему (медленному) работать с базой через LetoDB ? |
| LetoDB от 21.04.2011, hb 2.0, bcc. Тесты проводил под Петербургом (10 км) операторы Bilain, MTC, в Риге и 40 км от нее (примерно 1.5 года назад). Сервер в Риге. Скорости соединения примерно одинаковые (в Риге чуть быстрее). Про загрузку dbf на сервер я уже писал и там же были базовые исходники тестов. Browse (WVT, 80, 25) длина записи в базе ~3K предел скорости просмотра, добавленный relation к др. области - это все встало. Browse на длину записи в базе ~1K и два relation держит приемлемо, длина записи в базе 50-300 байт - можно сказать летают. Самые быстрые операции - выборка, длина записи в базе 400-1000 байт за 1.5 сек. отбираются ~2000-4000 записей. После тестирования, мы стали использовать rdd MEMIO, куда делаем выборки и Browse работает на MEMIO, связывая MEMIO relation по RecNo или ключам с сервером или с dbf на MEMIO (справочники). Сейчас такую штуку используем при переводе Clipper,WVT на MiniGui MDI (правда пока без сервера - надо интерфейс и алгоритмы перевести и потом подключать сервер). В связи с такой методикой работы, показался очень интересным использовать skip буфер, в новой версии LetoDB (приставал к Паше с вопросами где то выше), что бы в skip буфере использовать список нужных полей и сразу колонку с RecNo dbf сервера, а не весь буфер записи.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2716
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.03.13 10:19. Заголовок: Добавлю, что надо пр..
Добавлю, что надо правильно использовать skip-буфер: скажем, для browse задавать его не меньше кол-ва строк для просмотра. Еще я стал активно использовать seek-буфер, в каких-то случаях очень помогает. В целом все зависит от скорости соединения и от того, как написана программа. Можно и для скорости в десятки мегабит сделать программу так талантливо, что она будет висеть. Для медленного gprs соединения надо уж очень постараться. Для скорости порядка сотен KB - единиц MB тоже надо хорошо приложить руки, чтобы добиться нормальной работы.
|
|
|
a_sidorov
|
| |
Пост N: 37
Зарегистрирован: 07.06.08
|
|
Отправлено: 04.03.13 14:10. Заголовок: Опыт следующий: Три ..
Опыт следующий: Три сервера Letodb, с добавленными функциями и транслированные на xHarbour 1.2.1, расположенными в разных точках Москвы(2 сервера и 1 локалка с сервером LetoDB , подключенная через Синтерра). Пользователи (программа на XHarbour 1.2.1) работают на трех независимых БД из соображения надежности как по питанию, так и по другим критериям. Программа синхронизации на xHarbour 1.2.1 (доступ к серверам через Letodb) раз в час синхронизирует все данные на трех серверах (двух серверах и локалке), перенося измененные данные. Программа синхронизации установлена на одном из серверов, где больше данных. Поскольку это СРМ, считается, что один клиент в течение времени синхронизации не покупает в разных офисах. Индексы NTX.
|
|
|
Dima
|
| |
Пост N: 2665
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.03.13 14:38. Заголовок: По поводу ошибки let..
По поводу ошибки leto_errInternal!!!!!!!!!!!!!!!!!! в letodb.log 1. letodb.exe install (перед этим я остановил и удалил сервис Leto) 2. Лезем в панель управления в службы и стартуем LetoDB (это окно у меня уже было открыто) 3. Запускаем приложение и оно как бы подвисает на строке leto_Connect( "//127.0.0.1:2812/" ) , затем пара-тройка виндовых ошибок вылазит и прога падает при открытии базы с месагой Error leto/1000 data type error В логе видим leto_errInternal!!!!!!!!!!!!!!!!!! А вот так ошибки нет 1. letodb.exe install (перед этим я остановил и удалил сервис Leto) 2. net start "LetoDB Service" PS Не понятно кто виновник , винда (XP SP 3) или сервис Leto При чем происходит так через раз.
|
|
|
Dima
|
| |
Пост N: 2666
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.03.13 14:57. Заголовок: Dima пишет: 2. Лезе..
Dima пишет: цитата: | 2. Лезем в панель управления в службы и стартуем LetoDB (это окно у меня уже было открыто) |
| Похоже в этом причина. Окно с сервисами не автообновляется. И если я вижу что сервис запущен то на самом деле он может быть и не запущен вовсе. Что бы увидеть реальную картину окно надо обновить ручками или закрыть/открыть.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 148
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.03.13 00:43. Заголовок: Паша, в версии Chang..
Паша, в версии Changelog,v 1.350 2011/04/21 18:00:52 есть LETO_SETSKIPBUFFER( nSkip ), но в readme нет как использовать, что дает nSkip ? Если можно разъясните.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2719
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.03.13 08:53. Заголовок: В текущем readme ест..
В текущем readme есть описание: Skip-буфер предназначен для оптимизации множественных вызовов skip Эта функция задает размер в записях для skip-буфера для текущей рабочей области. По умолчанию размер skip-буфера 10 записей. Skip-буфер является двунаправленным. skip-буфер сбрасывается после BUFF_REFRESH_TIME (1 сек) Если параметр функции опущен, она возвращает статистику использования буфера (количество попаданий) Проще говоря, при выполнении команд skip(1), skip(-1) сервер передает клиенту не одну запись, а nSkip записей, и при последующих вызовах skip обращения к серверу не будет, клиент возьмет запись из буфера.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 149
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.03.13 12:19. Заголовок: Pasha пишет:Skip-буф..
Pasha пишет: цитата: | Skip-буфер предназначен ... |
| СПАСИБО за разъяснение. Pasha пишет: цитата: | В текущем readme есть описание |
| У меня версия: readme_rus.txt,v 1.12.2.16 2012/02/23 15:38:35. В ней только: LETO_SETSKIPBUFFER( nSkip ) --> nCount (статистика использования буфера) LETO_SETSEEKBUFFER( nRecsInBuf ) --> nCount (статистика использования буфера) Буду обновляться.
|
|
|
Dima
|
| |
Пост N: 2673
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.03.13 12:26. Заголовок: SergKis пишет: read..
SergKis пишет: цитата: | readme_rus.txt,v 1.12.2.16 2012/02/23 15:38:35 |
| последняя вроде такая /* $Id: readme_rus.txt,v 1.12.2.29 2013/03/02 18:45:45 ptsarenko Exp $ */
|
|
|
Dima
|
| |
Пост N: 2688
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.03.13 10:24. Заголовок: Pasha А если в Leto..
Pasha А если в Leto юзать RDD DBFSIX или BMDBFCDX , Leto будет так же эффективно работать как и с DBFCDX ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2725
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.03.13 11:16. Заголовок: В харборе функционал..
В харборе функциональность six в основном включена в DBFCDX, так что она и сейчас в основном доступна через вызовы dbInfo и dbOrderInfo "В основном" я говорю потому, что не все команды DBI_* и DBOI_* реализованы в rdd leto. Каких не хватает - надо смотреть. А насчет BMDBFCDX - можно было бы сделать возможность сборки сервера letodb, в котором в качестве стандартных rdd вместо DBFCDX/DBFNTX использовались бы BMDBFCDX/BMDBFNTX, тем более они их наследники. Еще конечно нужно реализовать семейство функций BM_*, причем и на клиенте, и на сервере. Сделать это лучше через вызовы UDF-функций, чтобы не перегружать существующий низкоуровневый протокол передачи между клиентом и сервером. Думаю, как это лучше прикрутить.
|
|
|
Dima
|
| |
Пост N: 2690
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.03.13 13:58. Заголовок: В большей степени ко..
В большей степени конечно интересен BMDBFCDX/BMDBFNTX , про SIX это я так просто спросил "паровозиком".
|
|
|
Dima
|
| |
Пост N: 2697
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.03.13 12:06. Заголовок: Как можно объяснить ..
Как можно объяснить медленный SKIP по базе (чем то похож на медленный Skip в ADS) ? Для примера взял базу 700000 записей DBFCDX Скипал всю базу Время 0.23 сек Leto (локально 127.0.0.1) на том же тесте 75 секунд Соответственно если юзать бровс то с Leto заметны задержки Dima пишет: цитата: | Соответственно если юзать бровс то с Leto заметны задержки |
| Упс. LETO_SETSKIPBUFFER в какой то мере решает эту проблему.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2730
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.03.13 12:31. Заголовок: Еще tbrowse любит вс..
Еще tbrowse любит все время опрашивать RecCount(), на каждой записи, а это дополнительные обращения к серверу, причем много. Для буферизации этих вызовов надо после коннекта к серверу задать настройку: RddInfo( RDDI_REFRESHCOUNT, .F.,, 1 ) В ads тоже есть подобная настройка.
|
|
|
Dima
|
| |
Пост N: 2699
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.03.13 12:39. Заголовок: Pasha пишет: RddInf..
Pasha пишет: цитата: | RddInfo( RDDI_REFRESHCOUNT, .F.,, 1 ) |
| Помогло , спасибо !
|
|
|
Dima
|
| |
Пост N: 2700
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.03.13 13:30. Заголовок: Pasha пишет: В ads ..
Pasha пишет: цитата: | В ads тоже есть подобная настройка |
| В Harbour ? Не нашел. А в Clipper есть ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2731
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.03.13 14:00. Заголовок: Она есть в самом Ads..
Она есть в самом Ads. Год назад я ее добавил для xHarbour: 2012-03-19 18:55 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * contrib/rdd_ads/ads.ch * contrib/rdd_ads/ads1.c * contrib/rdd_ads/rddads.h * added new flag for RddInfo: RDDI_REFRESHCOUNT. By default, this flag is set to true. This flag is used for management of ADS_REFRESHCOUNT flag in adsRecCount function. в Harbour ее действительно не перетянули. Для клиппера даже не знаю, как она используется, если используется вообще. Клиент то совсем другой, старый, закрытый.
|
|
|
Dima
|
| |
Пост N: 2703
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.03.13 16:21. Заголовок: Проверил работу Leto..
Проверил работу Leto через инет. Leto База в одном городе , Leto клиент в другом. Относительно не плохо работает. В частности проверил удаленно BM фильтра , ставятся моментально. Установки на клиенте RddInfo( 101, .F.,, 1 ) LETO_SETSKIPBUFFER(10000) Бровс конечно подтормаживает. Будут какие то рекомендации ? ЗЫ Если LetoDB.ini нет в папке откуда стартовал LetoDB Server , разве LetoDB Server не должен сам его создать с установками по умолчанию ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2733
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.03.13 17:36. Заголовок: Dima пишет: LETO_SE..
Dima пишет: цитата: | LETO_SETSKIPBUFFER(10000) Бровс конечно подтормаживает. Будут какие то рекомендации ? |
| Не надо 10000 задавать. За раз передается 10000 записей, а это много, пакет большой. Да и не надо столько, ведь время актуальности буфера 1 секунда. Достаточно задать размер, равный к-ву строк в бровсе, ну или maxrow() Дополню. Это для ЛВС для времени актуальности буфера 1 сек достаточно. Для медленного соединения лучше задать побольше. Это или глобальная установка: 5-й параметр функции leto_Connect, или для конкретной рабочей области задается вызовом dbInfo( DBI_BUFREFRESHTIME[, nNewVal]) Значение задается в 0.01 сек. цитата: | ЗЫ Если LetoDB.ini нет в папке откуда стартовал LetoDB Server , разве LetoDB Server не должен сам его создать с установками по умолчанию ? |
| Файл ini не создается, просто задаются установки по умолчанию. Но ini файл нужен хотя бы для указания DataPath Мой стандартный letodb.ini: DataPath = <path> EnableFileFunc = 1 EnableAnyExt = 1 Optimize = 1 AutOrder = 1
|
|
|
Dima
|
| |
Пост N: 2713
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 11:15. Заголовок: Лето собран как серв..
Лето собран как сервис. Периодически падает прога на строке LETO_CONNECT("//127.0.0.1:2812/") В логе DEBUG! new connect 127.0.0.1 (0 : 1 : 1) leto_errInternal!!!!!!!!!!!!!!!!!! А винда пишет szAppName : letodb.exe szAppVer : 0.0.0.0 szModName : letodb.exe szModVer : 0.0.0.0 offset : 000b23dc После этого сервис лето падает. Как я это получил ? Остановил и удалил сервис Затем Letodb install , net start "LetoDB Service" Запустил свой примерчик пару тройку раз (все норм но только порой долго думает прога на строке LETO_CONNECT) и на 4 раз вот такое вылазит . PS еще наблюдение. если пересобрать клиентское приложение то в 30% после первого запуска LETO_CONNECT выдаст -1 Dima пишет: цитата: | PS еще наблюдение. если пересобрать клиентское приложение то в 30% после первого запуска LETO_CONNECT выдаст -1 |
| PS1 Интенсивно мучаю Leto уже 30 минут и такого больше не повторяется.....странно
|
|
|
Dima
|
| |
Пост N: 2715
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 16:05. Заголовок: А как быть с копиров..
А как быть с копированием файлов на Leto Server ? cserv:="//127.0.0.1:2812/" copy file test.txt to (cserv+"test1.txt") Получаю Dos error 1231 Среди лето функций что типа leto_copyfile в описании не увидел. Вполне устроила бы функция позволяющая копировать файлы "внутри" сервера , что то типа Leto_filecopy(cserv+"test.txt",cserv+"test1.txt")
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2731
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.03.13 18:15. Заголовок: Dima пишет: А как б..
Dima пишет: цитата: | А как быть с копированием файлов на Leto Server ? |
| Я тоже на этом залетал... Я бы тоже не отказался от функций: Leto_filecopy(cServer+"test.txt",cServer+"test1.txt") Leto_filecopy(cLocal+"test.txt",cServer+"test1.txt") Leto_filecopy(cServer+"test.txt",cLocal+"test1.txt") AlexMyr пишет: цитата: | в letodb.ini надо EnableFileFunc = 0 - если 1, разрешено использование файловых функций ( leto_file(), leto_ferase(), leto_frename(); читаем readme |
|
|
|
|
Dima
|
| |
Пост N: 2716
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 18:46. Заголовок: Pasha А в чем разни..
Pasha А в чем разница между leto_RecLock() и RLock() если база открыта с RDD Leto и нужно залочить текущую запись ? ЗЫ Что то Пашу мы завалили вопросами , надо взять таймаут В свое время я был тестером Winpint и тоже заваливал автора вопросами и пожеланиями. В итоге продукт получился отличный
|
|
|
Pasha
|
| Администратор
|
Пост N: 2742
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.13 19:28. Заголовок: Dima пишет: Периоди..
Dima пишет: цитата: | Периодически падает прога на строке LETO_CONNECT("//127.0.0.1:2812/") |
| Чего-чего, а такой нестабильной работы с letodb у меня никогда не было, да еще на элементарном коннекте. Если бы сервер где-нибудь упал, шума было бы много. Но такого не было. Конечно, это версия letodb+bm, она только что появилась. Но все фичи bmdbf при коннекте еще не задействованы. Непонятно.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2743
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.13 19:30. Заголовок: Dima пишет: А как б..
Dima пишет: цитата: | А как быть с копированием файлов на Leto Server ? |
| Надо использовать функции leto_MemoWrite и leto_FileWrite
|
|
|
Pasha
|
| Администратор
|
Пост N: 2744
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.13 19:34. Заголовок: Dima пишет: А в чем..
Dima пишет: цитата: | А в чем разница между leto_RecLock() и RLock() если база открыта с RDD Leto и нужно залочить текущую запись ? |
| leto_RecLock предназначена для использования исключительно на сервере, в udf-функциях. А с клиента надо работать стандартными средствами rlock/flock/dbRLock На сервере их использовать нельзя, поскольку смысл блокировок на сервере другой. Сервер открывает файлы (при стандартном режиме) монопольно, и блокировки там выполняются логически.
|
|
|
Dima
|
| |
Пост N: 2718
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 19:36. Заголовок: Pasha Спасибо за ра..
Pasha Спасибо за разъяснения !
|
|
|
Pasha
|
| Администратор
|
Пост N: 2745
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.13 21:29. Заголовок: Dima пишет: еще наб..
Dima пишет: цитата: | еще наблюдение. если пересобрать клиентское приложение то в 30% после первого запуска LETO_CONNECT выдаст -1 |
| Я тоже напоролся на это. Пока 2 предположения: или служба "еще не до конца запустилась", а клиент уже коннектится к ней и валит ее (я службу постоянно останавливаю-пересобираю-запускаю-запускаю тест). Либо все-таки есть какой то баг в операциях с памятью, связанный с BM Но у меня эта ситуация возникает только в момент первого запуска теста после старта службы.
|
|
|
Dima
|
| |
Пост N: 2720
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 22:03. Заголовок: Pasha пишет: Но у м..
Pasha пишет: цитата: | Но у меня эта ситуация возникает только в момент первого запуска теста после старта службы |
| я тоже обратил на это внимание , закономерности пока не понял. в течении дня таких глюков больше не было. Pasha пишет: цитата: | Либо все-таки есть какой то баг в операциях с памятью, связанный с BM |
| Не знаю. Еще до того как начинаю юзать BM то падало на LETO_CONNECT() Если мне не изменяет память то еще до ввода BM такой глюк имел место , возможно сервис LetoDB еще не до конца запустился. В свое время именно из за этого я и не стал тестить Leto. Поживем , посмотрим , может и найдем что. А вообще LetoDB мне уже начинает нравиться ;) Мне вот просто интересно. В плане надежности имеет значение как юзать сервер Leto , как SERVICE или DAEMON ? Чисто в теории разницы в надежности и стабильности быть не должно.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2746
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.13 22:24. Заголовок: Сбросил изменения на..
Сбросил изменения на CVS Для того, чтобы по команде SET FILTER формировался bitmap-фильтр, надо в letodb.ini задать параметр: ForceOpt = 1 А насчет демона - я, как только появилась служба, демон не использовал ни разу. Служба намного удобнее. Нет проблем с правами доступа. Запускает ее сама система, не нужен вход пользователя.
|
|
|
Dima
|
| |
Пост N: 2721
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 22:42. Заголовок: Pasha пишет: Сброси..
Pasha пишет: Спасибо , завтра проверю. Отпишу тут.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2748
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.13 22:55. Заголовок: Кстати, маленький нь..
Кстати, маленький ньюанс Я службу останавливать/запускать батником стал недавно, а до этого делал это через диспетчер служб. Там процесс запуска отображается на экране, и видно, когда служба запустилась. Поэтому тест "в процессе" никогда не коннектился. Если это делать из батника, то окончания запуска не видно, вот наверное и возникают накладки.
|
|
|
Dima
|
| |
Пост N: 2724
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.13 23:24. Заголовок: Pasha пишет: Я служ..
Pasha пишет: цитата: | Я службу останавливать/запускать батником стал недавно |
| Ну смотря как батник устроен. Если echo off то не видать ни чего а если echo on тогда виндец ошибку выдаст если что. Что то типа такого The requested service has already been started. More help is available by typing NET HELPMSG 2182.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2749
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.13 09:30. Заголовок: Есть еще пара момент..
Есть еще пара моментов. Во первых, при вызове LBM_dbSetFilterArray(), надо сбрасывать skip-буфер. Это я добавлю вечером. Во-вторых, я хочу все-таки сделать, чтобы не всякий фильтр строился как bitmap, а только если на клиенте также установлен _SET_FORCEOPT. Для этого эту настройку надо передавать серверу вместе с фильтром. Таким образом, на клиенте можно будет управлять, какой фильтр будет bitmap, а какой - обычный.
|
|
|
Dima
|
| |
Пост N: 2726
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 10:56. Заголовок: Да все заработало. П..
Да все заработало. По команде Set filter to так же ставится опт. фильтр. Но в этом случае LBM_DBGETFILTERARRAY() вернет 0 а это не правильно. Со сбросом фильтра все нормально. Есть правда не удобство но к нему можно и привыкнуть. LBM_DBSETFILTERARRAY({1,590,234,2345,7899,9000,700000}) go top // видим 7 записей LBM_DBSETFILTERARRAY({1,590) go top // видим 2 записи Тут все норм. А вот так нет Set filter to nomer==5 go top // видим 30 записей dbclearfilter() // нужно принудительно сбросить фильтр после Set filter to....... LBM_DBSETFILTERARRAY({1,590) go top // если фильтр не снять не увидим ни чего То есть поведение LBM_DBSETFILTERARRAY и у dbsetfilter() разное а должно быть одинаковое. В BMDBFCDX именно так
|
|
|
Dima
|
| |
Пост N: 2727
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 11:19. Заголовок: Dima пишет: copy fi..
Dima пишет: цитата: | copy file test.txt to (cserv+"test1.txt") |
| Pasha пишет: цитата: | Надо использовать функции leto_MemoWrite и leto_FileWrite |
| Да работает leto_memowrite(cserv+"test1.txt",leto_memoread(cserv+"test.txt")) или же можно поблочно , считывать и писать с помощью Leto_FileRead , Leto_FileWrite
|
|
|
Dima
|
| |
Пост N: 2729
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 11:29. Заголовок: Pasha Закроешь эту ..
Pasha Закроешь эту тему когда посчитаешь нужным. Продолжение будет в Leto DB Server (продолжение 9)
|
|
|
Dima
|
| |
Пост N: 2730
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 14:12. Заголовок: Pasha я тут подумал..
Pasha я тут подумал. может оставить в покое DBsetfilter и пусть он работает как и работал до введения BM , если это сложно. для установки BM фильтра вполне достаточно иметь LBM_DBSETFILTERARRAY а оптимально заполнить массив как бы и не проблема.
|
|
|
Ответов - 273
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
All
[только новые]
|
|