On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
Pasha
Администратор




Пост N: 2416
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.06.12 18:14. Заголовок: Leto DB Server (продолжение 8)


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

Спасибо: 0 
Профиль
Ответов - 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



Спасибо.

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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


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



Пост N: 68
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 26.06.12 09:38. Заголовок: Спасибо, буду пробов..


Спасибо, буду пробовать

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



Пост N: 69
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 26.06.12 10:36. Заголовок: Библиотеку hbct подк..


Библиотеку hbct подключил подправив файл makefile.bc и всё заработало.
Через скрипт сборки сервера letodb.hbp не хватило тяму.
Pasha можно пример на пальцах в студию?

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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

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




Пост N: 2422
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.06.12 11:55. Заголовок: Просто добавить стро..


Просто добавить строку:

-l<имя библиотеки>

в произвольное место этого скрипта, лучше перед списком модулей

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



Пост N: 71
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 26.06.12 12:09. Заголовок: Понял, спасибо..


Понял, спасибо

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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

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




Пост N: 2424
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.06.12 18:28. Заголовок: У меня есть предложе..


У меня есть предложение к уже использующим letodb. Прочтите документацию (readme.txt), какая она есть в нынешнем виде, и попробуйте в ней что-нибудь дополнить. Может быть, там не отражен какой-то момент, который был существенным для вас. Можно дополнить какой-либо раздел, или создать новый.
Это было бы полезно тем, кто только планирует использовать этот продукт.
Выкладывать можно сюда. На русском или английском языке.

Спасибо: 0 
Профиль
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 надо установить как службу, и потом ее запустить.



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



Пост N: 526
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 27.06.12 10:03. Заголовок: 3. 5. Соединен..


3.
5. Соединение с сервером клиентских программ

Чтобы сконнектиться с сервером, прежде всего необходимо прилинковать rddleto.lib (Windows)
или librddleto.a (Linux) к своему приложению ...

предлагаю упростить:

Чтобы сконнектиться с сервером, прежде всего необходимо прилинковать библиотеку rddleto
к своему приложению ...

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




Пост N: 2426
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.06.12 21:47. Заголовок: Спасибо, добавил в д..


Спасибо, добавил в доку. Меня удивило, что сервер еще можно собрать как демон под Windows. Сам я это не делал, с тех пор как была добавлена поддержка службы.

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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

Я думаю тут все ясно.

Спасибо: 0 
Профиль
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')
?

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



Пост N: 529
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 02.07.12 12:59. Заголовок: alex_II пишет: и ц..


alex_II пишет:

 цитата:
и цитирование лишний раз файла readme понимания ситуации не добавляет.

потому как мало кто его читает
Дайте самодостаточный пример и конкретно где лежат файлы из Вашего поста выше не ясно

Спасибо: 0 
Профиль
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


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



Пост N: 530
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 02.07.12 13:39. Заголовок: Паша, эти нюансы тож..


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

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




Пост N: 2429
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.07.12 14:03. Заголовок: AlexMyr пишет: Паша..


AlexMyr пишет:

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



Согласен, напишу

Спасибо: 0 
Профиль
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$
*/


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




Пост N: 2430
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.07.12 15:34. Заголовок: AlexMyr пишет: Паша..


AlexMyr пишет:

 цитата:
Паша, предлагаю адаптировать к harbour доке:



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


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



Пост N: 532
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 02.07.12 15:42. Заголовок: Pasha пишет: Принци..


Pasha пишет:

 цитата:
Принципиальных возражений конечно нет, но... это же надо все сделать, а когда - не знаю.

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

Спасибо: 0 
Профиль
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 оставить краткий перечень функций

Жаль, что А.Кресин не откликается, добавил бы вас в девелоперы. Я ему кстати в феврале писал, и даже получил от него ответ, но только один раз, больше он не отвечал.

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



Пост N: 533
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 02.07.12 16:26. Заголовок: Pasha пишет: Жаль, ..


Pasha пишет:

 цитата:
Жаль, что А.Кресин не откликается

в hwgui он появился в 06.06.2012, внес изменения о снова молчит.

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




Пост N: 2432
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.07.12 18:14. Заголовок: Выложил пример LetoD..


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


Спасибо: 0 
Профиль
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()

может что надо дописать? Получается, что на диск не сбрасывает, но такого быть не может И что делать?

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




Пост N: 2435
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.07.12 15:00. Заголовок: Я предполагаю, что э..


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

Спасибо: 0 
Профиль
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 тут не влияет, так?

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




Пост N: 2436
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.07.12 15:17. Заголовок: AlexMyr пишет: т.е...


AlexMyr пишет:

 цитата:
т.е. Optimize тут не влияет, так?



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

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



Пост N: 540
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.07.12 15:21. Заголовок: Pasha пишет: нажима..


Pasha пишет:

 цитата:
нажимать на кнопку reset и смотреть на результат.

винт жалко попробую достать старый комп, там потренеруюсь.

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


Пост N: 783
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 04.07.12 15:23. Заголовок: Паш, как-то не верит..


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

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



Пост N: 541
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.07.12 15:31. Заголовок: Еще забыл заметить, ..


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

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




Пост N: 2437
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.07.12 16:12. Заголовок: AlexMyr пишет: Паш,..


AlexMyr пишет:

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



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

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



Пост N: 542
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.07.12 16:26. Заголовок: Паша, спасибо, будем..


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

Спасибо: 0 
Профиль
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 подобной фичи нет. Такая оптимизация будет полезной для тонкого клиента. Какие могут быть при этом подводные камни ?


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



Пост N: 76
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 20.07.12 11:42. Заголовок: Помогите решить проб..


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

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




Пост N: 2463
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.07.12 12:08. Заголовок: alex_II Возможно ту..


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

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




Пост N: 2276
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.12 13:05. Заголовок: А почему ссылки на L..


А почему ссылки на LetoDB нет на самом главном сайте:
http://harbour-project.sourceforge.net/download_contrib.html

Это же большой промах...

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




Пост N: 2455
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.07.12 13:31. Заголовок: Andrey пишет: А поч..


Andrey пишет:

 цитата:
А почему ссылки на LetoDB нет на самом главном сайте:
http://harbour-project.sourceforge.net/download_contrib.html

Это же большой промах...



Там перечисляются только библиотеки, которые входят в поставку Harbour. А letodb - это отдельный проект.
У меня была мысль передать letodb в harbour\contrib, как один из вариантов, поскольку положение с проектом сейчас явно ненормальное, даже если кто-то захочет присоединиться к проекту - он не сможет этого сделать.
Но тогда может быть прекращена поддержка клиентской библиотеки для xHarbour, да и делать это без согласия автора проекта не хотелось бы.

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




Пост N: 2278
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.12 13:38. Заголовок: Все равно надо там р..


Все равно надо там разместить ссылки на LetoDB и выложить что-нибудь, пускай знают что есть классный продукт под Harbour.
И решить вопрос с автором проекта...

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




Пост N: 2456
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.07.12 13:44. Заголовок: Dima пишет: Возможн..


Dima пишет:

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



Скорее всего, надо сделать что-то вроде:
oB:bTagOrder := {|| ordNumber()}
для восстановления тэга при получении фокуса

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




Пост N: 2457
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.07.12 13:49. Заголовок: Andrey пишет: Все р..


Andrey пишет:

 цитата:
Все равно надо там разместить ссылки на LetoDB и выложить что-нибудь,



Разве что здесь:
http://harbour-project.sourceforge.net/third-party.html#RDD



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




Пост N: 2279
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.12 15:55. Заголовок: Pasha пишет: Разве ..


Pasha пишет:

 цитата:
Разве что здесь:
http://harbour-project.sourceforge.net/third-party.html#RDD


Да хотя бы туда.

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



Пост N: 77
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 21.07.12 06:13. Заголовок: Pasha пишет: Скорее..


Pasha пишет:

 цитата:
Скорее всего, надо сделать что-то вроде:
oB:bTagOrder := {|| ordNumber()}
для восстановления тэга при получении фокуса


Спасибо за подсказку, помогло!
Проверил вариант без letoDB, получил тот же глюк,
значит дело в TSBrowse

Спасибо: 0 
Профиль
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.
У меня при некоторых операциях блокируется свыше тысячи записей, и новая функция
позволит резко сократить количество запросов к серверу.

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




Пост N: 2291
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.12 11:40. Заголовок: Хорошее решение ! К..


Хорошее решение ! Классно !

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




Пост N: 2468
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.08.12 08:34. Заголовок: Вопрос касается выде..


Вопрос касается выделения памяти для списка блокированных записей в letodb сервере
В dbfcdx/dbfntx список построен как простой массив значений типа unsigned long (это номера блокированных записей)
При блокировке записи память под массив перевыделяется (его размер увеличивается), при снятии блокировки - размер уменьшается
В letodb сделано примерно аналогично, только память под массив увеличивается порциями по 50 элементов, а при снятии блокировки - размер не уменьшается.
В letodb это может привести к коллизиям при многопоточной обработке: при перевыделении памяти адрес массива может измениться, а в это время другой поток может к нему обращаться.
Предложите другой способ организации этого списка. Пока я вижу только простейший список со ссылкой на следующий элемент.
Может быть есть способ поэффективнее ?


Спасибо: 0 
Профиль
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 );

Зацикливания, даже теоретически, не произойдет ?


Спасибо: 0 
Профиль
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, оптимизирует эти циклы, и ничего не делает. Специально дизассемблировал на предмет посмотреть.
Оно не понимает, что к структуре имеет доступ другой поток, который может изменять значение флагов

Как сделать блокировку списка ? Может быть, у потоков есть стандартный механизм для этого ?


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




Пост N: 2301
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.08.12 23:01. Заголовок: Pasha спасибо за сов..


Pasha спасибо за совершенствование LetoDB.
Жалко что не могу помочь в таких сложных решениях.
Поспрашивай, может на других Си-шных форумах помогут.

Спасибо: 0 
Профиль
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. Исправил.

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





Пост N: 93
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 23.08.12 10:23. Заголовок: Паша, а если попроб..



Паша, а если попробовать использовать мьютекси.

Примеры можна посмотреть здесь :
http://habrahabr.ru/post/72929/
http://www.sofmos.com/lyosha/Articles/multithreading1.html
http://docs.oracle.com/cd/E19253-01/816-5137/sync-12/index.html

Пример использования мьютексов к списку:
http://maxim.int.ru/bookshelf/PthreadsProgram/htm/r_27.html



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




Пост N: 2476
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.08.12 12:57. Заголовок: santy пишет: Паша, ..


santy пишет:

 цитата:
Паша, а если попробовать использовать мьютекси.



Спасибо, это то что надо. Я чувствовал, что делаю что-то не то. Надо использовать мютексы.

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



Пост N: 584
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 21.09.12 10:08. Заголовок: Хочу узнать дату пос..


Хочу узнать дату последнего обновления базы, dbinfo(4) возвращает пустую дату. Что делать?

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




Пост N: 2484
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.09.12 14:07. Заголовок: Сейчас LastUpdate не..


Сейчас LastUpdate не передается с сервера. Надо будет добавить.
Только это связано с изменением протокола, вот думаю, как сделать, чтобы новые версии сервера и клиента при этом работали со старыми.

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



Пост N: 587
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 08:52. Заголовок: AlexMyr пишет: Сейч..


Pasha пишет:

 цитата:
Сейчас LastUpdate не передается с сервера. Надо будет добавить.

Спасибо, работает!

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



Пост N: 588
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 09:44. Заголовок: Паша! Команда append..


Паша!
Команда append from я так понимаю не сработает с letodb сервера на локальный диск, надо через массив записи переганять?

Спасибо: 0 
Профиль
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


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



Пост N: 589
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 10:10. Заголовок: Пробовал сначала без..


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

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



Пост N: 590
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 10:18. Заголовок: Еще один момент: dbc..


Еще один момент:
dbcreate("temp",{...},"DBFCDX",.T.)
файл создался но не открывается, надо dbuseare("temp",...) использовать.

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




Пост N: 2486
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.09.12 10:24. Заголовок: AlexMyr пишет: Проб..


AlexMyr пишет:

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



Так файл открывается через dbfcdx, и записи добавляются с leto ?

А насчет временного файла, надо еще алиас в dbCreate указывать

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



Пост N: 591
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 10:31. Заголовок: Pasha пишет: Так фа..


Pasha пишет:

 цитата:
Так файл открывается через dbfcdx, и записи добавляются с leto ?


основная задача на leto, потом копируются записи с leto в локальную базу, открытую через dbfcdx, и потом локальная база улетает по почте.

Pasha пишет:

 цитата:
А насчет временного файла, надо еще алиас в dbCreate указывать


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

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



Пост N: 592
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 10:42. Заголовок: Вот что выяснил, есл..


Вот что выяснил, если создать локально файл и добавить одну пустую запись в него, то с leto все нормально переноситься по append from, если не добавлять, а сразу после dbcreate() делать append from, то добавляется одна запись в базу на leto. Вот!

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




Пост N: 2487
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.09.12 10:53. Заголовок: Не очень понятно. Ал..


Не очень понятно. Алексей, а можно код показать, что не так работает ?

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



Пост N: 593
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 10:55. Заголовок: Pasha пишет: Не оче..


Pasha пишет:

 цитата:
Не очень понятно. Алексей, а можно код показать, что не так работает ?

Сейчас попробую минимальный примерчик собрать.

Спасибо: 0 
Профиль
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.


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




Пост N: 2488
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.09.12 11:31. Заголовок: AlexMyr пишет: Даль..


AlexMyr пишет:

 цитата:
Дальше, если dbappend() закомментировано, записи не переносятся, если раскомментировано, то все нормально.



Что очень странно, так как в файл открыт через dbfcdx, и команду append from отрабатывает dbfcdx, а не leto
dbfcdx должен просто открыть файл через указанный драйвер, и в цикле по записям добавить их.
Вставлю-ка я в свой dbedit выполнение append from через другой драйвер, и посмотрю, как он отработает.

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




Пост N: 2489
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.09.12 12:47. Заголовок: Я нашел глюк в leto ..


Я нашел глюк в leto для случая копирования записей между разными драйверами
client\leto1.c строка 4026 надо добавить проверку:

if( !leto_CheckArea( pAreaDst ) ||

вечером скину

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



Пост N: 596
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.09.12 12:49. Заголовок: Pasha пишет: вечеро..


Pasha пишет:

 цитата:
вечером скину

будем ждать!

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



Пост N: 598
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 25.09.12 08:39. Заголовок: Pasha Спасибо, работ..


Pasha Спасибо, работает

Спасибо: 0 
Профиль
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. тут я читал как пишется такая щука

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



Пост N: 636
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 12.11.12 11:53. Заголовок: sashaBG пишет: Но в..


sashaBG пишет:

 цитата:
Но вот клиенты начали заекатся на возможность подключeния к базе через WEB

Но клиентская прога и есть своеобразный браузер для letodb, а через web как по мне то это уже лишнее.

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




Пост N: 2398
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.11.12 12:35. Заголовок: sashaBG пишет: за г..


sashaBG пишет:

 цитата:
за год работы не наблюдались никакие пропажи информации
и нарушение логической стр. данных , благодаря транзакций.



Будьте так добры, напишите схематично как правильно надо писать транзакции.
Заранее спасибо.

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




Пост N: 2525
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.11.12 12:59. Заголовок: sashaBG пишет: Возм..


sashaBG пишет:

 цитата:
Возможно ли написание PHP Extention для LetoDB ?



Из php можно обращаться к COM-серверу. А пример LetoDB COM сервера я делал: см. utils\olesrv
Правда, это будет работать только в windows
Может быть, такой вариант подойдет ?

Спасибо: 0 
Профиль
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, все нормально работает.

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




Пост N: 2526
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.11.12 13:58. Заголовок: Александр, а что есл..


Александр, а что если прикрутить запросы query из dbc к letodb ? Хотя бы в качестве readonly запросов

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



Пост N: 639
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 12.11.12 14:01. Заголовок: Andrey пишет: Будьт..


Andrey пишет:

 цитата:
Будьте так добры, напишите схематично как правильно надо писать транзакции.


Смотрим пример letodb\tests\test_ta.prg

Спасибо: 0 
Профиль
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. Не могу отформатировать текст :(



Спасибо: 0 
Профиль
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 интерфейс" можно отписаться в другой теме, чтобы здесь не "мусорить" !
Заранее спасибо за ответ !

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


Пост N: 429
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 12.11.12 15:11. Заголовок: Pasha пишет: Алекса..


Pasha пишет:

 цитата:
Александр, а что если прикрутить запросы query из dbc к letodb ? Хотя бы в качестве readonly запросов


Я так и хотел сделать - может, помните, писал когда-то о планах реализовать SQL - запросы в letodb.
Даже начал переводить тот фрагмент кода из dbc на C - но потом что-то отвлекло и забыл про это дело...


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





Пост N: 129
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 12.11.12 15:33. Заголовок: Вот это интересно. S..


Вот это интересно. SQL на letodb - прекрасная идея.

Потом уже на уровне ядра (x)Harbour.



Спасибо: 0 
Профиль
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 в таком случае почти не меняется.

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




Пост N: 2529
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.11.12 14:46. Заголовок: Александр, а можно л..


Александр, а можно ли перенести проект с CVS на SVN ?

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


Пост N: 435
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.11.12 15:25. Заголовок: Pasha пишет: Алекса..


Pasha пишет:

 цитата:
Александр, а можно ли перенести проект с CVS на SVN ?


А как это делается ?

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




Пост N: 2530
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.11.12 15:34. Заголовок: Не знаю. Наверное, н..


Не знаю. Наверное, надо спросить в harbour dev, они же переносили головной проект. В любом случае у меня прав на это нет.

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





Пост N: 131
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 13.11.12 15:46. Заголовок: Заходите под админом..


Заходите под админом во вкладке Project Admin/Feature Settings установите галочку для SVN уберите для CVS.

Последнюю версию с CVS сберегите.
Попробуйте закачать туда данные через SVN

Можна конечно почитать инструкцию https://sourceforge.net/apps/trac/sourceforge/wiki/Subversion%20import%20instructions

Но у меня вышло по простому.


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


Пост N: 437
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.11.12 17:55. Заголовок: Pasha пишет: Не зна..


Pasha пишет:

 цитата:
Не знаю. Наверное, надо спросить в harbour dev, они же переносили головной проект. В любом случае у меня прав на это нет.


Теперь есть, я вас добавил в project admins.

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




Пост N: 2531
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.11.12 20:42. Заголовок: Спасибо !..


Спасибо !

Спасибо: 0 
Профиль
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.

А нужно показать номер новодобавленой записи !


Спасибо: 0 
Профиль
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-ы и т.д.)
Все нормально работает.
Задача: Ввод жильцами данных по счетчикам учета воды в квартплате


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




Пост N: 2411
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.12 17:05. Заголовок: SergKis Чтобы не ра..


SergKis
Чтобы не разводить здесь лишнего, я перенес свой вопрос к вам в тему
http://clipper.borda.ru/?1-3-0-00000218-000-0-1-1353420057

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




Пост N: 2546
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.11.12 17:30. Заголовок: sashaBG пишет: А ну..


sashaBG пишет:

 цитата:
А нужно показать номер новодобавленой записи !



Вызов leto_commit в данном случае не поможет, он будет просто проигнорирован.
Сейчас leto_CommitTransaction просто возвращает результат выполнения: успешно или нет.
Надо добавить возврат массива номеров последних добавленных записей для каждой рабочей области, которая задействована в транзакции. А на клиенте обрабатывать этот массив, устанавливая номера добавленных записей.
Сделаю.

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




Пост N: 113
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 20.11.12 22:53. Заголовок: Стоит ли ?


Паша, наверное не стой усложнять leto_CommitTransaction
Все дело было потому что в моем проекте после добавления нового документа я показываю в статус линии данные о текущей записи
и так замаетил что после транзакции добавления нового документа показывает 0.
я пока в своем проекте справился делая после leto_CommitTransaction , DBSEEK(cNewDOK) и все о.к.
После етого показывает все нормально .

Спасибо !

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




Пост N: 2547
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.11.12 08:54. Заголовок: Дело в том, что если..


Дело в том, что если после транзакции указатель остается на добавленной записи, то будут неправильно работать операции навигации по этой рабоче области (skip). Так что лучше эти данные все-таки передавать и отрабатывать их.

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


Пост N: 448
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.11.12 09:08. Заголовок: Pasha пишет: Дело в..


Pasha пишет:

 цитата:
Дело в том, что если после транзакции указатель остается на добавленной записи, то будут неправильно работать операции навигации по этой рабоче области (skip). Так что лучше эти данные все-таки передавать и отрабатывать их.


А как именно обрабатывать ?
По-моему, указатель записи после транзакции должен быть там же, где и в том случае, если этот фрагмент кода исполняется без транзакции. Т.е., если речь идеь о добавлении группы записей, то - на последней добавленной записи.

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




Пост N: 2548
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.11.12 09:24. Заголовок: Алгоритм примерно та..


Алгоритм примерно такой. Сервер пусть формирует массив вида
ulAreaID, ulRecNo, ...
и заполняет при добавлении последний номер добавленной записи (только один для р/о)
Клиент после транзакции просматривает этот массив, и, если для указанной в нем р/о номер записи на клиенте 0, заменяет его на принятый номер записи.
Иначе получится, что если после транзакции с добавленной записью клиент выполняет какое-то действие, то сервер ее просто не найдет.

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


Пост N: 449
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.11.12 10:34. Заголовок: А почему о массиве р..


А почему о массиве речь идет, а не об одной последней добавленной записи ?

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




Пост N: 2549
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.11.12 12:24. Заголовок: Так я и имел в ввиду..


Так я и имел в ввиду номер последней добавленной записи для каждой р/о, в которой производилось добавление во время транзакции. Если на клиенте текущей останется добавленная запись, то для нее заменять номер записи 0 на полученный с сервера.

Надо еще подумать, какая еще информация нужна клиенту по результату транзакции, чтобы сразу все сделать.

Спасибо: 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.


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




Пост N: 2439
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.12 22:05. Заголовок: Pasha пишет: сборку..


Pasha пишет:

 цитата:
сборку letodb для windows


А сборка для Linux можно будет в дальнейшем сделать ?
А то хочется сделать сервер на Ubuntu, а клиента под windows.

Спасибо ОГРОМНОЕ Pasha за твой труд !

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




Пост N: 2564
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.11.12 08:49. Заголовок: Andrey пишет: А сбо..


Andrey пишет:

 цитата:
А сборка для Linux можно будет в дальнейшем сделать ?
А то хочется сделать сервер на Ubuntu, а клиента под windows.



Как появится под рукой Ubuntu, сделаю
А самому сделать не получается ?

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



Пост N: 67
Зарегистрирован: 14.01.09
ссылка на сообщение  Отправлено: 30.11.12 08:57. Заголовок: Я когда-то пробовал запустить LETODB на UBUNTU


Вот, может поможет.

http://dimao.blogspot.ru/p/blog-page.html

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



Пост N: 81
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 04.12.12 07:17. Заголовок: Pasha пишет: На сай..


Pasha пишет:

 цитата:
На сайте проекта я добавил сборку letodb



Не могу выкачать дистрибутив, просит пароль
Раньше всё было нормально

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




Пост N: 2580
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.12.12 08:53. Заголовок: Пароль на скачивание..


Пароль на скачивание архива или пароль на архив ?

Я без авторизации на sf только что скачал

http://sourceforge.net/projects/letodb/files/bin/letodb-2.09-win.7z/download

на архив тоже пароля нет

или нужен пароль при доступе к CVS ? anonymous не работает, что ли ?

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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


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



Пост N: 656
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.12.12 10:17. Заголовок: Pasha пишет: Алекса..


Pasha пишет:

 цитата:
Александр, а можно ли перенести проект с CVS на SVN ?

Может быть пора?

Спасибо: 0 
Профиль
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



Я такого сообщения не припомню. Что бы это могло значить ?

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




Пост N: 2582
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.12.12 12:28. Заголовок: Ошибка возникает при..


Ошибка возникает при неудачной попытке запуска службы letodb

Код ошибки 1063 расшифровывается так:

Процесс службы не может установить связь с контроллером службы.

С именно такой ошибкой я не сталкивался. Мне встречались проблемы с правами при установке службы (нужны права администратора). Еще службу нельзя запускать с сетевого диска, что тоже понятно.
Встречалась проблема, когда после какого-то обновления avast служба letodb при запуске просто висла,
в диспетчере служб в колонке состояние было что-то вроде running или starting
Лечилось заменой антивируса на другой. Возможно, тут что-то тоже связано с антивирусом. Или сам модуль letodb.exe поврежден.

Хотя, видно что скачан уже собранный letodb, который я выложил. Может быть, пользователь просто не установил службу ? Т.е. не отработал letodb install ? В инструкции про это есть.

Спасибо: 0 
Профиль
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



Уже работает!

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




Пост N: 2589
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.12.12 09:20. Заголовок: Александр, мне пришл..


Александр, мне пришло письмо с sf, они предлагают проапгрейдить проект на новую платформу. Пишут, что старая скоро не будет поддерживаться. Делать ?

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


Пост N: 470
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.12.12 09:50. Заголовок: Pasha пишет: Алекса..


Pasha пишет:

 цитата:
Александр, мне пришло письмо с sf, они предлагают проапгрейдить проект на новую платформу.


Да, я тоже получил.

 цитата:
Делать ?


Ну а куда деваться ...

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


Пост N: 471
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.12.12 09:57. Заголовок: Я сделал Upgrade, по..


Я сделал Upgrade, посмотрим, что получится.

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


Пост N: 472
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.12.12 10:06. Заголовок: Я думал, этот upgrad..


Я думал, этот upgrade имеет какое-то отношение к переходу с CVS на SVN - но, вроде, это не так.

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




Пост N: 2460
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.12.12 18:46. Заголовок: А откуда качать исхо..


А откуда качать исходники LetoDB ?
с CVS или SVN ?
Адрес дайте пожалуйста.
И готовые бинарники есть ?

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




Пост N: 2599
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.12.12 18:52. Заголовок: Как и раньше, с CVS,..


Как и раньше, с CVS, ничего не изменилось.
А бинарники я же только выложил, неделя с небольшим прошла, на этой странице чуть выше все есть.

Спасибо: 0 
Профиль
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

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




Пост N: 2622
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.12.12 20:48. Заголовок: Сейчас время актуаль..


Сейчас время актуальности skip и seek буфера - 1 секунда. Для медленного удаленного интернет-соединения это может быть недостаточно. Поэтому я добавил возможность задать это время: 5-й параметр leto_Connect

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


Пост N: 504
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 19.12.12 08:52. Заголовок: Это время, как я пон..


Это время, как я понимаю, сейчас имеет одно значение для всех файлов ? Мне кажется, тут нужен более гибкий подход - возможность установки и общего значения, и - для каждой таблицы в отдельности. И должно быть значение, равное 0 как эквивалент бесконечности, т.е., чтобы это время актуальности было бесконечным. Я бы в своих приложениях ( пока это теоретическое предположение, поскольку у меня стоит пока старая версия, где этого времени нет вообще ) поставил бы общее значение 0 и, возможно, только для некоторых файлов какое-то фиксированное - например, 5 сек.

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




Пост N: 2623
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.12.12 10:11. Заголовок: Добавлю еще в LETOAR..


Добавлю еще в LETOAREA это параметр, знаковый. -1 будет означать общую настройку для соединения, 0 - бесконечность. Для установки добавлю новую константу для dbInfo: DBI_XXX.
Кстати, сейчас проверю, насколько поможет увеличение этого параметра для удаленного соединения.

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


Пост N: 506
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 19.12.12 10:16. Заголовок: Этот -1 для LETOAREA..


Этот -1 для LETOAREA должен быть, по идее, значением по умолчанию.

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




Пост N: 2626
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.12.12 10:10. Заголовок: Увеличение времени а..


Увеличение времени актуальности буфера немного помолго, но оказалось далеко не решающим фактором. Пришлось оптимизировать еще несколько действий. Включил использование seek-буфера там, где это необходимо, доработал его: теперь если dbSeek(xKey) возвращает .F., результат все равно сохраняется в seek-буфере и затем используется. Убрал несколько лишних операций.
В результате количество запросов к серверу сократилось с 265 до 29-ти, т.е. почти на порядок.


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


Пост N: 511
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.12.12 11:12. Заголовок: Отлично. А что это з..


Отлично. А что это за seek-буфер ? Какие записи он хранит, тем более когда dbSeek возвращает .f. ?

Спасибо: 0 
Профиль
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

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




Пост N: 2628
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.12.12 15:33. Заголовок: Меня спрашивают, что..


Меня спрашивают, что предпочтительнее по производительности, использование dbfcdx в терминалке или letodb ? А я не знаю, что ответить, так как сам терминал-сервер не использую.
Кто может сказать, большой траффик получается в случае использования терминал-сервера windows ?

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




Пост N: 2505
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.12.12 15:56. Заголовок: Pasha пишет: Кто мо..


Pasha пишет:

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



Я использую на нескольких фирмах терминал-сервера.
Так как сервер для терминалов используют как правило более мощный, то задача с использованием обычного dbfcdx - просто летает....

Но по цене и простоте лучше использовать конечно LetoDb (экономим на обслуживание и настройке терминал-сервера windows ) !

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


Пост N: 810
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 21.12.12 21:36. Заголовок: Да, тут главное - це..


Да, тут главное - цена. Терминальный сервер легально можно поднять только на MS Server 20xx. Про его цену вместе с лицензиями говорить не обязательно. Думаю, что вариант с терминалом будет побыстрее, особенно через интернет соединение, но и затраты несоизмеримо выше.


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


Пост N: 326
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 22.12.12 14:06. Заголовок: Есть платные термина..


Есть платные терминалы , работают и на Win 7 64, других разработчиков, цены доступные

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


Пост N: 327
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 22.12.12 14:08. Заголовок: Но под терминалом не..


Но под терминалом не работает ADS local.

Спасибо: 0 
Профиль
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

Это делается одним запросом к серверу.
Конечно, большую выборку надо использовать с осторожностью, поскольку вся она передается одним запросом.
дока будет чуть позже.


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


Пост N: 519
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 24.12.12 08:12. Заголовок: Дело хорошее! Leto_P..


Дело хорошее!
Leto_ParseRecords() - это новая функция, которая разбирает результат, присланный UDF_dbEval ?

Спасибо: 0 
Профиль
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-буфер можно быдет полноценно использовать при обновлении данных.


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




Пост N: 53
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 11:06. Заголовок: alkresin пишет:Дело ..


alkresin пишет:
 цитата:
Дело хорошее

Дело ОЧЕНЬ ХОРОШЕЕ !!!
А добавив aFields, можно и без вызова UDF работать, добавив возврат в буфере массива Recno записей выборки (для больших и неопределенных в объеме выборок), получится вариант SELECT ... ! И если такое добавить в версию LETO, собираемую xHabour - совсем ЗАМЕЧАТЕЛЬНО !

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




Пост N: 2634
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 11:43. Заголовок: Я вчера забыл сделат..


Я вчера забыл сделать коммит для server.prg, там небольшое изменение - надо добавить request для leto_dbEval. Сегодня сброшу. Кстати, в mail dev list почему-то не проходят письма.
А насчет aFields: я не очень понял, что имеется в виду. Можно подробнее ?

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




Пост N: 55
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 12:26. Заголовок: Pasha пишет: А насче..


Pasha пишет:

 цитата:
А насчет aFields: я не очень понял, что имеется в виду. Можно подробнее ?


Как я понял, сейчас в skip-буфере находится все поля записи. При помощи aFields := {"Field1", "Field10"} - только нужные.

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




Пост N: 2635
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 13:24. Заголовок: Добавить к UDB_dbEva..


Добавить к UDB_dbEval еще один параметр aFields, что ли ? И передавать с сервера только значения тех полей, которые есть в этом массиве ?
Тогда значения остальных полей будут пустыми, и в skip буфере, и при считывании записей. Конечно, для передачи даже пустых полей требуется один-два байта.
Это можно сделать, но пользоваться таким запросом надо с осторожностью, понимая, что делаешь. Обращение к полям, которых нет в aFields, даст пустое значние, а ведь значение у них есть.
Если в массиве не будет ключевых полей, то не получится вычисление ключевого выражения.


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




Пост N: 56
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 13:57. Заголовок: Pasha пишет но польз..


Pasha пишет

 цитата:
но пользоваться таким запросом надо с осторожностью


Конечно - это для тех, кто понимает, что происходит ! Зато можно значительно уменьшить трафик в различных расчетах где символьные данные не нужны и т.д. и т.п. Еще можно добавить параметр .T./.F., что в skip буфере: записи с полями или ссылки на записи, участвующие в запросе и работать вместо skip через goto.

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




Пост N: 2636
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 14:13. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще можно добавить параметр .T./.F., что в skip буфере: записи с полями или ссылки на записи, участвующие в запросе и работать вместо skip через goto.



Это как раз наоборот увеличит траффик. Если в skip-буфере хранятся записи, то они выбираются из него без обращения к серверу. Если номера записей (ссылки), то каждый goto потребует запроса к серверу, что нивелирует саму идею буфера.

Спасибо: 0 
Профиль
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 буфером ?



Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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
такая схема будет работать !


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




Пост N: 2640
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.12 16:20. Заголовок: Работать то будет, н..


Работать то будет, но неоптимально.
До корректировки будет использоваться skip-буфер.
При корректировке он будет очищен, и вся страница browse опять будет считана с сервера.
Я хочу сделать, чтобы буфер полностью не очищался, а считывалась только измененная запись при повторном обращении к ней.

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




Пост N: 61
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.12.12 16:37. Заголовок: Pasha спасибо за объ..


Pasha спасибо за объяснения !!!

Спасибо: 0 
Профиль
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-буфер один, а не для каждой области ?

Спасибо: 0 
Профиль
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 буфер уже получен с сервера и находится на клиенте.

Спасибо: 0 
Профиль
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() ?



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




Пост N: 2643
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.12 11:04. Заголовок: leto_SetSkipBufer(1..


leto_SetSkipBufer(100) перед leto_ParseRecords(...) делать необязательно, так как в буфер заносятся все данные, удовлетворяющие заданному условию.
После всех операций изменения данных сейчас буфер сбрасывается. Я только собираюсь сделать другой алгоритм: не сброс буфера, а пометку в нем измененных записей, но еще это не сделал.


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




Пост N: 2644
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.12 11:06. Заголовок: Я так понимаю, вы хо..


Я так понимаю, вы хотите сделать что-то вроде аналога fetch для результатов sql-запроса.
Я думаю, может стоит сделать отдельный набор функций для навигации по skip-буферу: текущая позиция в буфере, перемещение вперед/назад
Но это вопрос дискуссинный. Может достаточно будет обойтись функцией, которая бы возвращала позицию текущей записи в буфере.

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




Пост N: 66
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.12.12 11:31. Заголовок: Pasha пишет:Я так по..


Pasha пишет:
 цитата:
Я так понимаю, вы хотите сделать что-то вроде аналога fetch для результатов sql-запроса

Как конечный результат - да, а как промежуточный - избавится от кода закачки справочников в массивы и работа с документами, карточками со skip-буфером вместо закачки в memio, т.е. значительно сократить код в программе.

 цитата:
Я думаю, может стоит сделать отдельный набор функций для навигации по skip-буферу

это не принципиально, если будет какой-то базовый набор функций - обвесить можно всегда.

Спасибо: 0 
Профиль
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 на МиниГуи.
Как МиниГуи работает с базами, какие тонкости есть при использовании МиниГуи ?

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




Пост N: 117
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 29.12.12 12:16. Заголовок: Привет


Андрей прошло много времени с того поста что в цитате , сервер сайчас работает намного лучше.
Когда у меня будет болше времени , обещаю сделать небольшой пример СЕРВЕРА(комбинация между letodb + HBNETIO + MiniGUI) и КЛИЕНТА(MiniGUI + rddleto)

В принципе нет большой разницы при работе letodb чем с другими RDD . Я постараюсь показать кое чего в примере :)


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




Пост N: 2524
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.12.12 18:54. Заголовок: sashaBG пишет: Я по..


sashaBG пишет:

 цитата:
Я постараюсь показать кое чего в примере :)


Заранее спасибо, буду ждать. С наступающим Новым Годом !

Спасибо: 0 
Профиль
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.



Спасибо: 0 
Профиль
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" - СТОП


Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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

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




Пост N: 2527
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.12 23:20. Заголовок: Pasha пишет: В кон..


Pasha пишет:

 цитата:
В конце концов, создайте ярлык на "letodb install" и запустите его с правами администратора, если такое возможно под win8


Спасибо БОЛЬШОЕ !

Спасибо: 0 
Профиль
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_

Чего хотелось бы избежать. Есть ли другой способ ?

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




Пост N: 2663
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.01.13 12:26. Заголовок: С копированием струк..


С копированием структуры set возникли некоторые проблемы, поэтому пока я просто обавлю новый параметр настройки в letodb.ini:

AutOrder = ...

Мне собственно был нужен этот параметр

Спасибо: 0 
Профиль
Панченко





Пост N: 22
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 23.01.13 14:14. Заголовок: Pasha, "добавлю&..


Pasha,
"добавлю" или "добавил"?

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




Пост N: 2664
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.01.13 14:27. Заголовок: Панченко пишет: ..


Панченко пишет:

 цитата:
"добавлю" или "добавил"?



На своей локальной копии уже добавил. На CVS сброшу вечером.

Спасибо: 0 
Профиль
Панченко





Пост N: 23
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 23.01.13 14:38. Заголовок: Pasha пишет: На CVS..


Pasha пишет:

 цитата:
На CVS сброшу вечером.


А можно повторить адрес CVS LetoDB? А то у меня версия 2.09 от 07.12.12 с Sourceforge :(

Спасибо: 0 
Профиль
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


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




Пост N: 2587
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.01.13 17:14. Заголовок: http://f2.s.qip.ru/e..




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




Пост N: 2667
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.01.13 19:56. Заголовок: Надо вводить адрес: ..


Надо вводить адрес:

:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb

и ревизия:

rel-1-mt

Спасибо: 0 
Профиль
Панченко





Пост N: 24
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 24.01.13 09:46. Заголовок: Pasha, а можно подро..


Pasha, а можно подробнее:

 цитата:
AutOrder = 0 - настройка для SET AUTORDER


Что будет при о, а что при 1?

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


Пост N: 819
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.13 09:53. Заголовок: Панченко пишет: Что..


Панченко пишет:

 цитата:
Что будет при о, а что при 1?


http://www.creasolgroup.com/xOraclipLanguageReferenceGuide/xOraClip%20Language%20Reference/Commands/Set_autorder.en.html

Спасибо: 0 
Профиль
Панченко





Пост N: 25
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 24.01.13 10:09. Заголовок: to PSP My English is..


to PSP
My English is very-very poor - это одна из тех немногих фраз, которые я вынес из уроков английского.
Поэтому хочу уточнить: речь идет о том, будет ли по USE автоматически открываться индекс. Правильно я понял?

Спасибо: 0 
Профиль
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
Разница есть ? Мне так кажется, что есть маленькая :)


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


Пост N: 820
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.13 10:22. Заголовок: Да. Есть команда SET..


Да. Есть команда SET AUTOPEN. Используется для автоматического открытия индекса при открытии dbf. По-умолчанию она в OFF. Так вот, если выполнить SET AUTOPEN ON, то с помощью SET AUTORDER можно указать, какой индекс станет управляющим в составном индексном файле. По-умолчанию установлена в 0.

Спасибо: 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 пункты?

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




Пост N: 2669
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.01.13 11:02. Заголовок: Панченко пишет: Т.е..


Панченко пишет:

 цитата:
Т.е., теперь по умолчанию (AutOrder=0) выполняются только 1 и 2 пункты?



Вместо 1 я проверяю существование всех таблиц и индексов одним вызовом UDF_FilesExist, а вместо 2 - открываю все существующие таблицы одним вызовом UDF_OpenTables.

Спасибо: 0 
Профиль
Панченко





Пост N: 27
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 24.01.13 11:12. Заголовок: Pasha пишет: Разниц..


Pasha пишет:

 цитата:
Разница есть ? Мне так кажется, что есть маленькая :)


НУ тогда конечно :))

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



Пост N: 700
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.01.13 11:20. Заголовок: PSP пишет: Да. Есть..


PSP пишет:

 цитата:
Да. Есть команда SET AUTOPEN. Используется для автоматического открытия индекса при открытии dbf. По-умолчанию она в OFF.

Вроде всегда была .T., или я не прав?

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


Пост N: 821
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.01.13 11:44. Заголовок: AlexMyr пишет: Врод..


AlexMyr пишет:

 цитата:
Вроде всегда была .T., или я не прав?


Да, я ошибся

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




Пост N: 2635
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.13 00:17. Заголовок: Проясните пожалуйста..


Проясните пожалуйста вопрос взаимодействия LetoDB и FastReport.
Мне нужно будет для построения отчетов FastrReport делать выгрузку из базы на локальный комп ?

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



Пост N: 714
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 09.02.13 01:01. Заголовок: Andrey пишет: Мне н..


Andrey пишет:

 цитата:
Мне нужно будет для построения отчетов FastrReport делать выгрузку из базы на локальный комп ?




смотрим внимательно, уже было обсуждение

http://clipper.borda.ru/?1-4-0-00000756-000-60-0#043

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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.


Спасибо: 0 
Профиль
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
Скрытый текст


makefile.lnk
Скрытый текст

Менял положение rddleto.lib и в начале и в конце, ошибка та же.

Pasha я понимаю что вопрос у меня тупой (не собирается и все тут), но я сейчас пытаюсь для новичков составить инструкцию работы на LetoDB. Пока начал с хХарбора.
А то у нас получается что LetoDb используют только "продвинутые программеры" ...


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


Пост N: 825
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 09.02.13 10:28. Заголовок: Может проблема в уст..


Может проблема в установке "MT = NO"?

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




Пост N: 2639
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.13 10:51. Заголовок: PSP пишет: Может пр..


PSP пишет:

 цитата:
Может проблема в установке "MT = NO"?



Поставил MT = YES, не помогает ....


Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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;

Можно ли это поправить, или это не приведет к ошибке ?


Спасибо: 0 
Профиль
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.
Какие будут соображения ?

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



Пост N: 726
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 21.02.13 22:56. Заголовок: Если не задана настр..


Если не задана настройка формата memo в letodb.ini, то возвращать логически ожидаемое для DBFCDX - fpt, DBFNTX - dbt, если задан формат, то это значение.

Спасибо: 0 
Профиль
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 ....



Спасибо: 0 
Профиль
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 общение с внешним миром)


Спасибо: 0 
Профиль
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, которая только проверяет доступность сервера и коннектится с ним.
Насколько я понимаю, с коннектом уже проблем нет. А с чем тогда есть ? С созданием папки ? Это что, очень сложно ?


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




Пост N: 142
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.13 11:25. Заголовок: Andrey пишет:Народ, ..


Andrey пишет:
 цитата:
Народ, дайте хоть исходник любой как надо работать с LetoDb


Пример:

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



Пост N: 730
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 27.02.13 11:47. Заголовок: Andrey пишет: Народ..


Andrey пишет:

 цитата:
Народ, дайте хоть исходник любой как надо работать с LetoDb ....

А чем не устраивают те, которые идут вместе с LetoDB?

Спасибо: 0 
Профиль
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 !
Где и что не так делаю ?
Как проверить, что можно в папке на сервере создать файл ?

Спасибо: 0 
Профиль
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 покрутить.

Спасибо: 0 
Профиль
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/"

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




Пост N: 2702
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.13 13:12. Заголовок: AlexMyr пишет: Прав..


AlexMyr пишет:

 цитата:
Правильно будет
Local cPath := "//127.0.0.1:2812/mydir/"


Поправил, все равно "ВЕШАЕТСЯ" программа ...

Исходник и сборка здесь - http://files.mail.ru/29A0DCDAC71941ADB959D116726D9521
Что я не так делаю ?

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




Пост N: 2701
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.02.13 13:23. Заголовок: Andrey пишет: Что я..


Andrey пишет:

 цитата:
Что я не так делаю ?



Мне кажется, надо все-таки пересобрать rddleto.lib своей версией xHarbour.
Я выкладывал сборку этой библиотеки с xHarbour SVN, и она может быть несовместима с более ранней версией xHarbour.

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




Пост N: 2703
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.13 14:13. Заголовок: Спасибо.Понял. Буду ..


Спасибо.Понял. Буду пробовать.


Спасибо: 0 
Профиль
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 из своей программы, функцию какую нибудь. Так можно ?

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




Пост N: 2645
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.02.13 18:25. Заголовок: Pasha А в LetoDB ес..


Pasha
А в LetoDB есть серверные (оптимизированные) фильтры как в ADS ?

Спасибо: 0 
Профиль
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()

Но это все не для случая сборки программы и клиентской библиотеки разными версиями харбора.

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




Пост N: 2703
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.02.13 19:53. Заголовок: Dima пишет: А в Let..


Dima пишет:

 цитата:
А в LetoDB есть серверные (оптимизированные) фильтры как в ADS ?



Да, конечно. При установке фильтра командой set filter сервер пытается выполнить выражение фильтра. Если попытка успешна, то устанавливается серверный фильтр, если нет - фильтр выполняется на клиенте.

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




Пост N: 2646
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.02.13 20:42. Заголовок: Pasha Понял. А как ..


Pasha
Понял. А как узнать успешна ли попытка установки фильтра на сервере ?

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




Пост N: 2704
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.02.13 21:04. Заголовок: После dbSetFilter на..


После dbSetFilter надо вызвать проверку:
LETO_ISFLTOPTIM()
Фильтр может быть неоптимальным (клиентским), если в нем присутствуют переменные памяти или вызовы функций, незарегистрированных на сервере. Еще сервер не поймет ссылки на другие рабочие области. Я не рассматриваю случай просто неверного выражения.

Спасибо: 0 
Профиль
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 функции Скрытый текст


Так вот сам вопрос.
База успешно создается по пути: D:\@TEST_LETODB\DATA\test866.dbf
А почему при открытии в функции LoadDbf866(cPath)
cFileDbf := cPath + "test866.dbf"
IF !LETO_FILE( cFileDbf ) -> возвращает .F.
Что я не так делаю ?

Спасибо: 0 
Профиль
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

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




Пост N: 2709
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.13 22:19. Заголовок: AlexMyr пишет: чита..


AlexMyr пишет:

 цитата:
читаем readme


Спасибо БОЛЬШОЕ !
Пропустил....

А как заставить запущенную службу LETODB перечитать заново letodb.ini ?

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



Пост N: 739
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 28.02.13 22:24. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как заставить

администрирование-службы-letodb-перезапустить

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




Пост N: 2710
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.13 22:38. Заголовок: AlexMyr пишет: адми..


AlexMyr пишет:

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



Это понятно, а как на ходу перечитать конфигурацию сервера ?
Если удаленно нужно это сделать ?

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




Пост N: 2706
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.03.13 09:40. Заголовок: Только перезапуск сл..


Только перезапуск службы
Его можно автоматизировать батником:

net stop "LetoDB Service"
net start "LetoDB Service"


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




Пост N: 2713
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.03.13 10:00. Заголовок: Pasha пишет: Его мо..


Pasha пишет:

 цитата:
Его можно автоматизировать батником:


Спасибо БОЛЬШОЕ !

А не планируется ли какая то хитрая команда на сервер LetoDB чтобы на "ходу" править конфигурацию его.
А то если нет доступа по удаленке на комп, то труба... Ножками топать придется к заказчику...

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


Пост N: 838
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 01.03.13 10:17. Заголовок: Андрей, зачем? ..


Андрей, зачем?

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




Пост N: 2707
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.03.13 10:32. Заголовок: Andrey пишет: А не ..


Andrey пишет:

 цитата:
А не планируется ли какая то хитрая команда на сервер LetoDB чтобы на "ходу" править конфигурацию его.
А то если нет доступа по удаленке на комп, то труба... Ножками топать придется к заказчику...



Не планируется. Этих настроек всего-то 3-4 позиции, и выставить их правильно изначально труда не составляет.


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




Пост N: 2647
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.03.13 10:33. Заголовок: PSP пишет: А не пла..


PSP пишет:

 цитата:
А не планируется ли какая то хитрая команда на сервер LetoDB чтобы на "ходу" править конфигурацию его


Даже в ADS нет такого.

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




Пост N: 2714
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.03.13 14:28. Заголовок: Уже и сразу запинали..


Уже и сразу запинали....

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




Пост N: 2655
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.03.13 17:28. Заголовок: Что то не могу обнов..


Что то не могу обновиться. Может кто чего подскажет...




http://shot.qip.ru/00bVmc-3vwdt63nm/
http://shot.qip.ru/00bVmb-3V4IuUaS2/
http://shot.qip.ru/00bVma-3d3R3GdrE/

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




Пост N: 2710
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.03.13 21:53. Заголовок: Только что успешно о..


Только что успешно обновился с точно такими же параметрами.
Но у меня очень старая версия TortoiseCVS: 1.8.3 2004 года
С тех пор, как начал работать с харбором (делать коммиты) - не обновлял ее. А это было 9 лет назад

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




Пост N: 2711
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.03.13 21:56. Заголовок: AlexMyr пишет: Если..


AlexMyr пишет:

 цитата:
Если не задана настройка формата memo в letodb.ini, то возвращать логически ожидаемое для DBFCDX - fpt, DBFNTX - dbt, если задан формат, то это значение.



Наконец-то дошли руки, и сделал поддержку параметра Memo_Type в letodb.ini

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




Пост N: 2656
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.13 11:29. Заголовок: Dima пишет: Что то ..


Dima пишет:

 цитата:
Что то не могу обновиться


Переустановил TortoiseCVS , заработало ;)

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




Пост N: 2657
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.13 13:14. Заголовок: Pasha А какие то тр..


Pasha
А какие то требования к OS Windows есть , там где будет крутится LetoDB Server ?
Это должна быть серверная OS или нет ?
Я имею в виду что на обычной винде не серверной есть ограничение на кол-во подключений
по сети.

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


Пост N: 840
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.03.13 14:31. Заголовок: LetoDB не создает кл..


LetoDB не создает клиентскую сессию Windows. Так что эти ограничения его не касаются.


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




Пост N: 2658
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.13 14:40. Заголовок: PSP Спасиб..


PSP
Спасиб

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




Пост N: 2659
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.13 15:51. Заголовок: Pasha пишет: Да, ко..


Pasha пишет:

 цитата:
Да, конечно. При установке фильтра командой set filter сервер пытается выполнить выражение фильтра. Если попытка успешна, то устанавливается серверный фильтр, если нет - фильтр выполняется на клиенте.


Это понятно. А серверные фильтры оптимизированы (при наличии соответствующего индекса) как в ADS или SIX ?

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




Пост N: 2712
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.03.13 17:04. Заголовок: Dima пишет: А серве..


Dima пишет:

 цитата:
А серверные фильтры оптимизированы (при наличии соответствующего индекса) как в ADS или SIX ?



Нет, не оптимизированы, поскольку их не поддерживает сам харбор
В этом случае фильтр надо самому разделить на 2 части: для индексных полей использовать set scope, для неиндексных - set filter

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




Пост N: 2660
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.13 17:07. Заголовок: Pasha пишет: Нет, н..


Pasha пишет:

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


А планируется ли такая фича ?
По ходу харбор их не поддерживает но ведь они все же поддерживаются в RDDADS а точнее сказать
наверное в ADS сервере.

Спасибо: 0 
Профиль
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.


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




Пост N: 2713
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.03.13 17:45. Заголовок: Dima пишет: А плани..


Dima пишет:

 цитата:
А планируется ли такая фича ?
По ходу харбор их не поддерживает но ведь они все же поддерживаются в RDDADS а точнее сказать
наверное в ADS сервере.



Даже Przemek не упоминал об этом. А rddads поддерживает такие фильтры, поскольку их поддерживает сам Ads.

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




Пост N: 2662
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.13 17:57. Заголовок: Dima пишет: SET OPT..


Dima пишет:

 цитата:
SET OPTIMIZE ON


Не фига она не оптимизирует.
Нужный индекс есть , ставлю фильтр и получаю такой же тормоз как и без индекса.

Упс ;) Не прав. Не ту доку смотрел.
Оптимизирует но только "BMDBFCDX"

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




Пост N: 2724
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.13 19:42. Заголовок: Dima пишет: SET OPT..


Dima пишет:

 цитата:
SET OPTIMIZE ON | OFF | (<lToggle>)


Я тоже расстраивался, когда перешел с Клипера на Харбор. Pasha пишет:

Вопрос по НАСТРОЙКЕ LetoDB. Как настроить его для внешней и внутренней сети одновременно.
Т.е. нужно, чтобы часть рабочих станций работала через внешний IP, а часть по локальной сети предприятия.
Как быть в этом случае ?

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



Пост N: 36
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 03.03.13 20:06. Заголовок: Так ты настраивай пр..


Так ты настраивай программу, а не LetoDB. LetoDB будет свой на каждом сервере. А как и где открывать файлы решать программе. Можно часть файлов открывать без Letodb. Я определяю это в зависимости от пути к файлам. Если путь к серверу с LetoDВ, открываю файл VIA LETO. Программе все равно, сколько серверов и сколько LetoDB используется. Я таким образом синхронизирую данные на удаленном сервере со своим сервером, оба на разных LetoDB. Для программы это просто разные пути к файлам, открытые VIA LETO и все.

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




Пост N: 2714
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.03.13 20:11. Заголовок: Andrey пишет: Как н..


Andrey пишет:

 цитата:
Как настроить его для внешней и внутренней сети одновременно.
Т.е. нужно, чтобы часть рабочих станций работала через внешний IP, а часть по локальной сети предприятия.



Если я правильно понял, letodb сервер планируется поставить один, но часть клиентов будет к нему обращаться по ЛВС, а часть - через интернет.
В любом случае на клиенте должна быть настройка адреса сервера. Если это для ЛВС - то это должен быть ip или имя компьютера внутри ЛВС, если через интернет - то внешний ip компьютера, на котором работает сервер letodb.


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




Пост N: 2725
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.13 20:32. Заголовок: Pasha пишет: Если ..


Pasha пишет:

 цитата:

Если я правильно понял, letodb сервер планируется поставить один


Да, именно так !
А кто так работает, поделитесь статистикой, нормально ли работает ?
Можно ли по сотовому модему (медленному) работать с базой через LetoDB ?

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




Пост N: 2715
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.03.13 22:24. Заголовок: Andrey пишет: А кто..


Andrey пишет:

 цитата:
А кто так работает, поделитесь статистикой, нормально ли работает ?
Можно ли по сотовому модему (медленному) работать с базой через LetoDB ?



Все зависит от того, насколько медленному. Я работал через инет соединение только в качестве теста. С обеих сторон скорость была не очень высокой.
Кое-какие операции пришлось оптимизировать. Я в letodb.ini включал опцию "Debug=10", и анализировал лог запросов. Сразу становилось видно, что неоптимально. Те операции, которые в локалке были некритичными, через инет тормозили работу. В результате оптимизации получилось более-менее приемлемо. Но это был только тест.

Спасибо: 1 
Профиль
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 сервера, а не весь буфер записи.


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




Пост N: 2716
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.03.13 10:19. Заголовок: Добавлю, что надо пр..


Добавлю, что надо правильно использовать skip-буфер: скажем, для browse задавать его не меньше кол-ва строк для просмотра.
Еще я стал активно использовать seek-буфер, в каких-то случаях очень помогает.
В целом все зависит от скорости соединения и от того, как написана программа.
Можно и для скорости в десятки мегабит сделать программу так талантливо, что она будет висеть.
Для медленного gprs соединения надо уж очень постараться. Для скорости порядка сотен KB - единиц MB тоже надо хорошо приложить руки, чтобы добиться нормальной работы.


Спасибо: 1 
Профиль
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.

Спасибо: 0 
Профиль
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
При чем происходит так через раз.

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




Пост N: 2666
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.03.13 14:57. Заголовок: Dima пишет: 2. Лезе..


Dima пишет:

 цитата:
2. Лезем в панель управления в службы и стартуем LetoDB (это окно у меня уже было открыто)


Похоже в этом причина. Окно с сервисами не автообновляется. И если я вижу что сервис запущен то
на самом деле он может быть и не запущен вовсе. Что бы увидеть реальную картину окно надо обновить
ручками или закрыть/открыть.

Спасибо: 0 
Профиль
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 ? Если можно разъясните.

Спасибо: 0 
Профиль
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 обращения к серверу не будет, клиент возьмет запись из буфера.

Спасибо: 0 
Профиль
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 (статистика использования буфера)
Буду обновляться.


Спасибо: 0 
Профиль
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 $ */

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




Пост N: 2688
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.03.13 10:24. Заголовок: Pasha А если в Leto..


Pasha
А если в Leto юзать RDD DBFSIX или BMDBFCDX , Leto будет так же эффективно работать
как и с DBFCDX ?



Спасибо: 0 
Профиль
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-функций, чтобы не перегружать существующий низкоуровневый протокол передачи между клиентом и сервером. Думаю, как это лучше прикрутить.

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




Пост N: 2690
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.03.13 13:58. Заголовок: В большей степени ко..


В большей степени конечно интересен BMDBFCDX/BMDBFNTX , про SIX это я так просто спросил "паровозиком".

Спасибо: 0 
Профиль
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 в какой то мере решает эту проблему.

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




Пост N: 2730
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.03.13 12:31. Заголовок: Еще tbrowse любит вс..


Еще tbrowse любит все время опрашивать RecCount(), на каждой записи, а это дополнительные обращения к серверу, причем много.

Для буферизации этих вызовов надо после коннекта к серверу задать настройку:

RddInfo( RDDI_REFRESHCOUNT, .F.,, 1 )

В ads тоже есть подобная настройка.

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




Пост N: 2699
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 12:39. Заголовок: Pasha пишет: RddInf..


Pasha пишет:

 цитата:
RddInfo( RDDI_REFRESHCOUNT, .F.,, 1 )


Помогло , спасибо !

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




Пост N: 2700
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 13:30. Заголовок: Pasha пишет: В ads ..


Pasha пишет:

 цитата:
В ads тоже есть подобная настройка


В Harbour ? Не нашел.
А в Clipper есть ?

Спасибо: 0 
Профиль
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 ее действительно не перетянули.
Для клиппера даже не знаю, как она используется, если используется вообще. Клиент то совсем другой, старый, закрытый.

Спасибо: 0 
Профиль
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 не должен сам его создать с
установками по умолчанию ?

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 минут и такого больше не повторяется.....странно

Спасибо: 0 
Профиль
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")

Спасибо: 0 
Профиль
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



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




Пост N: 2716
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.03.13 18:46. Заголовок: Pasha А в чем разни..


Pasha
А в чем разница между leto_RecLock() и RLock() если база открыта с RDD Leto и нужно
залочить текущую запись ?

ЗЫ
Что то Пашу мы завалили вопросами , надо взять таймаут
В свое время я был тестером Winpint и тоже заваливал автора
вопросами и пожеланиями. В итоге продукт получился отличный

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




Пост N: 2742
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.13 19:28. Заголовок: Dima пишет: Периоди..


Dima пишет:

 цитата:
Периодически падает прога на строке LETO_CONNECT("//127.0.0.1:2812/")



Чего-чего, а такой нестабильной работы с letodb у меня никогда не было, да еще на элементарном коннекте. Если бы сервер где-нибудь упал, шума было бы много. Но такого не было.
Конечно, это версия letodb+bm, она только что появилась. Но все фичи bmdbf при коннекте еще не задействованы. Непонятно.

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




Пост N: 2743
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.13 19:30. Заголовок: Dima пишет: А как б..


Dima пишет:

 цитата:
А как быть с копированием файлов на Leto Server ?



Надо использовать функции leto_MemoWrite и leto_FileWrite

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




Пост N: 2744
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.13 19:34. Заголовок: Dima пишет: А в чем..


Dima пишет:

 цитата:
А в чем разница между leto_RecLock() и RLock() если база открыта с RDD Leto и нужно
залочить текущую запись ?



leto_RecLock предназначена для использования исключительно на сервере, в udf-функциях. А с клиента надо работать стандартными средствами rlock/flock/dbRLock

На сервере их использовать нельзя, поскольку смысл блокировок на сервере другой. Сервер открывает файлы (при стандартном режиме) монопольно, и блокировки там выполняются логически.

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




Пост N: 2718
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.03.13 19:36. Заголовок: Pasha Спасибо за ра..


Pasha
Спасибо за разъяснения !

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




Пост N: 2745
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.13 21:29. Заголовок: Dima пишет: еще наб..


Dima пишет:

 цитата:
еще наблюдение. если пересобрать клиентское приложение то в 30% после первого
запуска LETO_CONNECT выдаст -1



Я тоже напоролся на это. Пока 2 предположения: или служба "еще не до конца запустилась", а клиент уже коннектится к ней и валит ее (я службу постоянно останавливаю-пересобираю-запускаю-запускаю тест).
Либо все-таки есть какой то баг в операциях с памятью, связанный с BM
Но у меня эта ситуация возникает только в момент первого запуска теста после старта службы.

Спасибо: 0 
Профиль
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 ? Чисто в теории разницы в надежности и стабильности
быть не должно.

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




Пост N: 2746
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.13 22:24. Заголовок: Сбросил изменения на..


Сбросил изменения на CVS
Для того, чтобы по команде SET FILTER формировался bitmap-фильтр, надо в letodb.ini задать параметр:

ForceOpt = 1

А насчет демона - я, как только появилась служба, демон не использовал ни разу. Служба намного удобнее. Нет проблем с правами доступа. Запускает ее сама система, не нужен вход пользователя.


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




Пост N: 2721
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.03.13 22:42. Заголовок: Pasha пишет: Сброси..


Pasha пишет:

 цитата:
Сбросил изменения на CVS


Спасибо , завтра проверю. Отпишу тут.

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




Пост N: 2748
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.13 22:55. Заголовок: Кстати, маленький нь..


Кстати, маленький ньюанс
Я службу останавливать/запускать батником стал недавно, а до этого делал это через диспетчер служб. Там процесс запуска отображается на экране, и видно, когда служба запустилась.
Поэтому тест "в процессе" никогда не коннектился.
Если это делать из батника, то окончания запуска не видно, вот наверное и возникают накладки.

Спасибо: 0 
Профиль
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.


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




Пост N: 2749
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.13 09:30. Заголовок: Есть еще пара момент..


Есть еще пара моментов. Во первых, при вызове LBM_dbSetFilterArray(), надо сбрасывать skip-буфер. Это я добавлю вечером.
Во-вторых, я хочу все-таки сделать, чтобы не всякий фильтр строился как bitmap, а только если на клиенте также установлен _SET_FORCEOPT. Для этого эту настройку надо передавать серверу вместе с фильтром.
Таким образом, на клиенте можно будет управлять, какой фильтр будет bitmap, а какой - обычный.

Спасибо: 0 
Профиль
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 именно так

Спасибо: 0 
Профиль
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

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




Пост N: 2729
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 11:29. Заголовок: Pasha Закроешь эту ..


Pasha
Закроешь эту тему когда посчитаешь нужным. Продолжение будет в Leto DB Server (продолжение 9)

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




Пост N: 2730
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 14:12. Заголовок: Pasha я тут подумал..


Pasha
я тут подумал. может оставить в покое DBsetfilter и пусть он работает как и работал до введения BM , если это сложно.
для установки BM фильтра вполне достаточно иметь LBM_DBSETFILTERARRAY а оптимально заполнить
массив как бы и не проблема.

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