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




Пост N: 2728
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 9)


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

Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


Pasha
Администратор




Пост N: 2750
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.13 16:22. Заголовок: Dima пишет: я тут п..


Dima пишет:

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



Да уже все равно сделано. Пусть будет. Если bm дает эту фичу, нелишне будет иметь к ней доступ. Тем более, настройка, использовать ее или нет, существует.

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




Пост N: 2733
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 16:31. Заголовок: Pasha пишет: Да уже..


Pasha пишет:

 цитата:
Да уже все равно сделано


В смысле уже на CVS с учетом последних глючков ?

В Index on почему не срабатывает предложение [EVAL <bBlock>] ?
Без него плёхо будет , юзеры не поймут.

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




Пост N: 2751
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.13 16:46. Заголовок: Нет, на CVS не сбрас..


Нет, на CVS не сбрасывал. Но это уже называется "осталось допилить"

А индексация ведь выполняется на сервере, и во время индексации обмена между клиентом и сервером нет, поэтому EVAL и не поддерживается.

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




Пост N: 2735
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 16:51. Заголовок: Pasha пишет: А инде..


Pasha пишет:

 цитата:
А индексация ведь выполняется на сервере, и во время индексации обмена между клиентом и сервером нет, поэтому EVAL и не поддерживается.


Хммм а почему в ADS это работает ?
 
Предложение EVAL обычно содержит пользовательскую функцию (UDF),
которая отображает состояние создания индекса. UDF доступна клиенту
пока на сервере строится индекс. Если условие EVAL определено, оно
будет вычисляться каждые 2 секунды у клиента
. С такой частотой
Advantage изменяет внутренний номер записи и количество ключей. Если
используются функции RecNo() и/или AX_KeysIncluded(), будет возвращен
корректный результат.


По моему разумно сделано и юзеру можно показать что он не "висит".
Пометил красным ключевую фразу.

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




Пост N: 2752
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.13 17:08. Заголовок: Это в клиппере ? Я с..


Это в клиппере ? Я смотрю, в харборе в rddads тоже это условие игнорируется
Запускать его отдельным потоком во время ожидания завершения индексации, что ли
Пока не представляю, как это сделать

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




Пост N: 2736
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 17:19. Заголовок: Pasha пишет: Это в ..


Pasha пишет:

 цитата:
Это в клиппере ?


Да

А вот так в RDDADS
 
INDEXING and Progress Displays:
Remote server does not support the EVAL/EVERY clauses. Remember, there
is an external process doing the indexing that knows nothing of
Harbour expressions or codeblocks. Even with Local Server it's the
DLLs doing all the indexing. So to do progress meters
you need to implement <b>AdsRegCallback( bEval )</b>.
It lets you set a codeblock that is eval'ed every 2 seconds.
A numeric value of the "percent completed" is passed to the
codeblock by the ADS server.

<table>
#include "inkey.ch"
PROCEDURE Main()
...
AdsRegCallback( {| nPercent | outputstuff( nPercent ) } )
/* The above codeblock will be called approximately
every 2 seconds while indexing.
The codeblock can return .T. to abort. */
INDEX ON First+LAST+LABEL1+LABEL2 TAG First
AdsClrCallback()
RETURN

FUNCTION outputstuff( nPercent ) /* The "callback" function */
? "output stuff", nPercent
RETURN Inkey() == K_ESC
/* If press ESC, returns .T. to abort. */
</table>



На маленьких базах EVAL в индексе не нужен а вот если база широкая и толстая..........
Можно пойти по тому же пути как в описании выше к RDDADS
Тебе виднее можно и нужно ли это.
я просто высказал пожелание

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




Пост N: 2754
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.13 20:15. Заголовок: Отправил на CVS изме..


Отправил на CVS изменения по BM-фильтрам, о которых мы говорили, кроме учета настройки _SET_FORCEOPT на клиенте.

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




Пост N: 2738
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 22:05. Заголовок: как бы все красиво н..


как бы все красиво но не все.
нужно сбрасывать фильтра при установке LBM_DBSETFILTERARRAY()
и не важно как они ставились через dbsetfilter или LBM_DBSETFILTERARRAY

То есть если сделать так
LBM_DBSETFILTERARRAY({1,2,3})
go top
? len(LBM_DBGETFILTERARRAY()) //3

LBM_DBSETFILTERARRAY({1})
go top
? len(LBM_DBGETFILTERARRAY()) //1

работает

а если так нет и надо делать dbclearfilter перед LBM_DBSETFILTERARRAY

Set filter to nomer==3
go top
? len(LBM_DBGETFILTERARRAY()) //36

LBM_DBSETFILTERARRAY({1})
go top
? len(LBM_DBGETFILTERARRAY()) //0


Pasha пишет:

 цитата:
кроме учета настройки _SET_FORCEOPT на клиенте


а что там еще не так ?

А вообще отличная работа , спасибо !!!


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




Пост N: 2736
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.13 22:12. Заголовок: Dima пишет: На мале..


Dima пишет:

 цитата:
На маленьких базах EVAL в индексе не нужен а вот если база широкая и толстая..........
Можно пойти по тому же пути как в описании выше к RDDADS
Тебе виднее можно и нужно ли это.



Нужно ! Как юзер увидет что идет индексация ?
Что-то нужно делать с этим... Не сейчас, так чуть позже, все равно я только пробую...

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




Пост N: 2739
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 23:52. Заголовок: Andrey пишет: Как ю..


Andrey пишет:

 цитата:
Как юзер увидет что идет индексация ?


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


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




Пост N: 2755
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.03.13 09:55. Заголовок: Dima пишет: Pasha п..


Dima пишет:

 цитата:
Pasha пишет:

цитата:
кроме учета настройки _SET_FORCEOPT на клиенте



а что там еще не так ?



Сейчас на сервере letodb+bm используется драйвер BMDBF*. По команде "set filter to ..." строится либо BM-фильтр (если включен FORCEOPT), либо обычный (если выключен).
Реализация bm-фильтра в нынешнем варианте BMDBF* мне не нравится, поскольку фильтр строится для всех записей файла. Я об этом написал в devlist, но автор: Przemek - туда не заглянул.
Поэтому я хочу дать возможность клиенту также установить эту опцию. Если на сервере FORCEOPT включен, то с клиента можно будет задавать для кажного фильтра его настройку: будет ли он обычный или bitmap.

Конечно, можно переделать реализацию letodb+bm: на клиенте добавить еще один rdd: LETOBM, наследник LETO. При этом для первого сервер работал бы через BMDBFCDX, а для второго - через DBFCDX.
Это был бы самый гибкий способ, но реализация его сложнее.


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




Пост N: 2740
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.03.13 10:40. Заголовок: Dima пишет: нужно с..


Dima пишет:

 цитата:
нужно сбрасывать фильтра при установке LBM_DBSETFILTERARRAY()


Pasha
Это можно починить ?

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




Пост N: 2741
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.03.13 12:51. Заголовок: Pasha А можно ли с ..


Pasha
А можно ли с клиента узнать время и дату на сервере Leto ?
Можно ли это добавить в LETO_MGGETINFO() ?

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




Пост N: 2756
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.03.13 13:25. Заголовок: Dima пишет: Pasha ..


Dima пишет:

 цитата:
Pasha
Это можно починить ?



Да, вечером сделаю
А какая дата сервера нужна ? Текущая ?

Можно самому сделать функцию в letoudf.hrb, примерно такую:

Function Leto_Date( nUserStru )
Return DTOC(Date()) + " " + Time()

и вызывать ее с клиента:
leto_Udf("Leto_Date")

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


Пост N: 843
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 13.03.13 13:57. Заголовок: Дима, такая функция ..


Дима, такая функция есть: Leto_MGGetTime()
2009-01-30 21:40 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru)
* source/client/letomgmn.c
* source/server/letofunc.c
* Readme.txt
+ added LETO_MGGETTIME function. It's return array with server date
and time (seconds after midnight): {dDate, nSeconds}


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




Пост N: 2742
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.03.13 14:02. Заголовок: PSP пишет: Дима, та..


PSP пишет:

 цитата:
Дима, такая функция есть: Leto_MGGetTime()


Точно ;) Не увидел сразу.

Pasha пишет:

 цитата:
А какая дата сервера нужна ? Текущая ?


Уже прояснился вопрос.

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




Пост N: 2757
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.03.13 20:02. Заголовок: Выложил на CVS сброс..


Выложил на CVS сброс фильтра перед LBM_DBSETFILTERARRAY()

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




Пост N: 2738
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.03.13 20:53. Заголовок: Pasha пишет: Это бы..


Pasha пишет:

 цитата:
Это был бы самый гибкий способ, но реализация его сложнее.


Я за гибкость !

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




Пост N: 162
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.03.13 21:36. Заголовок: Pasha пишет:А индекс..


Pasha пишет:
 цитата:
А индексация ведь выполняется на сервере, и во время индексации обмена между клиентом и сервером нет, поэтому EVAL и не поддерживается.


 
Может использовать переменные сервера для процеса индексации:
на клиенте:
Leto_Progress(.T.) // создает на сервере 2 переменные на каждого nUserStru:
// группа PROGRESS: 1. lProgres_+nUserStru := .T./.F. создание индекса идет
// 2. nProgres_+nUserStru := счетчик
// на сервере добавить в индекацию ведение счетчика.

INDEX ON ... // будет работать с заполнением счетчика

while leto_IsProgress()
? Leto_Progress() // возвращает счетчик
inkey(2)
end

Leto_Progress(.F.) // убирает переменные


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




Пост N: 2746
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.03.13 23:55. Заголовок: Pasha пишет: Выложи..


Pasha пишет:

 цитата:
Выложил на CVS сброс фильтра перед LBM_DBSETFILTERARRAY()


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

Есть одна мысль по поводу BM фильтров и оптимальной их установке. Думаю она тебе тоже
посещала. Изложу позже.

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




Пост N: 184
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 17:28. Заголовок: help my. Первый раз ..


help my. Первый раз попробовал hbmk2 при сборке letodb. letodb.exe получил, хотел __WIN_DAEMON__, а получил как __WIN_SERVICE__ что не срослось:
запуск: Скрытый текст

letodb.hbp Скрытый текст

hbmk2 результат: Скрытый текст

запуск letodb.exe: Скрытый текст

source letodb.prg (сюда попадаем):
Скрытый текст


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




Пост N: 2853
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.13 17:39. Заголовок: SergKis Видимо серв..


SergKis
Видимо сервис Leto не остановлен

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




Пост N: 185
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 17:49. Заголовок: Dima пишет:Видимо се..


Dima пишет:
 цитата:
Видимо сервис Leto не остановлен


Так я не запускал, для установки сервиса, а рабочая версия letodb.exe в ней нет сервиса вообще.
letodb.exe uninstall выдает: 03/22/13 16:45:52: Error deleting LetoDB service: 1060
Мне не понятно как я попадаю на сообщение о сервисе, если строки в hbp закоментированы ?

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




Пост N: 2854
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.13 18:10. Заголовок: ну тогда letodb.exe ..


ну тогда letodb.exe stop
грохнуть letodb.exe и пересобрать
потом letodb.exe

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




Пост N: 186
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 18:19. Заголовок: Dima пишет:ну тогда ..


Dima пишет:
 цитата:
ну тогда letodb.exe stop
грохнуть letodb.exe и пересобрать
потом letodb.exe


Так делал уже несколько раз то и то. letodb.exe stop выдает:03/22/13 17:17:30: Can't STOP the server (not started?)...

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




Пост N: 2855
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.13 18:42. Заголовок: SergKis У меня так...


SergKis
У меня так. Собрал и запустил нормально
-inc
-obin/letodb
-iinclude
-n -w -q0 -es2
#-warn=max
#-prgflag={unix}-D__LINUX_DAEMON__
#-prgflag={unix}-D__LINUX__
{__BM}-prgflag=-D__BM
-prgflag={win}-D__WIN_DAEMON__
#-prgflag={win}-D__WIN_SERVICE__
-cflag={allmsvc}-D_CRT_SECURE_NO_DEPRECATE
#-cflag={win}-D__WIN_SERVICE__
{__BM}-cflag=-D__BM
-gui
-mt
{__BM}-lrddbm


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




Пост N: 2856
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.13 18:43. Заголовок: а перед сборкой ты у..


а перед сборкой ты удалял папку letodb\bin\.hbmk ?

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




Пост N: 187
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 18:51. Заголовок: Dima пишет:У меня та..


Dima пишет:
 цитата:
У меня так. Собрал и запустил нормально


У меня
-inc
-obin/letodb
-iinclude
-n -w -q0 -es2
#-warn=max
#-prgflag={unix}-D__LINUX_DAEMON__
#-prgflag={unix}-D__LINUX__
{__BM}-prgflag=-D__BM
-prgflag={win}-D__WIN_DAEMON__
#-prgflag={win}-D__WIN_SERVICE__
-cflag={allmsvc}-D_CRT_SECURE_NO_DEPRECATE
#-cflag={win}-D__WIN_SERVICE__
{__BM}-cflag=-D__BM
-gui
-mt
{__BM}-lrddbm
собралось, но при запуске 03/22/13 17:45:10: LetoDB service has had some problems: 1063
Harbour Make (hbmk2) 3.2.0dev (Rev. 18911)

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




Пост N: 2857
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.13 18:53. Заголовок: SergKis пишет: Harb..


SergKis пишет:

 цитата:
Harbour Make (hbmk2) 3.2.0dev (Rev. 18911)


Фиг его знает......
У меня
Harbour 3.2.0dev (Rev. 18899)

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




Пост N: 188
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 18:59. Заголовок: Dima Как в hbmk2 ppo..


Dima
Как в hbmk2 ppo файл получить, что то не врублюсь в параметры

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




Пост N: 2782
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.03.13 19:23. Заголовок: По-видимому, осталис..


По-видимому, остались obj-файлы от сборки с -D__WIN_SERVICE__. Надо удалить папку bin\.hbmk, и пересобрать сервер
А чтобы получить *.ppo, надо в скрипт просто добавить ключ
-p

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




Пост N: 189
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 19:36. Заголовок: Pasha СПАСИБО !!! вс..


Pasha
СПАСИБО !!! все получилось

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




Пост N: 190
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.13 19:38. Заголовок: Dima Глаз замылился...


Dima
Глаз замылился. Пропустил
 цитата:
а перед сборкой ты удалял папку letodb\bin\.hbmk ?



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




Пост N: 193
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.13 21:52. Заголовок: Pasha Попробовал соб..


Pasha
Попробовал собрать клиента LetoDB hb20 и msvc - получил:
blowfish.C
common_c.C
common_c.C(119) : warning C4244: функция: преобразование 'HB_ULONG' в 'long', возможна потеря данных
hbip.C
net.C
C:\BK9\MSVC\sdk\include\ws2def.h(91) : warning C4005: AF_IPX: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(460): см. предыдущее определение 'AF_IPX'
C:\BK9\MSVC\sdk\include\ws2def.h(127) : warning C4005: AF_MAX: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(479): см. предыдущее определение 'AF_MAX'
C:\BK9\MSVC\sdk\include\ws2def.h(163) : warning C4005: SO_DONTLINGER: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(402): см. предыдущее определение 'SO_DONTLINGER'
C:\BK9\MSVC\sdk\include\ws2def.h(206) : error C2011: sockaddr: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(485): см. объявление 'sockaddr'
C:\BK9\MSVC\sdk\include\ws2def.h(384) : error C2059: синтаксическая ошибка: константа
C:\BK9\MSVC\sdk\include\ws2def.h(518) : warning C4005: IN_CLASSA: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(287): см. предыдущее определение 'IN_CLASSA'
C:\BK9\MSVC\sdk\include\ws2def.h(524) : warning C4005: IN_CLASSB: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(293): см. предыдущее определение 'IN_CLASSB'
C:\BK9\MSVC\sdk\include\ws2def.h(530) : warning C4005: IN_CLASSC: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(299): см. предыдущее определение 'IN_CLASSC'
C:\BK9\MSVC\sdk\include\ws2def.h(541) : warning C4005: INADDR_ANY: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(304): см. предыдущее определение 'INADDR_ANY'
C:\BK9\MSVC\sdk\include\ws2def.h(543) : warning C4005: INADDR_BROADCAST: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(306): см. предыдущее определение 'INADDR_BROADCAST'
C:\BK9\MSVC\sdk\include\ws2def.h(577) : error C2011: sockaddr_in: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(312): см. объявление 'sockaddr_in'
C:\BK9\MSVC\sdk\include\winsock2.h(132) : error C2011: fd_set: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(68): см. объявление 'fd_set'
C:\BK9\MSVC\sdk\include\winsock2.h(167) : warning C4005: FD_SET: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(102): см. предыдущее определение 'FD_SET'
C:\BK9\MSVC\sdk\include\winsock2.h(176) : error C2011: timeval: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(111): см. объявление 'timeval'
C:\BK9\MSVC\sdk\include\winsock2.h(232) : error C2011: hostent: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(167): см. объявление 'hostent'
C:\BK9\MSVC\sdk\include\winsock2.h(245) : error C2011: netent: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(180): см. объявление 'netent'
C:\BK9\MSVC\sdk\include\winsock2.h(252) : error C2011: servent: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(187): см. объявление 'servent'
C:\BK9\MSVC\sdk\include\winsock2.h(264) : error C2011: protoent: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(199): см. объявление 'protoent'
C:\BK9\MSVC\sdk\include\winsock2.h(360) : error C2011: WSAData: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(322): см. объявление 'WSAData'
C:\BK9\MSVC\sdk\include\winsock2.h(458) : error C2011: sockproto: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(494): см. объявление 'sockproto'
C:\BK9\MSVC\sdk\include\winsock2.h(500) : error C2011: linger: переопределение типа "struct"
C:\BK9\MSVC\sdk\include\winsock.h(531): см. объявление 'linger'
C:\BK9\MSVC\sdk\include\winsock2.h(513) : warning C4005: SOMAXCONN: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(544): см. предыдущее определение 'SOMAXCONN'
C:\BK9\MSVC\sdk\include\winsock2.h(542) : warning C4005: FD_READ: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(562): см. предыдущее определение 'FD_READ'
C:\BK9\MSVC\sdk\include\winsock2.h(545) : warning C4005: FD_WRITE: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(563): см. предыдущее определение 'FD_WRITE'
C:\BK9\MSVC\sdk\include\winsock2.h(548) : warning C4005: FD_OOB: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(564): см. предыдущее определение 'FD_OOB'
C:\BK9\MSVC\sdk\include\winsock2.h(551) : warning C4005: FD_ACCEPT: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(565): см. предыдущее определение 'FD_ACCEPT'
C:\BK9\MSVC\sdk\include\winsock2.h(554) : warning C4005: FD_CONNECT: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(566): см. предыдущее определение 'FD_CONNECT'
C:\BK9\MSVC\sdk\include\winsock2.h(557) : warning C4005: FD_CLOSE: изменение макроопределения
C:\BK9\MSVC\sdk\include\winsock.h(567): см. предыдущее определение 'FD_CLOSE'
C:\BK9\MSVC\sdk\include\winsock2.h(1527) : error C2375: accept: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(735): см. объявление 'accept'
C:\BK9\MSVC\sdk\include\winsock2.h(1548) : error C2375: bind: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(740): см. объявление 'bind'
C:\BK9\MSVC\sdk\include\winsock2.h(1567) : error C2375: closesocket: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(745): см. объявление 'closesocket'
C:\BK9\MSVC\sdk\include\winsock2.h(1586) : error C2375: connect: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(747): см. объявление 'connect'
C:\BK9\MSVC\sdk\include\winsock2.h(1607) : error C2375: ioctlsocket: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(752): см. объявление 'ioctlsocket'
C:\BK9\MSVC\sdk\include\winsock2.h(1628) : error C2375: getpeername: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(757): см. объявление 'getpeername'
C:\BK9\MSVC\sdk\include\winsock2.h(1649) : error C2375: getsockname: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(762): см. объявление 'getsockname'
C:\BK9\MSVC\sdk\include\winsock2.h(1672) : error C2375: getsockopt: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(767): см. объявление 'getsockopt'
C:\BK9\MSVC\sdk\include\winsock2.h(1693) : error C2375: htonl: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(774): см. объявление 'htonl'
C:\BK9\MSVC\sdk\include\winsock2.h(1710) : error C2375: htons: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(776): см. объявление 'htons'
C:\BK9\MSVC\sdk\include\winsock2.h(1728) : error C2375: inet_addr: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(778): см. объявление 'inet_addr'
C:\BK9\MSVC\sdk\include\winsock2.h(1745) : error C2375: inet_ntoa: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(780): см. объявление 'inet_ntoa'
C:\BK9\MSVC\sdk\include\winsock2.h(1763) : error C2375: listen: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(782): см. объявление 'listen'
C:\BK9\MSVC\sdk\include\winsock2.h(1781) : error C2375: ntohl: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(786): см. объявление 'ntohl'
C:\BK9\MSVC\sdk\include\winsock2.h(1798) : error C2375: ntohs: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(788): см. объявление 'ntohs'
C:\BK9\MSVC\sdk\include\winsock2.h(1818) : error C2375: recv: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(790): см. объявление 'recv'
C:\BK9\MSVC\sdk\include\winsock2.h(1843) : error C2375: recvfrom: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(796): см. объявление 'recvfrom'
C:\BK9\MSVC\sdk\include\winsock2.h(1869) : error C2375: select: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(804): см. объявление 'select'
C:\BK9\MSVC\sdk\include\winsock2.h(1893) : error C2375: send: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(811): см. объявление 'send'
C:\BK9\MSVC\sdk\include\winsock2.h(1918) : error C2375: sendto: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(817): см. объявление 'sendto'
C:\BK9\MSVC\sdk\include\winsock2.h(1944) : error C2375: setsockopt: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(825): см. объявление 'setsockopt'
C:\BK9\MSVC\sdk\include\winsock2.h(1966) : error C2375: shutdown: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(832): см. объявление 'shutdown'
C:\BK9\MSVC\sdk\include\winsock2.h(1986) : error C2375: socket: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(836): см. объявление 'socket'
C:\BK9\MSVC\sdk\include\winsock2.h(2009) : error C2375: gethostbyaddr: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(843): см. объявление 'gethostbyaddr'
C:\BK9\MSVC\sdk\include\winsock2.h(2029) : error C2375: gethostbyname: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(848): см. объявление 'gethostbyname'
C:\BK9\MSVC\sdk\include\winsock2.h(2047) : error C2375: gethostname: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(850): см. объявление 'gethostname'
C:\BK9\MSVC\sdk\include\winsock2.h(2067) : error C2375: getservbyport: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(854): см. объявление 'getservbyport'
C:\BK9\MSVC\sdk\include\winsock2.h(2087) : error C2375: getservbyname: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(858): см. объявление 'getservbyname'
C:\BK9\MSVC\sdk\include\winsock2.h(2106) : error C2375: getprotobynumber: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(862): см. объявление 'getprotobynumber'
C:\BK9\MSVC\sdk\include\winsock2.h(2124) : error C2375: getprotobyname: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(864): см. объявление 'getprotobyname'
C:\BK9\MSVC\sdk\include\winsock2.h(2145) : error C2375: WSAStartup: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(868): см. объявление 'WSAStartup'
C:\BK9\MSVC\sdk\include\winsock2.h(2163) : error C2375: WSACleanup: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(872): см. объявление 'WSACleanup'
C:\BK9\MSVC\sdk\include\winsock2.h(2180) : error C2375: WSASetLastError: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(874): см. объявление 'WSASetLastError'
C:\BK9\MSVC\sdk\include\winsock2.h(2197) : error C2375: WSAGetLastError: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(876): см. объявление 'WSAGetLastError'
C:\BK9\MSVC\sdk\include\winsock2.h(2214) : error C2375: WSAIsBlocking: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(878): см. объявление 'WSAIsBlocking'
C:\BK9\MSVC\sdk\include\winsock2.h(2231) : error C2375: WSAUnhookBlockingHook: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(880): см. объявление 'WSAUnhookBlockingHook'
C:\BK9\MSVC\sdk\include\winsock2.h(2248) : error C2375: WSASetBlockingHook: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(882): см. объявление 'WSASetBlockingHook'
C:\BK9\MSVC\sdk\include\winsock2.h(2265) : error C2375: WSACancelBlockingCall: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(884): см. объявление 'WSACancelBlockingCall'
C:\BK9\MSVC\sdk\include\winsock2.h(2287) : error C2375: WSAAsyncGetServByName: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(886): см. объявление 'WSAAsyncGetServByName'
C:\BK9\MSVC\sdk\include\winsock2.h(2314) : error C2375: WSAAsyncGetServByPort: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(894): см. объявление 'WSAAsyncGetServByPort'
C:\BK9\MSVC\sdk\include\winsock2.h(2340) : error C2375: WSAAsyncGetProtoByName: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(902): см. объявление 'WSAAsyncGetProtoByName'
C:\BK9\MSVC\sdk\include\winsock2.h(2365) : error C2375: WSAAsyncGetProtoByNumber: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(909): см. объявление 'WSAAsyncGetProtoByNumber'
C:\BK9\MSVC\sdk\include\winsock2.h(2390) : error C2375: WSAAsyncGetHostByName: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(916): см. объявление 'WSAAsyncGetHostByName'
C:\BK9\MSVC\sdk\include\winsock2.h(2417) : error C2375: WSAAsyncGetHostByAddr: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(923): см. объявление 'WSAAsyncGetHostByAddr'
C:\BK9\MSVC\sdk\include\winsock2.h(2440) : error C2375: WSACancelAsyncRequest: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(932): см. объявление 'WSACancelAsyncRequest'
C:\BK9\MSVC\sdk\include\winsock2.h(2461) : error C2375: WSAAsyncSelect: переопределение; другая компоновка
C:\BK9\MSVC\sdk\include\winsock.h(934): см. объявление 'WSAAsyncSelect'
Создание кода...

С этим можно что то сделать или надо hb3.2 ?


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




Пост N: 2888
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.03.13 22:16. Заголовок: SergKis пишет: или ..


SergKis пишет:

 цитата:
или надо hb3.2 ?


с ним нормально собирается ?

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




Пост N: 194
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.13 22:59. Заголовок: Dima пишет:с ним нор..


Dima пишет:
 цитата:
с ним нормально собирается ?


hb3.2 пока не в работе - все на hb2.0. LetoDb сервер (xHb сборка) 2011 года, клиент letordd.lib: msvc, hb2.0 нормально идет, но на медленном соединении не хватает TimeOut, то разъединится, то функция на сервере не выполнится - наверно тоже из за timeout. Сервер bcc hb3.2 с твоей помощью и Pasha собрал, а у клиента бяка пошла.

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




Пост N: 2798
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.03.13 08:45. Заголовок: А клиент с harbour 3..


А клиент с harbour 3.x + msvc собирается ?

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




Пост N: 195
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.03.13 09:19. Заголовок: Pasha пишет:А клиент..


Pasha пишет:
 цитата:
А клиент с harbour 3.x + msvc собирается ?


Сборки hb3.2+msvc нет - нет времени связываться, т.к. просто не пойдет, по опыту hb2.0.
И проблема не решится т.к.:
msvc ws2def.h :
#define AF_NS 6 // XEROX NS protocols
#define AF_IPX AF_NS // IPX protocols: IPX, SPX, etc.

hb2.0 hbsocket.ch :
#define HB_SOCKET_AF_IPX HB_SOCKET_PF_IPX

hb3.2 hbsocket.ch :
#define HB_SOCKET_AF_IPX 4
...
#define HB_SOCKET_PF_IPX HB_SOCKET_AF_IPX


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




Пост N: 2799
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.03.13 10:04. Заголовок: rddleto для hb20 + b..


rddleto для hb20 + bcc, mingw собирается
Проблема со сборкой hb20 + watcom, msvc
Если в funcleto.h закомментировать строку

#include <winsock2.h>

то часть ошибок уходит. С остальными пока не знаю, как быть.

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




Пост N: 196
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.03.13 10:50. Заголовок: Pasha пишет:rddleto ..


Pasha пишет:
 цитата:
rddleto для hb20 + bcc, mingw собирается
Проблема со сборкой hb20 + watcom, msvc
Если в funcleto.h закомментировать строку

#include <winsock2.h>

то часть ошибок уходит. С остальными пока не знаю, как быть.


Мы тоже в задумчивости ...,пока не горит и останемся до лучших времен на старой версии letodb.

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




Пост N: 121
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 26.03.13 11:27. Заголовок: И все таки иногда падает LetoDB у меня !


Pasha
вот лог:

User: 192.168.120.18 PLASMENT3 ccw.Exe
Command: close
Unrecoverable error 6005: Exception error: %s

Exception Code:C0000005
Exception Address:0040CE5D
EAX:202E7665 EBX:0000000A ECX:010B523C EDX:0000000A
ESI:00E0AEC8 EDI:010B523C EBP:010AFD8C
CS:EIP:001B:0040CE5D SS:ESP:0023:010AFD8C
DS:0023 ES:0023 FS:003B GS:0000
Flags:00010206
CS:EIP: 3B 50 04 73 E9 33 C0 5D C3 55 8B EC 51 53 56 57
SS:ESP: 010AFDA8 00405C17 00E0AEC8 0000000A 010B523C 01161170 009D33D8 010AFDF8 004036D7 01161170 0000000A 010AFE6C 010B523C 009D33D0 010D3D44 010AFDD4

C stack:
EIP: EBP: Frame: OldEBP, RetAddr, Params...
0040CE5D 010AFD8C 010AFDA8 00405C17 00E0AEC8 0000000A 010B523C 01161170 009D33D8
00405C17 010AFDA8 010AFDF8 004036D7 01161170 0000000A 010AFE6C 010B523C 009D33D0 010D3D44 010AFDD4 00430FC0
004036D7 010AFDF8 010AFE24 0040732A 00DFA58C 01161170 010B523C 009D33D5 00000040 010D3D44 010B523C 00DFA58C
0040732A 010AFE24 010AFE7C 00407605 010B523C 00DFA58C 01161170 010AFE6C 01375B96 00DFA58C 01375B9D 6C656B69
00407605 010AFE7C 010AFEA8 0040C8D1 00DFA58C 01375B9D 01375B96 00000015 00DFA58C 00000001 00000001 0000000C
0040C8D1 010AFEA8 010AFED4 0040D650 00DFA58C 004B4BFC 00FB0000 009D2C34 00012C94 00000138 83126E98 40DD3958
0040D650 010AFED4 010AFFA4 004B49F8 00000001 00000000 00000000 009D2C34 00000094 00000005 00000001 00000A28
004B49F8 010AFFA4 010AFFB4 004B4A2B 009D2C34 004B4BFC
004B4A2B 010AFFB4 010AFFEC 7C80B713 009D2C34 00000000 00000000 009D2C34 7FFDC000 8A62C600 010AFFC0 898616B8


Modules:
0x00400000 0x000DE000 d:\letodb\letodb.exe
0x7C900000 0x000AF000 C:\WINDOWS\system32\ntdll.dll
0x64D00000 0x0003F000 C:\Program Files\AVAST Software\Avast\snxhk.dll
0x7C800000 0x000F6000 C:\WINDOWS\system32\KERNEL32.dll
0x71AD0000 0x00009000 C:\WINDOWS\system32\WSOCK32.DLL
0x71AB0000 0x00017000 C:\WINDOWS\system32\WS2_32.dll
0x77DD0000 0x0009B000 C:\WINDOWS\system32\ADVAPI32.dll
0x77E70000 0x00092000 C:\WINDOWS\system32\RPCRT4.dll
0x77FE0000 0x00011000 C:\WINDOWS\system32\Secur32.dll
0x77C10000 0x00058000 C:\WINDOWS\system32\msvcrt.dll
0x71AA0000 0x00008000 C:\WINDOWS\system32\WS2HELP.dll
0x7E410000 0x00091000 C:\WINDOWS\system32\USER32.DLL
0x77F10000 0x00049000 C:\WINDOWS\system32\GDI32.dll
0x71A50000 0x0003F000 C:\WINDOWS\system32\mswsock.dll
0x662B0000 0x00058000 C:\WINDOWS\system32\hnetcfg.dll
0x71A90000 0x00008000 C:\WINDOWS\System32\wshtcpip.dll
0x69450000 0x00016000 C:\WINDOWS\system32\faultrep.dll
0x77C00000 0x00008000 C:\WINDOWS\system32\VERSION.dll
0x769C0000 0x000B4000 C:\WINDOWS\system32\USERENV.dll
0x76360000 0x00010000 C:\WINDOWS\system32\WINSTA.dll
0x5B860000 0x00055000 C:\WINDOWS\system32\NETAPI32.dll
0x76F50000 0x00008000 C:\WINDOWS\system32\WTSAPI32.dll
0x77920000 0x000F3000 C:\WINDOWS\system32\SETUPAPI.dll
0x77F60000 0x00076000 C:\WINDOWS\system32\SHLWAPI.dll
0x773D0000 0x00103000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
0x5D090000 0x0009A000 C:\WINDOWS\system32\comctl32.dll
0x77B40000 0x00022000 C:\WINDOWS\system32\Apphelp.dll

LetoDB у меня работает как демон а не как сервиз не знаю может в етом проблема

сначала я кинулся убирать AVAST но не в нем проблема , несмотря что он враждебно относится к LetoDB .

иногда падает при закрытии одной обласи или всех рабочих облостей со стороны клиента . Лечится ето через Leto_Commit() перед закрытием
на локаьном соединении ето нельзя воспроизвести только через сеть. Ошибка получается не кажды раз .

В етих модулях которые вызвали падение я не использую транзакции.



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



Пост N: 793
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 26.03.13 11:41. Заголовок: При сборке manage.pr..


При сборке manage.prg с помощью manage.hbp получаю

 цитата:

hbmk2: Warning: Non-portable parameter:
'{mingw|mingw64}-l../../lib/${hb_plat}/${hb_comp}/librddleto.a' in
manage.hbp:18. Use '-L..\..\lib\win\mingw -lrddleto' option(s) instead.
hbmk2: Warning: Non-portable parameter:
'{mingw|mingw64}-l${hwgui_dir}lib/${hb_plat}/${hb_comp}/libhwgui.a' in
manage.hbp:19. Use '-Llib\win\mingw -lhwgui' option(s) instead.
hbmk2: Warning: Non-portable parameter:
'{mingw|mingw64}-l${hwgui_dir}lib/${hb_plat}/${hb_comp}/libprocmisc.a'
in manage.hbp:20. Use '-Llib\win\mingw -lprocmisc' option(s) instead.
hbmk2: Warning: Non-portable parameter:
'{mingw|mingw64}-l${hwgui_dir}lib/${hb_plat}/${hb_comp}/libhbxml.a' in
manage.hbp:21. Use '-Llib\win\mingw -lhbxml' option(s) instead.
hbmk2: Compiling Harbour sources...
manage.prg(52) Error F0029 Can't open #include file 'hwgui.ch'
hbmk2: Error: Running Harbour compiler (embedded). 1
(c:\dev\harbour\bin\harbour.exe) -n2 manage.prg -n -w -q0 -es2 -o..\..\bin\win\m
ingw\.hbmk\win\mingw\ -ic:\dev\harbour\include -i..\..\include -iinclude



Собираю таким hbp, с помощью соответствующих hbc файлов

 цитата:

${hwgui_dir}/hwgui.hbc
../../rddleto.hbc

-inc
-mt

manage



И еще, для свежего hwgui надо добавить hwg_ к след. ф-ям
hbmk2: Error: Referenced, missing, but unknown function(s): SENDMESSAGE(),
GETEDITTEXT(), MSGSTOP(), MSGYESNO()


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





Пост N: 175
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 26.03.13 12:24. Заголовок: Скачал последнюю вер..


Скачал последнюю версию. (v 1.350.2.116 2013/03/24)
Собрал под Harbour для Watcom. Создал daemon, service, lib, dll ошибок нет (с __BM и без).

Под xHarbour нужно переделать BEGIN SEQUENCE на try catch в файле server.prg.

Для теста взял VC2003 и Harbour создал сервис ошибок нет тольки варнинги.

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




Пост N: 197
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.13 08:01. Заголовок: Pasha Есть такая сит..


Pasha
Есть такая ситуация (версия letodb $Id: Changelog,v 1.350 2011/04/21 18:00:52 ptsarenko Exp $).
таблица letodb LastRec 2500, RecSize 1567 :
1-ый клиент листает MiniGui browse - соединение быстрый internet
2-ой клиент делает запросы с модемного соединения GPRS:
 
1. время выполнения 30-40 сек., первый клиент нормально работает
while ! eof()
aAdd(aArr, {RecNo(), Fld1, Fld2, Fld3})
skip
enddo

2. время выполнения 2-3 сек., у первого клиента клинит browse на это время
leto_udf('UDF_RecordsNo') - возвращает массив записей {RecNo1, ...}

3. время выполнения 4-5 сек., у первого клиента клинит browse на это время
leto_udf('UDF_RecordsNo', 'Fld1,Fld2,Fld3') - возвращает массив записей {{RecNo, Fld1,Fld2,Fld3}, ...}

Function UDF_RecordsNo(nUseArea, cParam)
...
while ! eof()
aAdd(aArr, RecNo()) // или aAdd(aArr, {RecNo, Fld1, Fld2, Fld3})
skip
enddo
Return leto_AtoC(aArr) // или bk_A2S(aArr)

Вопрос - есть ли механизм для применения в цикле while чтобы передавать управление letodb и не клинить работу др.клиента, может специальиный skip надо применять или это дохлое дело ... ?

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




Пост N: 2801
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.03.13 09:06. Заголовок: Так это же старая ве..


Так это же старая версия letodb с двумя потоками, в которой все запросы выполняет один поток. В этой версии ничего сделать нельзя. Надо использовать rel-1-mt ветвь

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




Пост N: 198
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.13 09:15. Заголовок: Pasha пишет:В этой в..


Pasha пишет:
 цитата:
В этой версии ничего сделать нельзя.

Я так и думал.

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




Пост N: 2892
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.03.13 10:08. Заголовок: Pasha А во сколько ..


Pasha
А во сколько потоков сегодня работает Leto сервер ?

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




Пост N: 2802
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.03.13 11:37. Заголовок: Сейчас для каждого с..


Сейчас для каждого соединения создается отдельный поток

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




Пост N: 2894
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 00:28. Заголовок: Dima Юзер создал пе..


Pasha
Юзер создал переменную на сервере
leto_varSet( "main","var_int",100 )
И трах бах комп у него "упал" , переменная останется на сервере ?

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




Пост N: 2803
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 09:34. Заголовок: Dima пишет: И трах ..


Dima пишет:

 цитата:
И трах бах комп у него "упал" , переменная останется на сервере ?



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

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


Пост N: 851
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.03.13 09:39. Заголовок: Паша, какой таймаут ..


Паша, какой таймаут перед сбросом соединения отвалившегося клиента? И касается ли это заблокированных этим клиентом записей?

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




Пост N: 2895
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 09:43. Заголовок: Pasha Это правильно..


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

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




Пост N: 2804
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 11:40. Заголовок: Dima пишет: А объяв..


Dima пишет:

 цитата:
А объявленная юзером переменная будет доступна другим юзерам ?



Честно говоря, поддержку переменных делал не я, и сам я их не использую.
Насколько я понял по сырцам, здесь важен флаг создания переменной: 4-й параметр функции leto_VarSet
Если установлен флаг LETO_VOWN, то это переменная именно этого юзера, и при закрытии соединения она будет удалена.
Иначе переменная останется.

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




Пост N: 2805
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 11:45. Заголовок: PSP пишет: Паша, ка..


PSP пишет:

 цитата:
Паша, какой таймаут перед сбросом соединения отвалившегося клиента? И касается ли это заблокированных этим клиентом записей?



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

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




Пост N: 2896
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 11:46. Заголовок: Pasha Хорошо а как ..


Pasha
Хорошо а как тогда организовать на уровне Leto сервера что бы нельзя было зайти в программу с одним
логином более 1 раза ?
Кинулся было к варианту с переменными но как оказалось они не общедоступны...
Можно конечно и по старинке сделать но хотелось более красиво реализовать.

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




Пост N: 2806
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 12:05. Заголовок: Почему не общедоступ..


Почему не общедоступны ? Примерно так:

if leto_VarGet("users", cUserID) == nil
leto_VarSet("users", cUserID, value)
// только надо флаги правильно указать
else
quit
endif

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




Пост N: 2897
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 12:15. Заголовок: Pasha Понял. Пробну..


Pasha
Понял. Пробну. Спасибо !

Как часто вызывать LETO_CONNECT() ?
Перед каждым USE или достаточно 1 раз в начале программы ?

RddInfo( RDDI_REFRESHCOUNT, <lSet>,, [nConnection] ) это глобальная установка
или нужно ее указывать при открытии каждой базы ?

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




Пост N: 2898
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 12:18. Заголовок: Pasha пишет: // тол..


Pasha пишет:

 цитата:
// только надо флаги правильно указать


Про флаги можно подробнее ?! Какой что означает...

 
#define LETO_VCREAT 1
#define LETO_VOWN 2
#define LETO_VDENYWR 4
#define LETO_VDENYRD 8
#define LETO_VPREVIOUS 1



Есть пожелание :)
Добавить в возвращаемый массив LETO_MGGETINFO 18 элементом серийный номер винта с которого стартовал LetoDB сервер ,
ну или системного винта. Говорю о функции volserial()
А еще лучше MAC адрес сетевой платы !!!
То есть нужен любой уникальный ID оборудования , что бы прогу можно было привязать , зная что ее
ни кто не упрет на лево (минуя разработчика).

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




Пост N: 2807
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 13:25. Заголовок: Dima пишет: Как час..


Dima пишет:

 цитата:
Как часто вызывать LETO_CONNECT() ?
Перед каждым USE или достаточно 1 раз в начале программы ?



Надо один раз вызывать.


 цитата:
RddInfo( RDDI_REFRESHCOUNT, <lSet>,, [nConnection] ) это глобальная установка
или нужно ее указывать при открытии каждой базы ?



Глобальная установка, для всех р/о

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




Пост N: 2899
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 13:45. Заголовок: Pasha Понял. А что..


Pasha
Понял.

А что насчет этого ? Ну очень интересно

Dima пишет:

 цитата:
Про флаги можно подробнее ?! Какой что означает...



Dima пишет:

 цитата:
Есть пожелание :)



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




Пост N: 2808
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 15:02. Заголовок: Чуть позже напишу, с..


Чуть позже напишу, сейчас некогда, надо самому глянуть, что за флаги
Но скорее всего:

#define LETO_VCREAT 1 если переменной нет, она создается
#define LETO_VOWN 2 переменная этого пользователя (соединения)
#define LETO_VDENYWR 4 запрет присвоения для другого пользователя
#define LETO_VDENYRD 8 запрет чтения другим пользователем
#define LETO_VPREVIOUS 1 надо смотреть

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



Пост N: 797
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 29.03.13 16:08. Заголовок: Dima пишет: хочу ко..


Dima пишет:

 цитата:
хочу контролировать вход юзеров



Есть опция Pass_for_Login=.T., раньше с ней игрался, так вот какая мысль, если добавить еще опцию допустим Multi_login (по умолчанию .F. - один пользователь, сервер сам проверяет, если пользователь залогинился, такой уже не зайдет), если .T. - значит допускается больше одного коннекта для одного юзера. Если Pass_for_Login = .F., то MultiLogin не обрабатывается. Вроде так будет лучше и правильней чем игры с переменными и флагами со стороны клиента.

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




Пост N: 2900
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 16:53. Заголовок: AlexMyr Начну с пер..


AlexMyr
Начну с переменных а там посмотрим. Вроде и особо играться там не надо. При входе проверил переменную , если
ее нет , завел. Если есть то юзер не войдет.
Ее даже убивать не надо при выходе из программы (убивается на автомате после LETO_DISCONNECT если я верно понял)

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




Пост N: 2809
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 17:42. Заголовок: sashaBG пишет: Leto..


sashaBG пишет:

 цитата:
LetoDB у меня работает как демон а не как сервиз не знаю может в етом проблема

сначала я кинулся убирать AVAST но не в нем проблема , несмотря что он враждебно относится к LetoDB .

иногда падает при закрытии одной обласи или всех рабочих облостей со стороны клиента . Лечится ето через Leto_Commit() перед закрытием
на локаьном соединении ето нельзя воспроизвести только через сеть. Ошибка получается не кажды раз .



У меня такая ошибка никогда не возникала. Судя по тому, что она лечится через Leto_Commit, возможно, перед dbCloseArea остались данные, которые не переданы на сервер, и блокированные записи. Хотя я таких ситуаций стараюсь избегать, смоделировал их, и ошибки не получил. Посмотрел по сырцам - если такая ситуация возникнет, то измененные записи перед закрытием будут переданы на сервер, и список блокированных записей очищается. Причина ошибки пока непонятна.


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




Пост N: 2810
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 17:48. Заголовок: Pasha пишет: #defin..


Pasha пишет:

 цитата:
#define LETO_VPREVIOUS 1



Функция leto_varset присваивает переменной новое значение, и возвращает ее предыдущее значение


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




Пост N: 2901
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 18:08. Заголовок: Pasha пишет: Функци..


Pasha пишет:

 цитата:
Функция leto_varset присваивает переменной новое значение, и возвращает ее предыдущее значение


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

Pasha
Порадуешь на счет MAC адреса ?

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




Пост N: 2811
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 20:13. Заголовок: Dima пишет: Порадуе..


Dima пишет:

 цитата:
Порадуешь на счет MAC адреса ?



А что надо с MAC-адресом ? Возврашать MAC-адрес сервера, что ли ?

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




Пост N: 2902
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 20:16. Заголовок: Pasha пишет: Возвра..


Pasha пишет:

 цитата:
Возврашать MAC-адрес сервера, что ли ?


Да MAC адрес сетевой платы cервера.
Или к примеру volserial() винта откуда стартовал LetoDB сервер.


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




Пост N: 2812
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.13 20:34. Заголовок: В source\server&..


В source\server\server.prg надо добавить функцию:

FUNCTION leto_VolSerial( nUserStru )
RETURN VolSerial()

линковать сервер с hbct.lib

Вызов с клиента:
leto_UDF("leto_VolSerial")

Тоже самое можно сделать с mac-адресом, надо только найти такую функцию в харборе.
Только в сырцы letodb я это включать не хочу, все-таки другая специфика.


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




Пост N: 2903
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.03.13 20:48. Заголовок: Pasha Спасибо. Pas..


Pasha
Спасибо.

Pasha пишет:

 цитата:
Тоже самое можно сделать с mac-адресом, надо только найти такую функцию в харборе.


Уже искал и не нашел.
Но есть GetAdaptersInfo в iphlpapi.lib , но одной прилинковки этой библы не достаточно.
Видать что то еще надо.

Как вариант можно так
 
#include "hbwin.ch"

PROCEDURE Main
LOCAL nHKey := WIN_HKEY_LOCAL_MACHINE
LOCAL cRegPath := "SOFTWARE\Microsoft\Windows Genuine Advantage"
LOCAL cRegKey := "MAC"

? GetRegistry( nHKey, cRegPath, cRegKey )
RETURN



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




Пост N: 2914
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.04.13 12:41. Заголовок: Если EnableFileFunc ..


Если EnableFileFunc = 1
То функция FILE() сможет определять наличие файла на сервере или нужно юзать LETO_FILE () ?

Будут ли функции в будущем ?
Leto_Fcreate()
Leto_Fseek()
Leto_Fopen()


Как проверить существование папки на сервере ?


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




Пост N: 2816
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.04.13 17:04. Заголовок: Добавлять в letodb э..


Добавлять в letodb эту функциональность как-то не хочется, так как это несвойственные ему задачи, да и дублирование существующих возможностей.

File() и прочие файловые функции будут работать:
1. Если есть файловый доступ к данному сетевому ресурсу: сетевой диск или через unc

2. Посредством netio. На сервере должен быть кроме letodb запущен netio-сервер, и тогда можно к нему сконнектиться и использовать файловые операции вида:

Local nH := FOpen("net:" + cFileName, ...)

Правда, для windows netiosrv работает как приложение, а не как служба, что создаст некоторые трудности.

Дополню: конечно, в letodb это можно реализовать посредством udf-функций

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




Пост N: 2915
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.04.13 17:22. Заголовок: Pasha пишет: File()..


Pasha пишет:

 цитата:
File() и прочие файловые функции будут работать:
1. Если есть файловый доступ к данному сетевому ресурсу: сетевой диск или через unc



Базу предполагалось спрятать от юзеров и папку с базой расшаривать не предполагалось.
Спрошу иначе ;)
Когда запускается программа (моя) она проверяет наличие баз данных.
Если какой то базы нет ,она создается (проверяю с помощью FILE())
Что бы не париться с NET: мне достаточно с RDD LETO проверить существование файла
на сервере Leto с помощью File() или надо юзать Leto_File() ?



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




Пост N: 2817
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.04.13 18:33. Заголовок: Если папка не расшар..


Если папка не расшарена, то file и все остальные файловые функции работать не будут. Надо использовать leto_file

leto_file('//127.0.0.1:2812/' + cFile)

путь к файлу надо указывать относительно DataPath из letodb.ini

Для проверки существования папки можно использовать leto_Directory. Параметры такие же, что и Directory
Все существующие файловые функции описаны в разделе 7.6 readme

Можно написать свой набор функций, через механизм udf.
Пример:
На сервере добавляется функция

Function leto_FCreate(nUserStru, cFileName, nAttr)
Return FCreate(leto_GetAppOptions( 1 ) + cFileName, nAttr)

leto_GetAppOptions( 1 ) возвращает DataPath

Вызов с клиента:

leto_UDF('leto_FCreate', cFileName, nAttr)

и так далее


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




Пост N: 2916
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.04.13 18:35. Заголовок: Pasha Спасибо за ра..


Pasha
Спасибо за развернутый ответ.

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




Пост N: 199
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.04.13 09:38. Заголовок: Dima пишет:Когда зап..


Dima пишет:
 цитата:
Когда запускается программа (моя) она проверяет наличие баз данных.
Если какой то базы нет ,она создается (проверяю с помощью FILE())


Может будет интересно. Т.к. у нас в прогах на clipper каталоги для баз создаются динамически и их много, то при переводе на letodb сохранили такую же схему работы, добавив в сервер в функцию hs_createtable(...) проверку и создание каталогов. Вот текст: Скрытый текст


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




Пост N: 2917
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 10:34. Заголовок: SergKis Спасибо !..


SergKis
Спасибо !

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




Пост N: 2918
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 17:05. Заголовок: Застрял на ерунде. ..


Застрял на ерунде.

? leto_file(pathleto+"\dbf\test.dbf") // .t.
set path to (pathleto+"\dbf\")
? leto_file("test.dbf") // почему то .f. с обычным RDD .t. впрочем как и в Clipper

Куда копать ?


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


Пост N: 858
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.13 17:07. Заголовок: Видимо, сервер ничег..


Видимо, сервер ничего не знает про установку SET PATH TO

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




Пост N: 2919
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 17:15. Заголовок: PSP пишет: Видимо, ..


PSP пишет:

 цитата:
Видимо, сервер ничего не знает про установку SET PATH TO


Вероятно должен знать
Выдержка из доки
 
Для открытия файла dbf на сервере необходимо вставить в оператор SET PATH TO,
или в команду USE путь к серверу в стандартной форме:
//ip_address:port/data_path/file_name.


Правда тут ни чего не сказано насчет файловых функций таких как File() к примеру.
Но ведь в Harbour как и в Clipper SET PATH TO распространяется и на функцию File() в том числе.

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


Пост N: 859
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.13 17:17. Заголовок: Думаю, Павел научит ..


Думаю, Павел научит Leto_File() учитывать SET PATH TO
Надо подождать... :)

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




Пост N: 2920
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 17:37. Заголовок: PSP пишет: Думаю, П..


PSP пишет:

 цитата:
Думаю, Павел научит Leto_File() учитывать SET PATH TO


;)
Еще и эти тоже LETO_FERASE , LETO_FRENAME

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




Пост N: 2818
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.04.13 18:09. Заголовок: PSP пишет: Думаю, П..


PSP пишет:

 цитата:
Думаю, Павел научит Leto_File() учитывать SET PATH TO
Надо подождать... :)



Я специально избегаю в файловых функциях leto использование set path. Когда я в 2008-м только начинал использовать leto, эти настройки учитывал. Но заметил, что программа вдруг начинает работать необьяснимо медленно. Выяснилось, что обычные файловые функции вроде File(), тоже использующие set path, резко замедляют свою работу, так как по set path начинают искать в сети файл, а этого ресурса то нет. В set path же есть строка вроде //server:2812/path
Пришлось убрать учет set path. Приходится разделять обычные файловые операции и запросы к letodb. Одна и таже настройка и для первого, и для второго конфликтует между собой.

Если надо найти файл (один или несколько) на сервере letodb, который может быть в одной из нескольких папок, можно использовать функцию
UDF_FilesExist

из модуля letoudf.prg

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




Пост N: 2921
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 18:19. Заголовок: Pasha пишет: исполь..


Pasha пишет:

 цитата:
использовать функцию
UDF_FilesExist


Вот так ?
leto_udf("UDF_FilesExist",pathleto+"\dbf\","test.dbf")


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




Пост N: 2819
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.04.13 18:32. Заголовок: Нет, 2-й параметр - ..


Нет, 2-й параметр - массив имен файлов, которые надо проверить
И функция возвращает тоже массив, каждый элемент которого - или папка, в которой находится файл, или символ "-", если файл не найден.
Одним вызовом можно проверить существование всех файлов БД, индексов, и что там еще надо проверить.

т.е
leto_udf("UDF_FilesExist",pathleto+"\dbf\"+pathleto+"\dbf2\"+...,{"test.dbf", "test2.dbf", ...})

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


Пост N: 860
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.13 20:01. Заголовок: Pasha пишет: Но зам..


Pasha пишет:

 цитата:
Но заметил, что программа вдруг начинает работать необьяснимо медленно. Выяснилось, что обычные файловые функции вроде File(), тоже использующие set path, резко замедляют свою работу, так как по set path начинают искать в сети файл, а этого ресурса то нет. В set path же есть строка вроде //server:2812/path


Кажись, припоминаю... Вроде была об этом речь. Забылось, конечно, за давностью так сказать... :)

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




Пост N: 2922
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 21:02. Заголовок: PSP пишет: Забылось..


PSP пишет:

 цитата:
Забылось, конечно, за давностью так сказать...


Давно Leto юзаешь ?

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


Пост N: 861
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.13 21:52. Заголовок: Чуть больше двух лет..


Чуть больше двух лет.

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




Пост N: 2923
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 22:30. Заголовок: PSP пишет: Чуть бол..


PSP пишет:

 цитата:
Чуть больше двух лет.


Спишь спокойно ? ;)
Я когда на ADS+Clipper перелез стал спать спокойно. Ночные звонки прекратились.
С Leto так же ?

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


Пост N: 863
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.13 22:34. Заголовок: Ни разу с сервером н..


Ни разу с сервером никаких проблем не было. Сервер на ВинХР Проф, шуршит сам по себе, доступ к нему ограничен. Все нормально. :)

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




Пост N: 2924
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.04.13 22:39. Заголовок: PSP :sm52: Понял ..


PSP

Понял , переделываю дальше свою прогу.

PS
3 дня убил на перевод с Clipper+ADS на Harbour-ADS (12 часов в сутки пахал) и 3 недели на оптимизацию отчетов и фильтров.
Теперь новый этап -> LetoDB. Переделаю , отпишу.

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


Пост N: 864
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.13 22:42. Заголовок: Удачи! :)..


Удачи! :)

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




Пост N: 2925
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.13 10:32. Заголовок: Pasha Ты уверен что..


Pasha
Ты уверен что переменные созданные юзером при выходе из программы + LETO_DISCONNECT() убиваются ?
Кажется это не так.

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




Пост N: 2927
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.13 12:17. Заголовок: Установка set autope..


Установка set autopen off вообще работает для Leto ? Похоже нет.
Что делать ?

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




Пост N: 2820
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 13:43. Заголовок: Dima пишет: Ты увер..


Dima пишет:

 цитата:
Ты уверен что переменные созданные юзером при выходе из программы + LETO_DISCONNECT() убиваются ?
Кажется это не так.



Надо создавать переменную с флагом LETO_VOWN, и все будет ок
Запусти 2 раза тест:

leto_connect(cPath)
? leto_varget('users', 'u3')
? leto_varset('users', 'u3', 1, LETO_VCREAT+LETO_VOWN)
? leto_varget('users', 'u3')
wait

при 2-м запуске переменной не будет.


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




Пост N: 2928
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.13 13:53. Заголовок: Pasha пишет: LETO_V..


Pasha пишет:

 цитата:
LETO_VCREAT+LETO_VOWN


Упс не знал что можно так , попробую. Спасибо.

Установка Set path на DBCREATE то же не распространяется ?

Что бы бровс не тормозил делаю такую установку
RddInfo( RDDI_REFRESHCOUNT,.f.,,LETO_GETCURRENTCONNECTION())
но он все равно подтормаживает если сравнивать с обычным DBFCDX без LETO.
Что не так делаю ?

А как работать с mem: базами ? Падает прога с ошибкой LETO 1004
Базу создаю так

 
kad:="test"
dbcreate("mem:"+kad,;
{;
{"data","d",8,0},;
{"nakl","c",100,0},;
{"prixs","n",17,2},;
{"vozr","n",17,2},;
{"p_dok","n",1,0},;
{"oplata","n",17,2}},,.t.,"VREMS")



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




Пост N: 2821
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 14:36. Заголовок: Наколько я помню, дл..


Наколько я помню, для dbCreate используется set default

А насчет бровса, dbfcdx локальный ?
Локальный dbfcdx будет быстрее локального letodb, так как в letodb используется дополнительный слой.
Но по сети letodb будет быстрее.
Для оптимизации бровса в letodb надо еще задать размер skip-буфера по к-ву строк в бровсе.
Да и можно проанализировать, насколько оптимизирован letodb: запустить сервер с параметром в letodb.ini

Debug=10

и анализовать лог на сервере. В нем будут пакеты, которые идут с клиента.

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




Пост N: 2822
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 14:39. Заголовок: Dima пишет: А как р..


Dima пишет:

 цитата:
А как работать с mem: базами ? Падает прога с ошибкой LETO 1004
Базу создаю так



Файл в памяти на клиенте ? Тогда надо его создавать с DBFCDX, а не с letodb:

dbcreate("mem:"+kad, aStru, "DBFCDX", .t., cAlias)

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




Пост N: 2929
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.13 14:55. Заголовок: Pasha пишет: Наколь..


Pasha пишет:

 цитата:
Наколько я помню, для dbCreate используется set default


Верно. Мой косяк

Pasha пишет:

 цитата:
Файл в памяти на клиенте ? Тогда надо его создавать с DBFCDX, а не с letodb:


И это тоже ;)

остался вопрос с Set Autopen off

Pasha пишет:

 цитата:
Для оптимизации бровса в letodb надо еще задать размер skip-буфера по к-ву строк в бровсе


Об этой функции ты говоришь LETO_SETSKIPBUFFER ?

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




Пост N: 2823
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 15:11. Заголовок: Dima пишет: Об этой..


Dima пишет:

 цитата:
Об этой функции ты говоришь LETO_SETSKIPBUFFER ?



да

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




Пост N: 2930
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.13 15:58. Заголовок: Блин еще косяк не по..


Блин еще косяк не понятный
В цикле работает ordlistadd()
C обычным DBFCDX после отработки цикла первым (управляющим) становится первый добавленный индекс
А с LETO последний.

Сколько таких не соответствий мне еще суждено поймать.......

Что касается бровса. Если он голый (просто поля) без наворотов то работает нормально (нет тормоза).
А вот если появляются вычисляемые поля да еще по другим базам то тормоз обеспечен. Локально без
LETO этого тормоза нет , впрочем как и под ADS (там слегка заметное замедление)

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




Пост N: 2824
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 20:25. Заголовок: Dima пишет: остался..


Dima пишет:

 цитата:
остался вопрос с Set Autopen off



рисую такой тест:

#define _leto

proc main
#ifdef _leto
local cPath := '//127.0.0.1:2812/'

REQUEST LETO
RDDSETDEFAULT( "LETO" )
#else
local cPath := ''
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
#endif

set autopen off

#ifdef _leto
leto_Connect(cPath)
hb_rddinfo(101, .f.,, 1)
#endif
USE (cPath+'test') new
? rddname(), IndexOrd(), ordCount()
set index to test
? rddname(), IndexOrd(), ordCount()
wait

retu

Что leto, что dbfcdx ведут себя одинаково. Если индекс существует и autopen выключен, то индекс не открывается, надо принудительно выдать команду set index
Если autopen включен, то индекс открывается автоматически.
Дима, может быть ты что-то другое имеешь в ввиду ?

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




Пост N: 2825
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 20:31. Заголовок: Dima пишет: Что кас..


Dima пишет:

 цитата:
Что касается бровса. Если он голый (просто поля) без наворотов то работает нормально (нет тормоза).
А вот если появляются вычисляемые поля да еще по другим базам то тормоз обеспечен. Локально без
LETO этого тормоза нет , впрочем как и под ADS (там слегка заметное замедление)



Если сравнить бровс с вычисляемыми полями по нескольким таблицам при работе в сети, то какой rdd быстрее: dbfcdx, ads или leto ?
И какого вида вычисляемые поля ? Это seek по другой таблице и выборка из нее данных, или что-то сложнее ?
Кстати, если это цикл с суммированием по другой таблице, то в leto для этого есть функция leto_sum, использование которой уберет тормоза, так как она выполняется одним запросом к серверу.

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




Пост N: 2931
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.13 20:35. Заголовок: Pasha пишет: Дима, ..


Pasha пишет:

 цитата:
Дима, может быть ты что-то другое имеешь в ввиду ?



НЕ LETO , ставлю set autopen off
Открываю базу magaz3.dbf , в этой же папке есть magaz3.cdx и он к этой базе ни какого отношения не имеет.
Тут он и не откроется.

А в случае с LETO даже если установка set autopen off этот индекс будет открываться и понятное дело
будет ошибка открытия базы так как индекс magaz3.cdx совсем из другой оперы.

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




Пост N: 2826
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.04.13 21:00. Заголовок: Dima пишет: НЕ LETO..


Dima пишет:

 цитата:
НЕ LETO , ставлю set autopen off
Открываю базу magaz3.dbf , в этой же папке есть magaz3.cdx и он к этой базе ни какого отношения не имеет.
Тут он и не откроется.

А в случае с LETO даже если установка set autopen off этот индекс будет открываться и понятное дело
будет ошибка открытия базы так как индекс magaz3.cdx совсем из другой оперы.



Понятно. На сервере set autopen всегда включен, и я думаю, это нельзя изменить.
Представь ситуацию. Один клиент открыл таблицу с индексом, и другой без индекса, и оба обновляют таблицу. Что в таком случае будет с индексом ? Одно соединение его обновит, а другое нет. Получится битый индекс.
Поэтому сервер всегда открывает индекс, даже если клиент это не просит.

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




Пост N: 2776
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.13 21:36. Заголовок: Pasha пишет: Поэтом..


Pasha пишет:

 цитата:
Поэтому сервер всегда открывает индекс, даже если клиент это не просит.


Если не трудно - напишите это в доке !
А то потом забудешь про это и опять на те-же самые грабли наступишь...

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


Пост N: 606
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 18.04.13 09:13. Заголовок: Павел, а можно виндо..


Павел, а можно виндовый letodb собрать не как службу ?
Я его сегодня обновил с CVS, собрал, пытаюсь запустить - а он говорит, что "LetoDB service has had some problems: 1063". Мне служба совершенно не нужна...

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



Пост N: 819
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 18.04.13 09:28. Заголовок: Александр, поправьте..


Александр, поправьте следующее
#-prgflag={win}-D__WIN_DAEMON__
-prgflag={win}-D__WIN_SERVICE__

замениете на

-prgflag={win}-D__WIN_DAEMON__
#-prgflag={win}-D__WIN_SERVICE__

Вот в reame
Для ОС Windows сервер letodb может быть
собран как служба Windows (должен быть инициализирован макрос __WIN_SERVICE__),
или как демон (процесс), для чего надо установить макрос __WIN_DAEMON__.

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


Пост N: 607
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 18.04.13 09:44. Заголовок: Спасибо. Не дочитал ..


Спасибо. Не дочитал до этого места readme :)

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




Пост N: 2828
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.13 12:44. Заголовок: Pasha пишет в теме h..


Pasha пишет в теме http://clipper.borda.ru/?1-6-0-00000001-000-10001-0:

 цитата:
Я autoinc не использую, и насчет стабильности точно не скажу.
Но мне кажется, что и без flock, т.е. по rlock, будет стабильнее, чем делать go bottom, выбирать последний ключ, и т.д, поскольку узких мест для autoinc меньше.



В связи с переходом на LetoDb - как лучше реализовывать "счетчик" ID у себя в задачах ?

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





Пост N: 45
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 24.05.13 09:30. Заголовок: В качестве пожелания..


В качестве пожелания.

Паша, Александр
что-то давненько не обновлялся архив на http://sourceforge.net/projects/letodb/.
Ведь этот адрес заявлен в начале темы как адрес проекта. Густов в Вики тоже дает эту ссылку. Все, кто туда придут, скачают проект почти полугодичной давности.

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




Пост N: 2882
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.05.13 09:42. Заголовок: Andrey пишет: В свя..


Andrey пишет:

 цитата:
В связи с переходом на LetoDb - как лучше реализовывать "счетчик" ID у себя в задачах ?



Только заметил этот вопрос. Можно использовать udf-функцию
UDF_AppendRec( nUserStru, cFieldName, xOrder, xMin )
из модуля letoudf.prg
она обеспечивает уникальность ключа с гарантией 100%
Вызов с клиента:
leto_ParseRec( leto_udf("UDF_AppendRec", <cFieldName>, <xOrder>[, <xMin>] ) )

Параметры:
cFieldName - имя поля ключа
xOrder - имя/номер индекса
xMin - необязательное минимальное значение


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




Пост N: 2883
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.05.13 09:45. Заголовок: Панченко пишет: что..


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

 цитата:
что-то давненько не обновлялся архив на http://sourceforge.net/projects/letodb/.



Выложу сборку.

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




Пост N: 2913
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.13 10:12. Заголовок: Только не пинайте си..


Только не пинайте сильно....
Дайте адрес для обновления LetoDB через SVN.
Заранее спасибо....

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




Пост N: 3317
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.07.13 10:15. Заголовок: Andrey пишет: Дайте..


Andrey пишет:

 цитата:
Дайте адрес для обновления LetoDB через SVN


А его нет так как не переезжал туда если не ошибаюсь

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



Пост N: 901
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 19.07.13 16:22. Заголовок: Dima пишет: А его н..


Dima пишет:

 цитата:
А его нет так как не переезжал туда если не ошибаюсь

правильно.

Andrey пишет:

 цитата:
Дайте адрес для обновления LetoDB


cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P -r rel-1-mt letodb

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





Пост N: 254
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 01.09.13 20:57. Заголовок: Подскажите плиз нови..


Подскажите плиз новичку:
1) с чего начать, откуда качать, что читать (кроме readme, скинутого в соседней теме)
2) возможна ли одновременная работа letodb сервера на одной базе параллельно со "старым" способом работы через DBFNTX rdd ? Т.е. есть желание попробовать оптимизировать сначала наиболее "медленные" выборки - чтобы обкатать методы работы. А потом потихоньку менять шаг за шагом, чтобы не раскорячить неожиданно основной процесс работы предприятия?


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




Пост N: 251
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.09.13 22:12. Заголовок: Sergy пишет: с чего ..


Sergy пишет:
 цитата:
с чего начать


1. со сборки LetoDb, настройка letodb.ini,запуска на localhost
2. с мало используемого справочника, Use перенацеливаешь на localhost, RDD LETO в use, если в текстах было Shared, то по идее все должно зашевелиться, иначе Rlock обработки добавляешь
3. если зашевелилось, можно переползти на сервер с localhost и потестить
4. попробовать совместную работу LetoDb со "старым" способом работы

Sergy пишет:
 цитата:
работа letodb сервера на одной базе параллельно со "старым" способом работы


letodb.ini
 
...
Default_Driver = NTX - RDD по умолчанию для открытия файлов на сервере ( CDX/NTX );
...
Share_Tables = 1 - если 0 (по умолчанию, этот режим существует с момента
старта проекта letodb), letodb открывает все таблицы
в монопольном режиме, что позволяет увеличить
производительность. Если 1 (новый режим, добавлен после 11.06.2009),
таблицы открываются в том режима, в каком их открывает
клиентское приложение, монопольном или режиме разделения, что
позволяет letodb работать совместно с другими приложениями.


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




Пост N: 252
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.09.13 22:21. Заголовок: Sergy посмотреть ser..


Sergy
посмотреть server.prg в Source и примеры в tests, utils - это святое

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



Пост N: 918
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 01.09.13 22:21. Заголовок: Sergy пишет: 1) с ч..


Sergy пишет:

 цитата:
1) с чего начать, откуда качать, что читать (кроме readme, скинутого в соседней теме)

Лучше начинать с этого форума. Брать через
cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P -r rel-1-mt letodb
По поводу почитать - поиск letodb по форуму.

Sergy пишет:

 цитата:
2) возможна ли одновременная работа letodb сервера на одной базе параллельно со "старым" способом работы через DBFNTX rdd ? Т.е. есть желание попробовать оптимизировать сначала наиболее "медленные" выборки - чтобы обкатать методы работы.


Смотреть опцию:
Share_Tables  = 0        -    если 0 (по умолчанию, этот режим существует с момента 
старта проекта letodb), letodb открывает все таблицы
в монопольном режиме, что позволяет увеличить
производительность. Если 1 (новый режим, добавлен после 11.06.2009),
таблицы открываются в том режима, в каком их открывает
клиентское приложение, монопольном или режиме разделения, что
позволяет letodb работать совместно с другими приложениями.

На практике можно поступить следующим образом (у меня так), взять базу, например справочник, и открывать его через letodb, т.е. use baza via rddleto, остальные базы как и открывали. Потом смотрите что получается, как работает прога и постепенно переносите оставшиеся базы на leto.

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





Пост N: 256
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 02.09.13 01:45. Заголовок: AlexMyr пишет: cvs ..


AlexMyr пишет:

 цитата:
cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P -r rel-1-mt letodb


Пошел изучать cvs...

AlexMyr пишет:

 цитата:
На практике можно поступить следующим образом (у меня так), взять базу, например справочник, и открывать его через letodb, т.е. use baza via rddleto, остальные базы как и открывали. Потом смотрите что получается, как работает прога и постепенно переносите оставшиеся базы на leto.


Именно это я и имел в виду. То что нужно.

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





Пост N: 257
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 02.09.13 15:16. Заголовок: Правильно ли я поним..


Правильно ли я понимаю, что вот отсюда: http://sourceforge.net/projects/letodb/files/bin/ я могу скачать рабочую сборку letodb cервера без плясок с бубном вокруг CVS ?

Является ли эта сборка от 28 ноября 2012 актуальной ?

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


Пост N: 921
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 02.09.13 15:21. Заголовок: Sergy пишет: Правил..


Sergy пишет:

 цитата:
Правильно ли я понимаю, что вот отсюда: http://sourceforge.net/projects/letodb/files/bin/ я могу скачать рабочую сборку letodb cервера без плясок с бубном вокруг CVS ?
Является ли эта сборка от 28 ноября 2012 актуальной ?



Актуальная версия: Changelog,v 1.350.2.123 2013/08/26 06:13:57 ptsarenko
А какие проблемы с cvs?

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





Пост N: 258
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 02.09.13 15:23. Заголовок: PSP пишет: А какие ..


PSP пишет:

 цитата:
А какие проблемы с cvs?


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


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




Пост N: 2970
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.09.13 15:38. Заголовок: Sergy пишет: Являет..


Sergy пишет:

 цитата:
Является ли эта сборка от 28 ноября 2012 актуальной ?



Для старта более чем сойдет, так как принципиальных изменений с тех пор не было. Но клиентскую библиотеку рекомендуется пересобрать, так как она была собрана с Harbour SVN на ноябрь прошлого года.
С пересборкой проблем быть не должно, равно как и с cvs. Надо скачать бесплатный TortoiseCVS, установить и ввести параметры для скачивания сырцов letodb.
Должен еще заметить, что, если программы работают в терминальном режиме, использование letodb бессмыссленно.
Также режим Share_Tables=1 рекомендую использовать только на этапе тестирования, так как при этом производительность сервера будет заметно ниже.

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





Пост N: 260
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 02.09.13 16:17. Заголовок: Pasha пишет: Для ст..


Pasha пишет:

 цитата:
Для старта более чем сойдет, так как принципиальных изменений с тех пор не было. Но клиентскую библиотеку рекомендуется пересобрать, так как она была собрана с Harbour SVN на ноябрь прошлого года.
С пересборкой проблем быть не должно, равно как и с cvs. Надо скачать бесплатный TortoiseCVS, установить и ввести параметры для скачивания сырцов letodb.


Спасибо.


 цитата:
Должен еще заметить, что, если программы работают в терминальном режиме, использование letodb бессмыссленно.
Также режим Share_Tables=1 рекомендую использовать только на этапе тестирования, так как при этом производительность сервера будет заметно ниже.


Это и ежу понятно, что использовать letodb на локальных таблицах смысла нет. Именно поэтому нужно различать режим работы базы с файлами и переключать в зависимости от... Как раз oб этом я решил поднять тему тут: http://clipper.borda.ru/?1-0-0-00000336-000-0-0-1378125566

Точно так-же понятно, что в работа letodb в shared будет существенно медленнее чем exclusive. Но перекинуть проект с сотнями функций в один присест я не готов. Начну с самых времязатратных участков в режиме тестирования. Сравню результаты - стоит ли овчинка выделки. А там посмотрим...

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





Пост N: 285
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.09.13 23:58. Заголовок: Pasha пишет: Надо с..


Pasha пишет:

 цитата:
Надо скачать бесплатный TortoiseCVS, установить и ввести параметры для скачивания сырцов letodb



Установил. Ввел строку cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb co -P -r rel-1-mt letodb

Спрашивает пароль:

Скрытый текст


Чего не хватает ?

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




Пост N: 3006
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.13 02:11. Заголовок: У меня тоже показыва..


У меня тоже показывает:


Нажимаешь Ок и обновляется (создает папку letodb - если не было) НОРМАЛЬНО !!!

Собирал библиотеку для xHarbour 1.2.3 (Build 20130705) выдал вот что:
Скрытый текст

Будет ли работать ?

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





Пост N: 288
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.09.13 10:20. Заголовок: Andrey пишет: Нажим..


Andrey пишет:

 цитата:
Нажимаешь Ок и обновляется (создает папку letodb - если не было) НОРМАЛЬНО !!!



У меня немного не так. Идет окно, в которое транслируется лог, который я привел в цитате. Сверху возникает окно с полем для ввода пароля. Оставляю пустым и нажимаю OK - все повторяется снова. В окне с логом есть кнопка OK (неактивна) и ПРЕРВАТЬ.

И само собой, ничего не обновляется (у меня обновлять-то пока нечего, хочу скачать для начала).

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




Пост N: 3563
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.09.13 11:23. Заголовок: Sergy Да все норм р..


Sergy
Да все норм работает.
Налил исходники вот сюда http://zalil.ru/34728143

PS
winrar 5.0

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



Пост N: 929
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 17.09.13 11:24. Заголовок: Sergy пишет: И само..


Sergy пишет:

 цитата:
И само собой, ничего не обновляется (у меня обновлять-то пока нечего, хочу скачать для начала).

Использую консольный cvs, первый раз с пустым паролем, потом уже без пароля.

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



Пост N: 931
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 17.09.13 11:54. Заголовок: Andrey пишет: ** er..


Andrey пишет:

 цитата:
** error 1 ** deleting obj\b32\server.c


Будет ли работать ?

а библа собралась то? При error не должна.

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




Пост N: 2996
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.09.13 12:00. Заголовок: Сервер letodb не соб..


Сервер letodb не собирается с xHarbour. Надо собирать с Harbour. См. раздел 2 readme

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





Пост N: 289
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.09.13 12:56. Заголовок: Dima пишет: Налил и..


Dima пишет:

 цитата:
Налил исходники вот сюда http://zalil.ru/34728143



Спасибо. Скачал.

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




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


AlexMyr пишет:

 цитата:
а библа собралась то? При error не должна.


Собралась !

Pasha пишет:

 цитата:
Сервер letodb не собирается с xHarbour. Надо собирать с Harbour.


А клиент на хХарборе будет работать с сервером letodb собранным на Харборе ?


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




Пост N: 3000
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.09.13 20:42. Заголовок: Добавил поддержку вы..


Добавил поддержку выполнения блока кода в опции EVAL команды INDEX во время выполнения индексации

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




Пост N: 3571
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.09.13 20:52. Заголовок: Pasha пишет: Добави..


Pasha пишет:

 цитата:
Добавил поддержку выполнения блока кода в опции EVAL команды INDEX во время выполнения индексации


Ну наконец то :)
Спасибо !

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




Пост N: 3001
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.09.13 21:01. Заголовок: Andrey пишет: клие..


Andrey пишет:

 цитата:
клиент на хХарборе будет работать с сервером letodb собранным на Харборе ?



Да

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




Пост N: 128
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 03.10.13 16:07. Заголовок: Проблема с __dbDelim под LetoDB


Вот такой код

RDDSETDEFAULT( "LETO" )
USE ( _Data + 'DECL70' ) NEW EXCLUSIVE
ZAP

RDDSETDEFAULT( "DBFCDX" )
APPEND FROM DECL70.TXT DELIMITED WITH TAB
RDDSETDEFAULT( "LETO" )

PPO последней части
__dbZap()
RDDSETDEFAULT( "DBFCDX" )
__dbDelim( .F., "DECL70.TXT", "TAB", { },,,,, .F., )
RDDSETDEFAULT( "LETO" )

на обычном Harbor-е черз DBFCDX все правильно переносится а под LetoDB какая то "КЕСЯ МЕСЯ"
:)

P.S. Без RDDSETDEFAULT( "DBFCDX" ) и RDDSETDEFAULT( "LETO" ) ТОЖЕ САМОЕ

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




Пост N: 129
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 05.11.13 16:51. Заголовок: Сборка LetoDB 64 bit


Пытаюсь собрать но, не получается

Пробую hbmk2-x64 из HB30 , так как там есть 64 битовые библиотеки
но компилятор и меня MINGW64 4.8.1

Паша помоги пожалуйста !
Заодно скажи есть смысл ето делать или остатся на 32 разрядную верию


вот bat файл:
setlocal
set path=C:\hb30\comp\MINGW64\bin;c:\hb30\bin
SET HB_COMPILER=mingw64
hbmk2-x64 rddleto.hbp letodb.hbp -rebuild -trace
endlocal




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




Пост N: 3036
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.11.13 17:57. Заголовок: А что за ошибки при ..


А что за ошибки при сборке ?
Я собирал без проблем letodb-64 с Harbour 3.0/3.2dev и mingw64 tdm 4.6
А смысл есть, если на сервере стоит 64-битная ОС.


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




Пост N: 131
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 06.11.13 13:02. Заголовок: Получилось !


Mingw64 у меня был какойто неправильный .
Заметил что hbmak2 ищет x86_64-w64-mingw32-ar.exe
а в папке bin есть ar.exe
Взял и копираовал ar.exe в x86_64-w64-mingw32-ar.exe
И все заработало :)

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


Пост N: 711
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.11.13 09:40. Заголовок: Я начал понемножку п..


Я начал понемножку просматривать код letodb, сравнивая его со своей рабочей версией ( от 20.08.2010 ).
Вот такой вопрос: почему теперь leto_disconnect() закрывает не текущее соединение, что было бы логично, а первое соединение из letoConnPool ?

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


Пост N: 712
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.11.13 09:58. Заголовок: А... теперь увидел. ..


А... теперь увидел. 1 - это номер параметра, передаваемого функции. А зачем так запутанно - то ?

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




Пост N: 3039
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.11.13 11:59. Заголовок: По умолчанию, без па..


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

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


Пост N: 714
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 15.11.13 12:25. Заголовок: Это я уже понял. Про..


Это я уже понял. Просто было бы лучше, понятнее, если бы в leto_getConnection() передавался не номер параметра, а сам параметр hb_param( n, HB_IT_ANY ). Мелочь, но ...

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


Пост N: 722
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 02.12.13 15:01. Заголовок: Продолжаю разбиратьс..


Продолжаю разбираться с leto1.c.
В функции letoSetFilter() раньше строка фильтра конвертировалась в codepage базы данных - в случае, если эта codepage отличалась от codepage клиентского приложения. Теперь эта конвертация где-то в другом месте делается ?

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


Пост N: 723
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 02.12.13 15:07. Заголовок: И еще, в letoOpen():..


И еще, в letoOpen():

if( pOpenInfo->abName[0] != '+' && pOpenInfo->abName[0] != '-' )

Это для чего ?

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




Пост N: 3057
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.12.13 19:17. Заголовок: alkresin пишет: В ф..


alkresin пишет:

 цитата:
В функции letoSetFilter() раньше строка фильтра конвертировалась в codepage базы данных - в случае, если эта codepage отличалась от codepage клиентского приложения. Теперь эта конвертация где-то в другом месте делается ?



Эта конвертация и раньше была не нужна, я ее пару лет назад убрал.
Пусть таблица открыта в cp866, а кодировка программы - cp1251
Клиент передает на сервер строку фильтра в cp1251.
Поскольку таблица на сервере открыта в cp866, при выполнении выражения фильтра: а именно - чтении полей таблицы методом GetValue данные будут конвертированы из cp866 в cp1251, которую установит функция leto_SetUserEnv, и сравнение строк будет выполняться cp1251 с cp1251


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




Пост N: 3058
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.12.13 19:20. Заголовок: alkresin пишет: И е..


alkresin пишет:

 цитата:
И еще, в letoOpen():

if( pOpenInfo->abName[0] != '+' && pOpenInfo->abName[0] != '-' )

Это для чего ?



Это для пакетного открытия нескольких таблиц одним запросом к серверу. Пример использования см. в tests\letoudf.prg, функция UDF_OpenTables

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


Пост N: 724
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 03.12.13 08:44. Заголовок: Эта конвертация и ра..



 цитата:
Эта конвертация и раньше была не нужна, я ее пару лет назад убрал.


Действительно.
Еще вопрос: для чего эта структура в LETOCONNECTION - pCdpTable, она , похоже, нигде не инициализируется, и функция leto_GetServerCdp() просто возвращает код, который получает в качестве параметра ?

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




Пост N: 3059
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.12.13 09:18. Заголовок: Она инициализируется..


Она инициализируется в функции LETO_ADDCDPTRANSLATE, используется для тех случаев, когда одна и та же кодовая страница на клиенте и на сервере называется по разному: к примеру, RU1251 и RUWIN.
Из-за многочисленных переименований кодовых страниц в разных версиях Harbour и xHarbour такое может произойти.

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




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


Александр, посмотрите пожалуйста manage.exe, собранный по windows: Harbout git + mingw tdm 4.6.1,
hwgui и manage.prg последние сырцы с SVN и CVS

http://files.mail.ru/327FCEB4B20541EC90551C0BC65D8F95

Ненормально работает combobox для адреса сервера: не показывает список Items
Только из-за этого я не выкладываю сборку letodb на sourceforge, сам не могу понять причину.

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


Пост N: 726
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 03.12.13 12:54. Заголовок: Pasha пишет: Ненорм..


Pasha пишет:

 цитата:
Ненормально работает combobox для адреса сервера: не показывает список Items


Исправил.

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


Пост N: 727
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.12.13 09:14. Заголовок: Павел, напомните мне..


Павел, напомните мне, пожалуйста, предназначение RDD методов drop, exists и rename.

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


Пост N: 728
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.12.13 13:14. Заголовок: Разобрался, вопрос с..


Разобрался, вопрос снят.

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


Пост N: 730
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 05.12.13 15:50. Заголовок: Я сделал кое-какие и..


Я сделал кое-какие изменения в клиентской части letodb, они касаются только работы с сервером старой версии - теперь клиент определяет, с чем он имеет дело и использует соответствующий протокол. Наверное, это надо только мне - теперь я могу спокойно, постепенно обновить часть своих серверов letodb ( до текущей версии ) и оценить все последствия.

Изменения в серверной части касаются только вызовов leto_writelog() - я изменил ее, теперь не надо предварительно формировать буфер для вывода, можно вывести текущие переменные одним вызовом функции.

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




Пост N: 3067
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.12.13 10:07. Заголовок: Все собрал, запустил..


Все собрал, запустил - вроде бы полет нормальный.
Увидел одно изменение на клиенте: в leto_ParseRec после

if( pArea->area.fEof )
{
leto_SetBlankRecord( pArea, FALSE );

раньше стоял возврат, сейчас его нет.
Но это и правильно, чтобы считался reccount

Еще я не понял, зачем в leto_gotoEof стоит вызов SELF_RECCOUNT ?

Еще один ньюанс: раньше в leto_writelog можно было передать длину строки, и выдавать в лог бинарные данные. Сейчас этого нет. Может быть, стоит вернуть ?

И наверное, стоит изменить версию.

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


Пост N: 732
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.12.13 11:45. Заголовок: Pasha пишет: if( pA..


Pasha пишет:

 цитата:
if( pArea->area.fEof )
{
leto_SetBlankRecord( pArea, FALSE );

раньше стоял возврат, сейчас его нет.
Но это и правильно, чтобы считался reccount


Мне показалось, что так будет безопаснее.

 цитата:
Еще я не понял, зачем в leto_gotoEof стоит вызов SELF_RECCOUNT ?


Старая версия сервера ( а этот вызов именно для нее ) не передает в каждом пакете записей ulRecCount, клиент его получает только в результате вызова SELF_RECCOUNT, а в leto_gotoEof он требуется.

 цитата:
Еще один ньюанс: раньше в leto_writelog можно было передать длину строки, и выдавать в лог бинарные данные. Сейчас этого нет. Может быть, стоит вернуть ?


Да, стоит - вторым параметром, наверное. Сделаю.

 цитата:
И наверное, стоит изменить версию.


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

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


Пост N: 733
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.12.13 14:23. Заголовок: Думаю, можно убрать ..


Думаю, можно убрать уже все эти HARBOUR_VER_AFTER_101, HARBOUR_VER_BEFORE_100 - Harbour ниже 2.0 вряд ли кто использует.

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




Пост N: 3068
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.12.13 14:34. Заголовок: Согласен. А в исходн..


Согласен. А в исходниках сервера можно убрать ветки для xHarbour.
Только ветки с __OLDRDD__ я еще использую (для xHarbour)

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


Пост N: 735
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.12.13 14:20. Заголовок: Что-то до меня никак..


Что-то до меня никак не доходит смысл конструкции в leto_ConnectionClose():

pConnection->bCloseAll = 0;
hb_rddIterateWorkAreas( leto_CheckAreas, (void *) pConnection );
if( pConnection->bCloseAll )
leto_CloseAll( pConnection );

leto_CheckAreas() проверяет, принадлежит ли area этому соединению и является ли она leto area. Если хоть одна такая area находится, то тогда выполняется leto_closeall() - а там опять такая же проверка ( в leto_doclose() ). Почему нельзя сразу вызвать leto_closeall() ?
И непонятно, зачем в leto_closeall() перед и после вызова hb_rddIterateWorkAreas() устанавливается pConnection->bCloseAll ?

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




Пост N: 3071
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.12.13 14:36. Заголовок: leto_ConnectionClose..


leto_ConnectionClose() вызывается по leto_disconnect(), или при завершении программы.
Должно быть закрыто только указанное соединение, или текущее.
При вызове leto_disconnect() могут быть открыты рабочие области на нескольких серверах letodb, и локальные р.о.
По hb_rddIterateWorkAreas проверяется, открыта ли хотя бы одна р.о. на этом сервере. Если открыта - тогда надо выдать команду этому серверу, и только этому: close_all. Если нет открытых р.о. - то такую команду именно этому серверу выдавать незачем. Все остальные р.о. - с других серверов letodb и локальные - должны остаться открытыми.

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


Пост N: 736
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.12.13 14:57. Заголовок: Pasha пишет: Если о..


Pasha пишет:

 цитата:
Если открыта - тогда надо выдать команду этому серверу, и только этому: close_all


Но ведь такая же проверка осуществляется еще раз в leto_doClose().
Т.е. можно в leto_doClose() добавить строчку:

if( leto_CheckAreaConn( pArea, ( LETOCONNECTION * ) p ) )
{
SELF_CLOSE( pArea );
pConnection->bCloseAll = 1;
}

и в leto_CloseAll() выдавать команду close_all, если установлен pConnection->bCloseAll:

if( pConnection->bCloseAll )

Тогда мы избавляемся от того лишнего кода в leto_ConnectionClose() и от функции leto_CheckAreas(), которая только оттуда вызывается.
Или я что-то упустил ?

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




Пост N: 3072
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.12.13 15:11. Заголовок: leto_closeAll безусл..


leto_closeAll безусловно выдает команду серверу "close_all". А если уже все р/о с этого сервера закрыты, то эта команда не нужна. Вот и делается дополнительная проверка перед вызовом leto_closeAll(), нужен ли вообще этот вызов.

Хотя конечно, можно объединить все в hb_rddIterateWorkAreas. Но тогда в pConnection надо добавить еще один флаг, дополнительно к bCloseAll

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


Пост N: 738
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.12.13 15:40. Заголовок: Зачем еще один флаг ..


Зачем еще один флаг ?

static ERRCODE leto_doClose( AREAP pArea, void * p )
{
if( leto_CheckAreaConn( pArea, ( LETOCONNECTION * ) p ) )
{
SELF_CLOSE( pArea );
pConnection->bCloseAll = 1;
}
return SUCCESS;
}

BOOL leto_CloseAll( LETOCONNECTION * pConnection )
{
char szData[16];

hb_rddIterateWorkAreas( leto_doClose, (void *) pConnection );
if( pConnection->bCloseAll )
{
if( leto_CheckServerVer( pConnection, 100 ) )
sprintf( szData,"close_all;\r\n" );
else
sprintf( szData,"close;00;\r\n" );

pConnection->bCloseAll = 0;
if( leto_DataSendRecv( pConnection, szData, 0 ) )
return TRUE;
else
return FALSE;
}
else
return TRUE;
}

void leto_ConnectionClose( LETOCONNECTION * pConnection )
{

if( pConnection->pAddr )
{
leto_CloseAll( pConnection );
...
}
}

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




Пост N: 3074
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.12.13 15:54. Заголовок: Так в SELF_CLOSE( pA..


Так в SELF_CLOSE( pArea ) используется флаг bCloseAll, чтобы не выдавать серверу команды close. А тут он используется еще и для того, чтобы отметить, есть ли открытые р/о с этого сервера. Вот поэтому и нужны 2 флага: один для SELF_CLOSE, а второй - чтобы затем определить, выдавать или нет команду close_all.

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


Пост N: 739
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.12.13 16:09. Заголовок: Так в SELF_CLOSE( pA..



 цитата:
Так в SELF_CLOSE( pArea ) используется флаг bCloseAll, чтобы не выдавать серверу команды close.


Ну так поменяем местами строчки в предлагаемом варианте leto_doClose() и этот флаг выполнит обе функции:
static ERRCODE leto_doClose( AREAP pArea, void * p )
{
if( leto_CheckAreaConn( pArea, ( LETOCONNECTION * ) p ) )
{
pConnection->bCloseAll = 1;
SELF_CLOSE( pArea );
}
return SUCCESS;
}

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




Пост N: 3075
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.12.13 16:15. Заголовок: Да, так сработает...


Да, так сработает.

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




Пост N: 3076
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.12.13 16:18. Заголовок: Хотя нет. Вызов то б..


Хотя нет. Вызов то будет для всех р.о, в том числе с других серверов. Тогда будут закрыты р.о., которые закрывать не надо.

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


Пост N: 740
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.12.13 17:41. Заголовок: Хотя нет. Вызов то б..



 цитата:
Хотя нет. Вызов то будет для всех р.о, в том числе с других серверов


Какой вызов ? Сигнал close_all ? Так он посылается по одному определенному соединению, на один сервер.

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




Пост N: 3077
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.12.13 19:46. Заголовок: Это я уже туплю. Все..


Это я уже туплю. Все там в порядке.

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


Пост N: 742
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.12.13 08:53. Заголовок: Ok. Я сейчас в этом ..


Ok. Я сейчас в этом копаюсь, потому что хочу разбить клиентский модуль на две части, выделить client engine, который не будет содержать вызовов Harbour функций и может использоваться в приложениях на других языках. К тому же это позволит упростить и лучше структуировать код.

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




Пост N: 3079
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.12.13 09:19. Заголовок: Хорошее дело, и нужн..


Хорошее дело, и нужное, только сложное.
А какие есть планы по клиентской библиотеке ? Просто сделать dll по типу ace32 ?

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


Пост N: 743
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.12.13 10:34. Заголовок: Хорошее дело, и нужн..



 цитата:
Хорошее дело, и нужное, только сложное.


Буду делать постепенно - сначала connect/disconnect, management функции, запись/чтение переменных - уже в таком наборе это можно использовать. Потом одну за другой функции для работы с БД.

 цитата:
А какие есть планы по клиентской библиотеке ? Просто сделать dll по типу ace32 ?


Есть 3 C файла - letoclient.c, common_c.c, blowfish.c, их можно непосредственно включить в проект, или построить из них dll или lib. А какие еще варианты ?

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


Пост N: 745
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.12.13 17:37. Заголовок: Объясните мне, пожал..


Объясните мне, пожалуйста, еще такую вещь:

leto_GetServerCdp() вызывается только из leto_ConnectionNew(), т.е. когда pConnection только создан и pConnection->pCdpTable пуста - и leto_GetServerCdp() ничего там найти не может ...

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




Пост N: 3082
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.12.13 16:06. Заголовок: Я уже с трудом вспом..


Я уже с трудом вспоминаю тот алгоритм.
Кажется, предусматривалось вот что:

Сначала надо установить текущее соединение через вызов RDDI_CONNECTION.
Затем задать таблицу соответствия кодовых страниц вызовами LETO_ADDCDPTRANSLATE
И только после этого коннектиться к серверу.

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


Пост N: 746
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 12.12.13 18:08. Заголовок: RDDI_CONNECTION зако..


RDDI_CONNECTION закомментарен. Но, в любом случае, это не может работать, поскольку leto_GetServerCdp() вызывается только из leto_ConnectionNew(), т.е. до того как LETO_ADDCDPTRANSLATE могла бы отработать.

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




Пост N: 3094
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.12.13 10:57. Заголовок: В функции leto_write..


В функции leto_writelog может быть стоит оставить одну ветку, с вызовами hb_fs* ?
Эта ветка выполняет все необходимые функции.
Зачем тянуть лишнюю ссылку на hb_fopen ?

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




Пост N: 3095
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.12.13 11:01. Заголовок: alkresin пишет: RDD..


alkresin пишет:

 цитата:
RDDI_CONNECTION закомментарен. Но, в любом случае, это не может работать, поскольку leto_GetServerCdp() вызывается только из leto_ConnectionNew(), т.е. до того как LETO_ADDCDPTRANSLATE могла бы отработать.



Да нет там комментария:
case RDDI_CONNECTION:
...

А структура letoConnPool выделяется в letoInit, т.е до вызова leto_ConnectionNew().
По RDDI_CONNECTION можно установить текущее соединение, тоже до первого коннекта.
И LETO_ADDCDPTRANSLATE сможет отработать.

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


Пост N: 752
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 19.12.13 10:42. Заголовок: Павел, а зачем leto_..


Павел, а зачем leto_writelog() урезали ?

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




Пост N: 3097
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.12.13 13:54. Заголовок: Там было 2 ветки: од..


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

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


Пост N: 753
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 19.12.13 15:53. Заголовок: Вторая ветка нужна д..


Вторая ветка нужна для того, чтобы реализовать синтаксис, как в printf, например:

leto_writelog( NULL, 0, "Name: %s Number: %d\r\n", szFile, iNum );

Это часто бывает очень удобно - вся нужная информация одной строчкой кода.

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




Пост N: 3098
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.12.13 09:00. Заголовок: Верну..


Верну

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




Пост N: 3101
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.12.13 17:22. Заголовок: А как сделать dll из..


А как сделать dll из letocl.c ? Прицепить к проекту src\vm\maindllh.c, и добавить префикс для экспортируемых функций ?

А надо предусмотреть и создание so-библиотеки для *nix

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




Пост N: 3105
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.13 15:44. Заголовок: Я в своих программах..


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

hbiph.c


#include "hbapi.h"

int hb_iperrorcode( void );

HB_FUNC( HB_IPERRORCODE )
{
hb_retni( hb_iperrorcode( ) );
}

HB_FUNC( HB_IPERRORDESC )
{
hb_retc( strerror( hb_iperrorcode( ) ) );
}

Тогда переменная errorDesc из hbip.c получается не нужна, ее можно будет убрать.

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




Пост N: 3106
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.13 16:14. Заголовок: Для LetoMemoRead нуж..


Для LetoMemoRead нужен еще параметр - размер файла (для возможности передачи файлов, содержащих нулевой байт):

char * LetoMemoRead( LETOCONNECTION * pConnection, char * szFile, unsigned long * ulLen )

И у меня что-то сваливается leto_MemoRead, размер файла десятки килобайт.
Пока ищу причину.

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


Пост N: 754
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.12.13 19:32. Заголовок: Pasha пишет: А как ..


Pasha пишет:

 цитата:
А как сделать dll из letocl.c ? Прицепить к проекту src\vm\maindllh.c, и добавить префикс для экспортируемых функций ?


Еще не думал на эту тему. Наверное, просто поставить соответствующую опцию линкера. Maindllh.c тут, скорее всего, не нужен.

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


Да, стоит.

 цитата:
Для LetoMemoRead нужен еще параметр - размер файла (для возможности передачи файлов, содержащих нулевой байт):


Добавлю.

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




Пост N: 3107
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.12.13 17:41. Заголовок: Кажется, я понял при..


Кажется, я понял причину падения leto_MemoRead. Падение происходит на файлах размером больше 16К
В leto_Recv() в этом случае вызывается realloc для перевыделения памяти s_szBuffer. А ниже стоит вызов

iRet = hb_ipRecv( hSocket, ptr, lMsgLen );

У меня в рабочей программе падение есть, а в тестах - нет. После вызова realloc адрес в s_szBuffer может измениться, а может остаться прежним. Если он изменился, то ptr указывает на уже освобожденный участок памяти, и в результате происходит крэш.


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


Пост N: 755
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 25.12.13 08:52. Заголовок: Да, вполне вероятно,..


Да, вполне вероятно, с realloc бывают такие неприятности.
Я вставил там ptr = s_szBuffer; после realloc - теперь, может, заработает.

Заодно и часть функций по работе с dbf через C client сделал - пока, правда, ходить по таблице еще нельзя.

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




Пост N: 3108
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.12.13 09:23. Заголовок: Да, теперь работает..


Да, теперь работает

Думается, со временем из LETOAREA в LETOTABLE перекочует все, кроме area, pTable и lpdbPendingRel

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


Пост N: 756
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 25.12.13 09:47. Заголовок: Да, наверное, по мер..


Да, наверное, по мере необходимости.

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




Пост N: 3109
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.13 09:56. Заголовок: Есть предложение пер..


Есть предложение переименовать несколько функций:

LetoIsFileExist --> LetoFileExist
LetoMakeDir --> LetoDirMake

для выполнения соответствия LetoFile* / LetoDir*

и

LetoDbOpen --> LetoDbOpenTable
LetoDbClose --> LetoDbCloseTable

так как еще будут функции Open/Close Index

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


Пост N: 759
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.12.13 10:25. Заголовок: Согласен...


Согласен.

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


Пост N: 760
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.12.13 12:11. Заголовок: Павел, не могли бы в..


Павел, не могли бы вы пояснить мне строчки 1230-1239 из leto1.c, letoSeek():

if( pArea->area.dbfi.itmCobExpr != NULL && !pArea->area.dbfi.fOptimized )
{
if( SELF_SKIPFILTER( ( AREAP ) pArea, ( bFindLast ? -1 : 1 ) ) == SUCCESS )
{
PHB_ITEM pItem = leto_KeyEval( pArea, pTagInfo );

if( itmCompare( pItem, pKey, FALSE ) != 0 && ! bSoftSeek )
SELF_GOTO( ( AREAP ) pArea, 0 );
}
}


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




Пост N: 3110
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.13 12:45. Заголовок: Если фильтр не оптим..


Если фильтр не оптимизирован, то надо сделать seek на сервере, и затем отработать фильтр на клиенте с проверкой ключа.

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


Пост N: 761
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 27.12.13 17:22. Заголовок: А что это за поля в ..


А что это за поля в LETOTAGINFO - uiFCount и puiFields ? Они инициализируются, но нигде не используются.

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




Пост N: 3111
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.12.13 18:38. Заголовок: Я планирую в дальней..


Я планирую в дальнейшем их использовать, поэтому и добавил. Сейчас при обновлении записи сбрасывается skip-буфер. Но, если обновляются неиндексные поля, его можно не сбрасывать, а использовать и далее, только пометить данную запись как измененную. Порядок записей в текущем ордере ведь не изменился.
Это позволило бы существенно оптимизировать циклы вроде dbEval, while ! eof(), в которых выполняется обновление данных.

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


Пост N: 762
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.01.14 09:25. Заголовок: Ну что ж, выделение ..


Ну что ж, выделение С клиента для letodb в значительной мере сделано - можно ходить по базе ( go, skip, filter, seek ), добавлять и менять записи. Еще надо кое-что доделать и почистить, но основная часть готова.

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




Пост N: 3195
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.01.14 13:49. Заголовок: alkresin пишет: но ..


alkresin пишет:

 цитата:
но основная часть готова



Не смотря на праздники - работа идет !

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


Пост N: 763
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.01.14 17:59. Заголовок: Andrey пишет: Не см..


Andrey пишет:

 цитата:
Не смотря на праздники - работа идет !


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

С созданием dll вопрос решился просто - hbmk, все-таки, иногда бывает полезен.

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


Пост N: 764
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.01.14 10:46. Заголовок: По поводу добавления..


По поводу добавления bAutOpen:

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

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




Пост N: 3112
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.01.14 14:34. Заголовок: Переделаю..


Переделаю

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


Пост N: 767
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.01.14 10:20. Заголовок: Добавил англоязычный..


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

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




Пост N: 3116
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.01.14 13:39. Заголовок: Можно было бы дать с..


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

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


Пост N: 768
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.01.14 15:31. Заголовок: Дал. Хочу еще написа..


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

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




Пост N: 3214
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.01.14 13:48. Заголовок: alkresin пишет: Хоч..


alkresin пишет:

 цитата:
Хочу еще написать php client


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

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



Пост N: 22
Зарегистрирован: 22.03.06
ссылка на сообщение  Отправлено: 28.01.14 10:00. Заголовок: Александр, Паша в п..


Александр, Паша

в процессе тестирования LetoDb (v 1.350.2.172 2014/01/15 10:57:57)
сервер - linux, клиент - win7, обнаружил несколько ошибок.
Первые две ошибки, при попытке открыть не существующий в данный момент
dbf-файл, вызывают падение программы с "Exception error".
В зависимости от наличия алиаса в вызове функции DbUseArea
происходят разные ошибки.
Контрольный пример прилагается.
Надо раскоментировать строку с нужной ошибкой

/* test_error.prg
letoDbSrc - $Id: Changelog,v 1.350.2.172 2014/01/15 10:57:57 alkresin Exp $

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r1401142236)
Compiler: MinGW GNU C 4.8 (32-bit)
Platform: Windows 7 6.1.7600
PCode version: 0.3
ChangeLog last entry: 2014-01-14 23:36 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
ChangeLog ID: 89da1a2b87be5b1553225eba6b378c318c4a09ce
Built on: Jan 17 2014 14:28:19
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------

letoDb server - linux
client - win7
*/

REQUEST HB_CODEPAGE_RU866
REQUEST HB_LANG_RU866

REQUEST LETO

function Main( ... )
Hb_CDPSelect( "RU866" )
Hb_LangSelect( "RU866" )
HB_GtInfo( /*HB_GTI_CODEPAGE*/ 25, 255 ) // #define OEM_CHARSET 255 - from wingdi.h

RDDSETDEFAULT( "LETO" )

setcolor('14/1')
cls
? 'begin test LetoDb'

? leto_Connect( "//192.168.1.1:2812/" ) //existing path on LetoDb server

//error № 1
DbUseArea(.t.,,'dummy','DUMMY') //function commonError leto1c.c
//line 181 - hb_errPutFileName( pError, szFileName );
//szFileName - не инициализированный указатель
//вызывается из letoOpen line 2272 указатель ptr - не используется
//до самого вызова commonError если указан алиас в DbUseArea

//error № 2
//DbUseArea(.t.,,'dummy') //function letoClose leto1c.c
//line 1816 - if( pTable->pTagInfo )
//pTable==null в это время, в строке 1809 есть проверка указателя
//line 1809 - if( pTable && pTable->uiUpdated )
? Alias()

inkey(0)
DbCloseAll()

quit
return NIL //end Main()

ps
Большое спасибо за вашу работу.


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


Пост N: 774
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.01.14 17:25. Заголовок: kia пишет: в процес..


kia пишет:

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


Спасибо за информацию. Поправлю.

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


Пост N: 775
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.01.14 17:28. Заголовок: Andrey пишет: И что..


Andrey пишет:

 цитата:
И что будет в результате: доступ через Харбор и доступ к базе на сайте через php client ?


Да.
Собственно, кое-что уже работает, пример - на CVS.

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



Пост N: 23
Зарегистрирован: 22.03.06
ссылка на сообщение  Отправлено: 29.01.14 09:38. Заголовок: alkresin пишет: Спа..


alkresin пишет:

 цитата:
Спасибо за информацию. Поправлю.



Вот еще одно странное поведение сервера, похоже связанное с наследованием глобальных установок в тредах.
В настойках letodb.ini
LOWER_PATH = 1
но эта настройка не работает как надо.

тестовый пример (исходные данные как в предыдущем посте)
function Main( ... )
...

? leto_Connect( "//192.168.1.1:2812/" ) //existing path on LetoDb server
DbCreate('tmptest',{{'test','C',10,0}})
DbUseArea(.t.,,'tmptest')
? Alias()
DbCloseArea()

inkey(0)
DbUseArea(.t.,,'tmpTest') //здесь возникает ошибка! Error DBFCDX/1001 Open error: tmpTest.dbf
//код дос ошибки - 2 (File not found)
? Alias()
DbCloseArea()
inkey(0)
return NIL //end Main()

Если в файл server.prg после кода
line 909 IF ::lLower
SET( _SET_FILECASE, 1 )
SET( _SET_DIRCASE, 1 )
ENDIF
добавить wrlog(str(set(_SET_FILECASE)))
то в логе увидим результат 1, т.е. в этом месте установка сработала
но та же стока wrlog(str(set(_SET_FILECASE)))
в функции hs_opentable line 368
покажет что _SET_FILECASE установлен в 0 (уже правда в логе letodb_0.log а не в letodb.log)
если в функции hs_opentable добавить не только получение но и установку _SET_FILECASE
wrlog(str(set(_SET_FILECASE,1)))
то эта фича "LOWER_PATH" начинает работать правильно.

Спасибо за вашу работу.



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


Пост N: 776
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.02.14 12:47. Заголовок: kia пишет: Вот еще ..


kia пишет:

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


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

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


Пост N: 777
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.02.14 13:10. Заголовок: Павел, мне непонятно..


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

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



Пост N: 25
Зарегистрирован: 22.03.06
ссылка на сообщение  Отправлено: 04.02.14 17:31. Заголовок: alkresin пишет: Кст..


alkresin пишет:

 цитата:
Кстати, ошибки с открытием несуществующей таблицы сегодня исправил.


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

Нашел еще описку в функции leto_BagCheck файл common_c.c

...
line 171
p1 = ptr = szTable;
p2 = p4 = NULL;
while( ( c = *ptr) != 0 )
{
if( c == '/' || c == '\\' )
p2 = ptr; <---должно быть p1 = ptr+1; //ptr+1 т.к. ptr указывает на "\" а не на начало имени
else if( c == '.' )
p2 = ptr;
ptr ++;
}
if( !p2 || p2 < p1 )
p2 = ptr;

p3 = ptr = szBagName;
while( ( c = *ptr) != 0 )
{
if( c == '/' || c == '\\' )
p4 = ptr; <---должно быть p3 = ptr+1; //ptr+1 т.к. ptr указывает на "\" а не на начало имени
else if( c == '.' )
p4 = ptr;
ptr ++;
}
...

Ошибка проявлялась на структурных индексах (закрывались там где не должны были),
если в имени dbf был указан путь а в имени индекса нет или наоборот.
На сервере не устанавливался pIStru->bCompound
а на клиенте неправильно отрабатывала функция letoOrderListClear



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




Пост N: 3240
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.02.14 12:46. Заголовок: Можно ли на стороне ..


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

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




Пост N: 3118
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.02.14 08:56. Заголовок: Можно, с помощью udf..


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

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




Пост N: 3120
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.02.14 19:21. Заголовок: Пользователи letodb ..


Пользователи letodb жалуются, что неправильно работает LETO_ISFLTOPTIM для фильтра типа:

.T. .AND. At (I2Bin(n_field), "ABCD") <> 0

выяснилось, что причина этого - неправильная работа движка харбора, а именно:

вызов hb_macroGetType для выражения At (I2Bin(n_field), "ABCD") <> 0 дает результат не "L", как должно быть, а "UI"

точно так же работает движок клиппера, пример:

request L2Bin
Type('At (I2Bin(n_field), "ABCD") <> 0') // UI

Вывод из всего этого такой: для определения типа макровыражения недостаточно вызвать hb_macroGetType. Если этот вызов дает "UI", то для определения типа выражения придется его выполнить, и определить тип результата.


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




Пост N: 3843
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.02.14 22:03. Заголовок: Pasha пишет: hb_mac..


Pasha пишет:

 цитата:
hb_macroGetType


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

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




Пост N: 3121
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.02.14 22:29. Заголовок: Dima пишет: Эта фун..


Dima пишет:

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



Это сишная функция, для харбор-кода надо использовать Type(...)

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




Пост N: 3122
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.02.14 20:31. Заголовок: Просьба собрать и за..


Просьба собрать и запустить такой тест:

proc main
Local cPath := "//127.0.0.1:2812/"

REQUEST LETO
RDDSETDEFAULT( "LETO" )

cls
leto_connect(cPath)
if ! leto_File(cPath + "test.dbf")
dbCreate(cPath + "test.dbf", {{"C1", "C", 10, 0}, {"N1", "N", 10, 0}})
? "test.dbf created"
endif
use (cPath + "test") exclusive new
if ! NetErr()
? "Success"
append blank
Field->C1 := "test"
dbCommit()
wait
close
else
? "Open failed"
? "Quit succesfully, without crash"
endif
leto_disconnect(cPath)

return

Запустите один экземпляр программы. Будет выдано сообщение:

Success
Press any key to continue...

Не закрывая программу, запустите ее второй экземпляр.
Должно быть выдано сообщение:

Open failed
Quit succesfully, without crash

Если второй экземпляр программы так отработает, значит - все в порядке. У меня так и происходит
Если упадет с gpf - значит, есть какая-то проблема. Пользователи на нее жалуются, а я даже не могу воспроизвести ситуацию.

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




Пост N: 142
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 26.02.14 21:51. Заголовок: У меня отработало правильно


У меня отработало правильно как у тебя Паша

но у меня LetoDB версии /* $Id: Changelog,v 1.350.2.133 2013/11/22 10:09:31 ptsarenko Exp $ */


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




Пост N: 3123
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.02.14 22:27. Заголовок: Жалуются на проблему..


Жалуются на проблему в LetoDB c CVS. У меня и с последней версией тест отрабатывает нормально. В чем проблема, и почему ее не удается воспроизвести - пока непонятно.

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




Пост N: 143
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 26.02.14 23:17. Заголовок: Хорошо попробую CVS версию


Хорошо попробую CVS версию
У меня дома есть два компа попробую и через сеть

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




Пост N: 144
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 26.02.14 23:36. Заголовок: Сработало опять


Слил последнее из CVS .
Скомпилировал тест указывая на адрес моего рутера , затащил тест на одном сервере к которому имею remote доступ
и зпустил тест от туда .
Все сработало


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




Пост N: 3124
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.02.14 09:27. Заголовок: Похоже, надо внести ..


Похоже, надо внести изменение в протокол для выполнение команд блокировки.
Тест ниже демонстрирует, что dbfcdx при выполнении rlock/flock/dbrlock
перечитывает запись. Необходимо запустить 2 экземпляра программы.
Такое же поведение показывает и Ads
Думается, что в letodb вместе с результатом команд блокировки надо передавать и текущую запись.

proc main
Field f1

request dbfcdx
rddSetDefault( "DBFCDX" )

cls
if ! File("test.dbf")
dbCreate("test", {{"C1", "C", 10, 0}, {"F1", "N", 10, 0}})
endif
use test new shared
if RecCount() == 0
dbAppend()
endif
? F1
while inkey(0) # 27
? 'Before lock', F1
if rlock() // dbRlock(RecNo()), or flock()
? 'After lock', F1
F1 ++
dbUnlock()
dbCommit()
? 'After commit', F1
endif
enddo
use
retu


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



Пост N: 27
Зарегистрирован: 22.03.06
ссылка на сообщение  Отправлено: 27.02.14 09:40. Заголовок: Pasha пишет: Просьб..


Pasha пишет:

 цитата:
Просьба собрать и запустить такой тест:


У меня не gpf а штатная ошибка dos error 32.
Запускаю сервер и тест на одном компе - win7.
Сервер - с cvs последний, клиент - предпоследний.
И сервер и клиент с доработками, поэтому может быть и нет gpf.

Ошибка возникает из-за повторного вызова
dbCreate(cPath + "test.dbf", {{"C1", "C", 10, 0}, {"N1", "N", 10, 0}})
т.к. leto_File(cPath + "test.dbf") == .f. (не находит ранее созданный файл)


Ошибка возникает в двух случаях (из-за настроек в letodb.ini) :
- если EnableFileFunc = 0 (что логично);
- если не задан DataPath, или задан типа DataPath = /

Причина думаю где-то в функции
(letodb\source\server\letofunc.c line 3275 ) void leto_filef( PUSERSTRU pUStru, const char* szData )

Проверил из под дебагера

В строке 3304 hb_snprintf( szData1, 16, "+%s;", ( hb_spFile( szFile, NULL ) )? "T" : "F" );
при вызове hb_spFile
если не задан DataPath или DataPath = / и возникает ошибка
szFile == "test.dbf\000..."

а если задан то (например DataPath =\_leto.tst)
szFile == "\_leto.tst\test.dbf\000..."
и функция hb_spFile возвращает T - все ок.

Похоже, при не заданном пути, файл ищется где-то в текущем каталоге а не там где файл.

Надеюсь мой тест поможет разобраться.

Спасибо за работу!





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




Пост N: 145
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 21.03.14 12:00. Заголовок: ФУНКЦИЯ leto_groupby ДЛЯ DBFCDX


Паша
Мне очень нравится функция leto_groupby , хотелось бы ее использовать и под DBFCDX но не смог "Выковырять" из изходниках LetoDB
Очень быстро работает :)


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




Пост N: 3131
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.03.14 13:29. Заголовок: Я, кстати, так и дел..


Я, кстати, так и делаю. У меня есть локальный вариант для GroupBy, и я для dbfcdx его и использую.
Как раз в самой функции выполняется эта проверка. Функция оптимизирована, часть кода написана на С, так что работает быстро.
Мне пришлось убрать/заменить некоторые свои функции, чтобы собрать эту функцию. Именно этот вариант я не проверял, но надеюсь, что он рабочий:

http://gfile.ru/a4Je0

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




Пост N: 146
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 21.03.14 14:39. Заголовок: Спасибо Попробую


Спасибо Попробую !

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




Пост N: 147
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 24.03.14 01:49. Заголовок: Leto_GroupBy


Паша а как можно сделать Группу составную
например:
aDvig := LETO_GROUPBY('sme+ska', 'debit,kredit')
срабарывает (массив загружается) но потом при следующем обращении к серверу
или зависает программа или сервер падает
в логе letodb_1.log вот ето:

24.03.2014 00:32:15: Error BASE/1004 No exported method: EVAL
Arguments: ( [ 1] = Type: U)


a в letodb_crash.log :
в конце
------------------------------------------------------------------------
User: 127.0.0.1 SAVOVS ccw.Exe
Command: open


следующая команда у меня открывает другой файл на сервере


а так:
aDvig := LETO_GROUPBY('sme', 'debit,kredit')
работает но мне нужна составная группа

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




Пост N: 148
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 26.03.14 10:42. Заголовок: dbGroupBy


Паша вот такой тест отработал как надо

procedure main()

REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
Set AUTOPEN ON

use dvig new
set order to "sme+ska"

aGroup:=dbGroupBy(, , {||sme+ska}, "debit,kredit")
?Len(aGroup)
DBCloseArea()
return

а без блока возвращает пустой массив

я в _groupby.prg сделал такую замену
//xKey := if((nPos := FieldPos(cGroup)) # 0, nPos, cGroup)
xKey := if((nPos := FieldPos(cGroup)) # 0, nPos, GetBlock(cGroup))


так работает и когда группа единичная 'sme' когда составна я тоже 'sme+ska'

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




Пост N: 3135
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.03.14 11:41. Заголовок: Если в качестве филь..


Если в качестве фильтра передавать блок кода, то отрабатывает локальный вариант, а не leto_GroupBy
А при повторном вызове leto_GroupBy действительно не срабатывает. Разбираюсь, причина пока непонятна.

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




Пост N: 3137
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.03.14 15:35. Заголовок: Разобрался, вечером ..


Разобрался, вечером выложу исправление

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




Пост N: 149
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 27.03.14 10:44. Заголовок: PERFECT !


Работает Супер Быстро!
Задачка была обработать 2,5 млн записей для отчета , старый алгоритм работал 20 мин. а спомощию leto_groupby и dbgroupby
всего 16 секунд

Спасибо Паша !

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




Пост N: 292
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.04.14 07:47. Заголовок: Pasha Попробовал в L..


Pasha
Попробовал в Leto в работе новые поля типа + и ^ (сборка сервера с RddInfo( RDDI_TABLETYPE, DB_DBF_VFP )).
Сервер понимает и заполняет эти поля ok!, а клиент нет. После dbStruct() эти поля типа 'U'.
Это лечится ?
Версия hb 2.0, Leto /* $Id: readme_rus.txt,v 1.12 2011/04/19 16:04:58 ptsarenko Exp $ */


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




Пост N: 3147
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.04.14 10:47. Заголовок: Сделал, вечером скин..


Сделал, вечером скину на CVS

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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 01.05.14 20:19. Заголовок: Меня зовут Срджьан Я..


Меня зовут Срджьан
Я новичок в использовании LetoDB.
В чем разница между dbSeek и LetoDBSeek?

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




Пост N: 3149
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.05.14 20:24. Заголовок: dbSeek - это вызов о..


dbSeek - это вызов операции seek для харбора, один из методов rdd LETO
LetoDBSeek - это реализация вызова операции seek на языке С. С помощью LetoDBSeek можно разрабатывать клиенты для LetoDB для других языков программирования, не только для харбора. Функция харбора dbSeek как раз выполняет операцию seek через вызов LetoDBSeek

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



Пост N: 2
Зарегистрирован: 01.05.14
ссылка на сообщение  Отправлено: 02.05.14 09:15. Заголовок: Я пошел олл старую п..


Я пошел олл старую программу Clipper с водителем SIX3 на день letoDB. Все прекрасно работает, но у меня есть одна проблема, когда клиент покидает программу с Alt-C других покупателей иногда блока (нужно остановить программу с Ctrl-Alt-Del).
Я добавил следующий код:

#define K_ALTC 302
SETCANCEL(.F.)
SET KEY K_ALTC TO AltC()

EXIT PROCEDURE ZavrsiRad()
CLOSE ALL
leto_disconnect()
RETURN

PROCEDURE AltC()
CLOSE ALL
leto_disconnect()
QUIT
RETURN

Что вы думаете?

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



Пост N: 3
Зарегистрирован: 01.05.14
ссылка на сообщение  Отправлено: 02.05.14 09:54. Заголовок: Есть ли это программ..


Есть ли это программный код:
#xtranslate Sx_SetScope(<a>,<b>) => ordScope( <a>,<b> )
#xtranslate Sx_SetScope(<a>,) => ordScope( <a>, )
#xtranslate Sx_ClrScope() => (ordScope(0,),ordScope(1,))

n := Sifre->( LastRec() )
a1 := Array( n )
a2 := Array( n )
aFill( a1, 0 )
aFill( a2, 0 )
RobMat->( OrdSetFocus( 'Datum' ) )
RobMat->( Sx_SetScope( 0, dOd ), Sx_SetScope( 1, dDo ), dbGoTop() )
WHILE !RobMat->( EOF() )
IF LEFT(RobMat->Dokument,1)=='H' .AND. RobMat->Sifra<>0 .AND. RobMat->Radnik==nVoz .AND. RobMat->Magacin == 1
a2[ RobMat->Sifra ] += RobMat->Ulaz
a1[ RobMat->Sifra ] += RobMat->Izlaz
END
RobMat->( dbSkip() )
END

с следующий код программы:
RobMat->( OrdSetFocus( 'Datum' ) )
a:=RobMat->( LETO_GROUPBY("Sifra", "Ulaz, Izlaz", "LEFT(Dokument,1)=='H' .AND. Sifra<>0 .AND. Radnik=="+ALLTRIM(STR(nVoz,5,0))+" .AND. Magacin == 1", dOd, dDo) )

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




Пост N: 3150
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.05.14 08:58. Заголовок: Srdjan пишет: Есть ..


Srdjan пишет:

 цитата:
Есть ли это программный код:
#xtranslate Sx_SetScope(<a>,<b>) => ordScope( <a>,<b> )
#xtranslate Sx_SetScope(<a>,) => ordScope( <a>, )
#xtranslate Sx_ClrScope() => (ordScope(0,),ordScope(1,))

n := Sifre->( LastRec() )
a1 := Array( n )
a2 := Array( n )
aFill( a1, 0 )
aFill( a2, 0 )
RobMat->( OrdSetFocus( 'Datum' ) )
RobMat->( Sx_SetScope( 0, dOd ), Sx_SetScope( 1, dDo ), dbGoTop() )
WHILE !RobMat->( EOF() )
IF LEFT(RobMat->Dokument,1)=='H' .AND. RobMat->Sifra<>0 .AND. RobMat->Radnik==nVoz .AND. RobMat->Magacin == 1
a2[ RobMat->Sifra ] += RobMat->Ulaz
a1[ RobMat->Sifra ] += RobMat->Izlaz
END
RobMat->( dbSkip() )
END

с следующий код программы:
RobMat->( OrdSetFocus( 'Datum' ) )
a:=RobMat->( LETO_GROUPBY("Sifra", "Ulaz, Izlaz", "LEFT(Dokument,1)=='H' .AND. Sifra<>0 .AND. Radnik=="+ALLTRIM(STR(nVoz,5,0))+" .AND. Magacin == 1", dOd, dDo) )



Результат leto_GroupBy будет немного другой: не 2 одномерных массива a1 и a2, а один двумерный массив вида:
{ {Sifra1, Ulaz1, Izlaz1}, {Sifra2, Ulaz2, Izlaz2}, ...}


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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 03.05.14 14:21. Заголовок: LetoDB vs LAN


Здравствуйте!

Какие факторы определяют скорость Letodb? Я пробовал различные комбинации (Windows 7, XP, Windows Server) - измерил время некоторых обработки. Обычно Letodb работает в 4-5 раз быстрее, чем обычный доступ к файловой-сервере (LAN). Но Letodb иногда до 2-3 раз становится медленнее. Я использую NTX RDD. Есть ли CDX быстрее, чем NTX?

Спасибо, Ненад


Спасибо: 0 
Srdjan



Пост N: 4
Зарегистрирован: 01.05.14
ссылка на сообщение  Отправлено: 04.05.14 10:53. Заголовок: Спасибо Паша, Я вас..


Спасибо Паша,

Я вас понимаю.
 цитата:
Результат leto_GroupBy будет немного другой: не 2 одномерных массива a1 и a2, а один двумерный массив вида:
{ {Sifra1, Ulaz1, Izlaz1}, {Sifra2, Ulaz2, Izlaz2}, ...


Вместо двух строк, то функция возвращает матрицу. Я проверил, вместо 10 минут, результат получается за 30 секунд на клиентском компьютере.



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




Пост N: 3152
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.05.14 10:48. Заголовок: Здравствуйте! Каки..



 цитата:
Здравствуйте!

Какие факторы определяют скорость Letodb? Я пробовал различные комбинации (Windows 7, XP, Windows Server) - измерил время некоторых обработки. Обычно Letodb работает в 4-5 раз быстрее, чем обычный доступ к файловой-сервере (LAN). Но Letodb иногда до 2-3 раз становится медленнее. Я использую NTX RDD. Есть ли CDX быстрее, чем NTX?

Спасибо, Ненад



Вопрос многоплановый. Основной фактор, определяющий производительность - это открытие БД на сервере в монопольном режиме, в отличие от CDX/NTX. Поэтому режим Share_Tables рекомендуеся использовать только на этапе отладки.
Другой фактор - буферизация операций skip. Этим можно управлять: с помошью функции leto_SetSkipBuffer можно задать размер skip-буфера, размер которого по умолчанию равен 10 записям.
Можно также использовать seek буфер (по умолчанию он выключен).
Для увеличения производительности рекомендуется использовать scope и серверные фильтры.
LetoDB конечно лучше сравнивать не с dbfcdx/dbfntx, а с Ads.
Узкие места letodb - это relations и обновление данных. Туь он уступает ads
Если задействовать функции leto_sum, leto_groupby, и udf-функции (это полноценное программирование на сервере, примерный аналог stored proc), можно добиться намного более значительного результата.


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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 06.05.14 07:50. Заголовок: Я попробую этих пара..


Я попробую этих параметров, спасибо большое!

Ненад

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



Пост N: 2
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 12.05.14 05:27. Заголовок: тест RDD


Я сделал несколько тестов различных RDD (LAN - прямой доступ к серверу, LetoDB, HBNetIO, ADS). Результаты и тестовая программа:

https://www.dropbox.com/s/u3g9cpa4cpuiwsl/test3.xls
https://www.dropbox.com/s/g4uvhu1f6wwjiqy/TEST3.TXT

Я заметил, что на некоторых машинах результаты были очень плохые для LetoDB. Тест я работал на нескольких серверах: Win Server 2003 и Server 2008 (новый и лучший компьютер.). Тест состоит из простых операций (APPEND, SKIP, SEEK, REPLACE) . Результаты очень интересны:

 - XP работать быстрее, чем Win7, даже когда Win 7 компьютер является более мощным (например, строка 4 и 9).

- прямой доступ к серверу иногда намного быстрее, чем клиент-сервер! Например, линия 14/19. Интересно, что результаты ADS/Leto такие же, независимо от того что сервер работает быстрее.

- APPEND: Leto/ADS работает медленнее, чем LAN/HBNetIO.

 - Leto/ADS/HBNetIO дают сходные результаты во всех случаях , независимо от изменений окружающей среды. Очевидно, что прямой подход LAN использует некоторый тип кэша, что не влияет на Leto/ADS/HBNetIO.

Я попробовал тоже параметры, которы дал Паша, но я не заметил разницы, за исключением Leto_SetFastAppend.

С уважением, Ненад

(Извините за ошибки)


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



Пост N: 6
Зарегистрирован: 01.05.14
ссылка на сообщение  Отправлено: 12.05.14 06:00. Заголовок: Почему я вижу эту ош..


Почему я вижу эту ошибку при использовании команды Use (cPath+"Users") New ALIAS USERS
-------------------- Internal Error Handling Information ---------------------

Subsystem Call ....: LETO
System Code .......: 1021
Default Status ....: .F.
Description .......: Data type error
Operation .........:
Arguments .........:
Involved File .....: //127.0.0.1:2812\hz\Users
Dos Error Code ....: 0

Trace Through:
----------------
DBUSEAREA : 0 in Module:

users.dbf

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




Пост N: 3176
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.05.14 08:08. Заголовок: Почему я вижу эту ош..



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



Что-то users.dbf не скачивается.
Поставьте еще в letodb.ini параметр

Debug=10

Перезапустите службу letodb, и посмотрите, какие команды появятся в letodb.log. Так будет понятнее ситуация.

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



Пост N: 79
Зарегистрирован: 14.01.09
ссылка на сообщение  Отправлено: 03.06.14 15:39. Заголовок: Как собрать LETO ночной сборкой харбора?


Как собрать LETO ночной сборкой харбора? Что-то ничего не получается.

C:\hb-old\letodb>..\bin\hbmk2 -info -trace  rddleto.hbp letodb.hbp 
hbmk2: Autodetected platform: win
hbmk2: Autodetected C compiler: mingw
hbmk2: Using Harbour: C:\hb-old\bin C:\hb-old\include C:\hb-old\lib\win\mingw
C:\hb-old\bin C:\hb-old\contrib C:\hb-old\addons
hbmk2: Using C compiler: c:\hb-old\comp\mingw\bin\gcc.exe
hbmk2: Compiling...
hbmk2: 'cd' to: lib\.hbmk\win\mingw
hbmk2: C/C++ compiler command:
gcc.exe -c -O3 -march=i586 -mtune=pentiumpro -fomit-frame-pointer -W -Wall -pipe -I"C:/hb-old/include" -I../../../../include
../../../../source/common/net.c
../../../../source/common/net.c: In function 'leto_NetName':
../../../../source/common/net.c:144:18: error: 'MAX_COMPUTERNAME_LENGTH' undeclared (first use in this function)
../../../../source/common/net.c:144:18: note: each undeclared identifier is reported only once for each function it appears in

../../../../source/common/net.c:148:4: warning: implicit declaration of function 'GetComputerName' [-Wimplicit-function-declar
ation]
../../../../source/common/net.c:145:9: warning: unused variable 'szValue' [-Wunused-variable]
hbmk2[rddleto]: Error: Running C/C++ compiler. 1
gcc.exe -c -O3 -march=i586 -mtune=pentiumpro -fomit-frame-pointer -W -Wall -pipe -I"C:/hb-old/include" -I../../../../include
../../../../source/common/net.c
hbmk2: 'cd' back.


PPS:и вот еще, когда описал явно константу

#define MAX_COMPUTERNAME_LENGTH 15

получаю ошибки вида:
../../../../source/server/letofunc.c:339:13: error: expected '(' before 'ISBYREF'
../../../../source/server/letofunc.c:374:10: error: expected '(' before 'ISBYREF'

Это в С коде ошибки? или как-то можно это обработать?


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



Пост N: 3
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 12.06.14 17:37. Заголовок: ошибки


Паша,

Можете ли вы исправить эти ошибки, пожалуйста?

http://sourceforge.net/apps/phpbb/letodb/viewtopic.php?f=1&t=10
http://sourceforge.net/apps/phpbb/letodb/viewtopic.php?f=1&t=25

С уважением, Ненад

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




Пост N: 3205
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.06.14 08:29. Заголовок: dimao пишет Как собр..


dimao пишет

 цитата:
Как собрать LETO ночной сборкой харбора? Что-то ничего не получается.



source/common/net.c для сборки теперь не нужен. Его надо удалить из скрипта для hbp

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




Пост N: 3207
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.06.14 16:53. Заголовок: nbatocanin пишет: П..


nbatocanin пишет:

 цитата:
Паша,

Можете ли вы исправить эти ошибки, пожалуйста?

http://sourceforge.net/apps/phpbb/letodb/viewtopic.php?f=1&t=10
http://sourceforge.net/apps/phpbb/letodb/viewtopic.php?f=1&t=25

С уважением, Ненад



По второму вопросу - исправил. А по первому - разве не помог патч ? Вопрос еще остался ?

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



Пост N: 4
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 18.06.14 02:37. Заголовок: Я попробовал его, и ..


Я попробовал его, и кажется, что он делает хорошо. Спасибо!

Ненад

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




Пост N: 3208
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.07.14 14:19. Заголовок: Александр, я обнаруж..


Александр, я обнаружил, что ordBagExt() aka IndexExt() с конца прошлого года стал выдавать результат на верхнем регистре, а раньше выдавал на нижнем. Это сделано намеренно ?

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




Пост N: 407
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.14 19:35. Заголовок: Pasha как правильно..


Pasha
как правильно включить в версию v 1.350.2.199 2014/08/05 работу с AutoIncrement: RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) ?
раньше делал так:
 
FUNCTION hs_InitSet()
rddSetDefault( "DBFCDX" )

RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) // New

SET AUTOPEN ON
SET DELETE OFF

RETURN Nil


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




Пост N: 3212
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.09.14 12:17. Заголовок: Это и не обязательно..


Это и не обязательно. Достаточно просто создать таблицу с полем AUTOINC - "+" для dbCreate

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




Пост N: 409
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.09.14 17:11. Заголовок: Pasha СПАСИБО ..


Pasha
СПАСИБО

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




Пост N: 410
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.09.14 20:33. Заголовок: Pasha начали пробов..


Pasha
начали пробовать LetoDb (v.m. 1.350.2.199 2014/08/05) и кое что поковыряли, может будет полезным
1. letomgmn.c:
line 901:
char ** pRetValue;
она объявлена, но не инициализирована, а в line 927 используется:
((cType=='3')? (char*)hb_parc(3) : szValue), uiFlags, ((bPrev)? pRetValue : NULL) );
а в line 949:
free( *pRetValue );
т.е. освободить память, которую не выделяли, что, наверное, не есть хорошо ?

2. несколько сервисов (от имени exe) на pc (с разных каталогов, переименовав letodb.exe в др. имя). leto_win.c
изменения помечены // BAA
Скрытый текст




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




Пост N: 3213
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.09.14 08:23. Заголовок: pRetValue - это ссыл..


pRetValue - это ссылка на ссылку. Память в *pRetValue выделяется в функции LetoVarSet, и ее надо освободить.
Так что здесь все нормально.

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




Пост N: 411
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.09.14 08:58. Заголовок: Pasha пишет:Так что ..


Pasha пишет:
 цитата:
Так что здесь все нормально.


Это да, но лезет WARNING, а без него лучше.

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




Пост N: 3215
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.09.14 12:43. Заголовок: А зачем может понадо..


А зачем может понадобиться несколько служб LetoDB ?

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




Пост N: 412
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.09.14 16:23. Заголовок: Pasha пишет:А зачем ..


Pasha пишет:
 цитата:
А зачем может понадобиться несколько служб LetoDB ?


Службами разделены клиенты (их базы) по требованиям безопасности.

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




Пост N: 3623
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.14 20:45. Заголовок: SergKis пишет: Служ..


SergKis пишет:

 цитата:
Службами разделены клиенты (их базы) по требованиям безопасности.


Вообще то это было бы интересней - несколько служб LetoDB.
И сколько ресурсов (в среднем) будет "отъедать" одна служба LetoDB на сервере ?

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




Пост N: 423
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.10.14 14:08. Заголовок: Pasha Возможна ли р..


Pasha
Возможна ли работа LetoDb клиента в потоках ?


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




Пост N: 4235
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.10.14 21:28. Заголовок: SergKis пишет: Возм..


SergKis пишет:

 цитата:
Возможна ли работа LetoDb клиента в потоках ?


Сам чекани.

Из своих наблюдений:
1. Объект EXCEL создать в отдельном потоке не возможно.
2. Пробовал в ADS юзать одни и те же базы в разных потоках одновременно , падает. Если в порядке очереди
все нормально.


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




Пост N: 3216
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.10.14 09:22. Заголовок: Наверное, нельзя. Се..


Наверное, нельзя. Сейчас у клиента rdd leto имеются статические данные, и в результате клиент не сможет работать в разных потоках. Эту проблему, положим, решить довольно легко. Но сам сервер для обслуживания клиента создает отдельный поток, и, если запросы с клиента будут поступать с нескольких потоков этого клиента, сервер не сможет их обслужить.

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




Пост N: 424
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.10.14 09:57. Заголовок: Pasha пишет:Наверное..


Pasha пишет:
 цитата:
Наверное, нельзя


Сегодня у нас есть CDX в потоках+Leto сервер (старая версия) с Share_Tables = 1.
Сейчас пробуем переползти на последнюю версию Leto и хотелось бы отказаться от CDX в потоках.

 цитата:
Эту проблему, положим, решить довольно легко


это было бы здорово , особенно, если коннект один (общий), а работа с таблицами в потоках.

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




Пост N: 425
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.10.14 10:02. Заголовок: Dima с EXCEL и Open..


Dima
с EXCEL и OpenOffis работаем через: http://www.libxl.com/

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



Пост N: 5
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 12.11.14 20:30. Заголовок: Здравствуйте, Mне н..


Здравствуйте,

Mне нужно, чтобы отфильтровать таблицу ARTIKLI по содержанию другой таблице (MAGKOL). Таблица MAGKOL содержать информацию о количестве каждого элемента на складах. Я хочу показать только элементы которые существуют на складе.

Я знаю, что LETODB не поддерживается SET RELATION отношении в SET FILTER. Что бы Вы посоветовали?

Ненад



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




Пост N: 4260
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.11.14 22:35. Заголовок: разве что выкинуть в..


разве что выкинуть все во временную базу и ее показать (вариант видится не один)

PS
Не очень корректно видимо изначально спроектирована сама база.

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



Пост N: 6
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 13.11.14 07:02. Заголовок: У меня есть следующи..


У меня есть следующие таблицы:

ARTIKLI: 
a_id a_name
------ -------------
1 Milk
2 Cookie
3 Chocolate

MAGACIN:
m_id m_name
------ --------------
1 Magacin 1 X
2 Magacin 2 X
3 Magacin 3


MAGKOL
mk_mag mk_art mk_kol
------- -------- --------
1 1 10
1 2 0
1 3 0
2 1 5
2 2 0
2 3 12
3 1 100
3 2 100
3 3 100


Например, первая запись в magkol означает склад ID = 1 имеет 10 штук молока. Пользователь выбирает несколько складов (скажем, 1 и 2). Я хочу все элементы в склад, который имеет 1 или 2:

TBrowse: 
Name Quant.
----------- ------
Chocolate 12 (= 0 + 12)
Cookie 0 (= 0 + 0)
Milk 15 (= 10 + 5)


В этом случае, не нада показывать вторую строку (=0). Теперь у меня есть функция, которая вычисляет сумму в выбранный и я пишу:

SELECT Artikli 
SET FILTER TO CalcMagKol() <> 0


Я надеюсь, что это теперь яснее.

Привет,

NB

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




Пост N: 3225
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.11.14 13:28. Заголовок: Сейчас средствами ст..


Сейчас средствами стандартного серверного фильтра этого сделать нельзя.
Посмотрите в сторону функции UDF_getFields, которая находится в модуле letoudf.hrb
Она фильтр не установит, но с ее помощью можно вернуть массив с данными обеих таблиц.
Массив формируется одним запросом к серверу.

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



Пост N: 7
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 13.11.14 20:04. Заголовок: Я не могу найти эту ..


Я не могу найти эту функцию? Где она точно находится?

Спасибо,

Ненад

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




Пост N: 155
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 13.11.14 22:39. Заголовок: tests


находится в test\letoudf.prg
строка 304

Класная функция . Возмещает отсутствия SQL запросов .

Спасибо Паша !

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




Пост N: 3227
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.11.14 08:32. Заголовок: см. tests/letoudf.pr..


см. tests/letoudf.prg
Этот модуль надо скомпилировать командой

harbour letoudf.prg -gh -n -w -i\harbour\include

и поместить letoudf.hrb в папку, в которой расположен letodb.exe

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



Пост N: 8
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 14.11.14 16:03. Заголовок: Спасибо!..


Спасибо!

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



Пост N: 10
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 30.11.14 22:02. Заголовок: сервер функция


Я хочу сделать сервер функцию которая изменяет DBF:

клиент:

USE test
Leto_UDF ("Udf_Test")


сервер:

FUNCTION Udf_Test (nUserStru)
cTest := leto_Alias (nUserStru, "Test") // cTest = NIL??
...

Почему это не работает?



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




Пост N: 3231
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.12.14 10:18. Заголовок: Проверил - работает...


Проверил - работает. С такими поправками:

Пусть cPath - строка коннекта к серверу, f.e.:
cPath:="//127.0.0.1:2812/"

1. Надо или выдать:
if (nConnect:=leto_connect(cPath))<>-1

или при вызове udf-функции напрямую указывать параметры сервера:
? leto_udf(cPath + 'UDF_Test')

2. Открывать файл с параметрами коннекта:
use (cPath + 'test')

В целом, такой пример получается рабочим:

if (nConnect:=leto_connect(cPath))<>-1
use (cPath + 'test')
? leto_udf('UDF_Test')
wait
endif


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



Пост N: 11
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 04.12.14 06:25. Заголовок: Вот то, что я делаю:..


Вот то, что я делаю: добавил следующее в конце server.prg:

FUNCTION Udf_ArtKol (nUserStru)
LOCAL cLetoArt
cLetoArt := leto_Alias (nUserStru, "Artikli")
RETURN cLetoArt

Тогда я произвел LetoDB (hbmk2 letodbc.hbp). Затем я активировал тестовую программу:

REQUEST LETO
PROC Main
RddSetDefault ("LETO")
cPath := "//192.168.99.1:2807/LetoDB/"
USE (cPath + "Artikli") ALIAS Artikli NEW
DbSetIndex (cPath + "Art_ID")
x := Leto_UDFExist("//192.168.99.1:2807/Udf_ArtKol")
y := Leto_UDF ("//192.168.99.1:2807/Udf_ArtKol")
? "ret=", x, y
Inkey(0)
CLOSE Artikli
RETURN

Программа возвращается "ret=.T. NIL", а в letodb.log пишет:

12/04/14 04:07:07: Leto DB Server has been started.

Leto DB Server v.2.14 ! INIT: DataPath=d:\test, ShareTables=0, MaxUsers=500, Max
Tables=5000, CacheRecords=500
DEBUG! new connect 192.168.99.10 (0 : 1 : 1)
leto_errInternal!!!!!!!!!!!!!!!!!!

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




Пост N: 156
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 07.12.14 14:27. Заголовок: Надо сделать по другому


1. Функцию Udf_ArtKol (nUserStru) надо добавить в tests\letoudf.prg
2. Откомпилировать kоманндой harbour /gh letoudf.prg
3. Полученый фаил letoudf.hrb поставить в папку где у тебя лежит letodb.exe
4. При старте letodb загрузит letoudf.hrb ( етого можно увидить в логе)
5. Възов UDF функции должен осуществлятся только через имя функции :

x := Leto_UDFExist("Udf_ArtKol")
y := Leto_UDF ("Udf_ArtKol")

если есть параметры вот так : Leto_UDF ("Udf_ArtKol", Param1, Param2)

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



Пост N: 12
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 07.12.14 19:14. Заголовок: Спасибо! Проблема р..


Спасибо!

Проблема решается, если задания функции через hrb, все работает как надо. Я изменил server.prg (потому что нам нужна функция VolSerial), так что я сделал функцию UDF_VolSerial в server.prg и все работало должным образом. Я не знаю, почему функция UDF_ArtKol не будет работать.

Функции также работать нормально при использовании так (как сказал Паша):

x := Leto_UdfExist("//192.168.99.1:2807/Udf_ArtKol")

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



Пост N: 13
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 08.12.14 06:38. Заголовок: Функция сервера, вто..


Функция сервера, второй раз:

FUNCTION Udf_ArtKol (nUserStru) 
LOCAL cLetoMagKol, cLetoArt

cLetoArt := leto_Alias (nUserStru, "Artikli")
cLetoMagKol := leto_Alias (nUserStru, "MagKol")

SELECT (cLetoMagKol)
OrdSetFocus ("Mag_AM")

SELECT (cLetoArt)

IF (x := Leto_TableLock (nUserStru, 1))
GO TOP
WHILE !Eof()
(cLetoArt)->a_mk := "ABC"
SKIP
END DO
Leto_TableUnlock (nUserStru, 1)
END IF

RETURN x


Эта функция не изменяет файл ARTIKLI и возвращает NIL. Я ожидал, что результате Leto_TableLock будет T или F? Что означает вторые параметр в Leto_TableLock? Readme говорит только, что это число 1-32.



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




Пост N: 3233
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.12.14 08:50. Заголовок: Функция leto_TableLo..


Функция leto_TableLock - это не аналог FLock. Она предназначена для блокировки таблицы при выполнении некоторых действий, к примеру - получения уникального ключа для новой записи. См. пример использования в letoudf.prg, функция UDF_AppendRec
Для ваших целей используйте функции leto_RecLock / leto_recUnlock


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



Пост N: 14
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 08.12.14 22:14. Заголовок: Большое спасибо! Сей..


Большое спасибо! Сейчас все работает. Я сделал функцию, которая указывает, какие записи должны быть отфильтрованы (для замены RELATION TO). Функция работает очень быстро: 110.000 записей завершено в 1,6 секунды!

FUNCTION Udf_ArtKol (nUserStru, aMag, nId) 
LOCAL cLetoMagKol, cLetoArt, i, lImaKol
LOCAL nArt, x

cLetoArt := leto_Alias (nUserStru, "Artikli")
cLetoMagKol := leto_Alias (nUserStru, "MagKol")

SELECT (cLetoMagKol)
OrdSetFocus ("Mag_AM")

x := 0

SELECT (cLetoArt)
GO TOP
WHILE !Eof()
nArt := (cLetoArt)->a_id

SELECT (cLetoMagKol)
lImaKol := .F.
FOR i := 1 TO Len(aMag)
SEEK Str(nArt,10) + Str(aMag,10)
IF Found() .AND. (cLetoMagKol)->k_kol <> 0
lImaKol := .T.
EXIT
END IF
NEXT

IF Leto_RecLock (nUserStru)
(cLetoArt)->a_mk := Left((cLetoArt)->a_mk,nId-1) + IIF (lImaKol, "1", " ") + SubStr((cLetoArt)->a_mk,nId+1)
Leto_RecUnlock (nUserStru)
x++
END IF

SELECT (cLetoArt)
SKIP
END DO

RETURN x


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



Пост N: 15
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 13.12.14 22:54. Заголовок: Я вижу, что есть фун..


Я вижу, что есть функция Leto_MakeDir, но если функция Leto_RemoveDir?

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




Пост N: 158
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 08.01.15 14:31. Заголовок: Вот такой тест


Вот такой тест:

procedure main()
local _Server := '//127.0.0.1:2812/'
REQUEST DBFCDX
REQUEST LETO

RDDSETDEFAULT( "DBFCDX" )
use ('file') new
copy to ('file1')
dbclosearea()

RDDSETDEFAULT( "LETO" )
use (_Server+'file1') excl new
zap

APPEND FROM ('file') VIA "DBFCDX"
go top

browse()
return

в первое текстовое поле начинается с пробелом и
все текстовые поля смещаются на один символ в право
версия LetoDB последняя вроде !


2014-11-17 17:10 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru)
* source/client/leto1.c
! fixed gpf in some functions, that occured with no leto area


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




Пост N: 159
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 08.01.15 23:15. Заголовок: А если добавлять из LETODB все ОК


А если делаем APPEND FROM из LETODB все ОК :)

procedure main()
local _Server := '//127.0.0.1:2812/'
REQUEST DBFCDX
REQUEST LETO

RDDSETDEFAULT( "LETO" )
use (_Server+'file') new
copy to (_Server+'file1')
browse()
dbclosearea()

RDDSETDEFAULT( "DBFCDX" )
use ('file1') excl new
zap

APPEND FROM (_Server+'file') VIA "LETO"
go top

browse()
return



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




Пост N: 3240
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.01.15 07:58. Заголовок: Вопрос в том, что бу..


Вопрос в том, что буфер записи leto и dbfcdx несовместим, в leto он не содержит 1-й байт deleted. Думаю, надо в leto сделать такой же формат, как и в dbfcdx

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




Пост N: 3241
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.01.15 19:15. Заголовок: Сделал. Теперь APPEN..


Сделал. Теперь APPEND FROM будет работать

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


Пост N: 827
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.01.15 15:13. Заголовок: Сделал небольшое исп..


Сделал небольшое исправление в server.prg, hs_createindex() - добавил строчки после IF !Empty( cBagName ):

IF Empty( cTagName )
cTagName := hb_FNameName( cBagName )
ENDIF

Это связано с проблемой, изложенной на [url=https://groups.google.com/forum/#!topic/harbour-users/p2f9ffWM0sk]harbour-users[/url].

Когда индекс создавался командой INDEX ON ... TO ... имя тэга было пустое, leto_addTag() его не добавлял и leto_FindTag(), соответственно, потом ничего не находил.

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




Пост N: 160
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 16.01.15 15:31. Заголовок: Паша !


Паша !
Добавление данных в сторону Letodb опять не работает
и при COPY TO и при APPEND FROM

если первое поле тип C в нем все ОК но остальных нету
если первое поле тип N - остаются оно и второе , а остальные Тю Тю :)


****************
procedure main()
local _Server := '//127.0.0.1:2812/'
REQUEST DBFCDX
REQUEST LETO

//CDX
use ('file') new VIA "DBFCDX"
browse()
copy to (_Server+'file_leto') VIA "LETO"
dbclosearea()

//LETO
use (_Server+'file_leto') excl new VIA "LETO"
go top
browse()

zap
APPEND FROM ('file') VIA "DBFCDX"
go top
browse()
return


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


Пост N: 828
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.01.15 09:23. Заголовок: Да, действительно, е..


Да, действительно, есть проблема. Попробую разобраться.

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


Пост N: 829
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.01.15 10:08. Заголовок: Исправил. Теперь дол..


Исправил. Теперь должно работать.

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




Пост N: 161
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 27.01.15 23:15. Заголовок: Благодарю г-н Кресин !


Благодарю г-н Кресин !

Извиняюсь за поздний ответ !

Теперь все работает отлично !

Я высоко оцениваю Ваш труд и Пашин тоже ! И думаю, что проекту нужна какая-то финансовая подмога на его дальнейшее развитие .

Ребята кто пользуются етим сервером давайте ето обсудим !

у нас в Болгарии говорят , попробую перевести ( Дружба есть дружба , но брынза стоит денег ) :)



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


Пост N: 839
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.01.15 09:12. Заголовок: sashaBG пишет: Благ..


sashaBG пишет:

 цитата:
Благодарю г-н Кресин !


Лучше - товарищ :). "Господа" у нас даже через 25 лет после переворота 1991г. как-то не привились.

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



Пост N: 16
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 08.02.15 15:11. Заголовок: sashaBG пишет: Я вы..


sashaBG пишет:

 цитата:
Я высоко оцениваю Ваш труд и Пашин тоже ! И думаю, что проекту нужна какая-то финансовая подмога на его дальнейшее развитие .

Ребята кто пользуются етим сервером давайте ето обсудим !



Я согласен с этим. Будет хорошо, чтобы открыть счет для помощи. Если вы хотите, я могу зарегистрировать сайт LetoDB.com?

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


Пост N: 845
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.02.15 12:47. Заголовок: nbatocanin пишет: Е..


nbatocanin пишет:

 цитата:
Если вы хотите, я могу зарегистрировать сайт LetoDB.com?


Сайтом надо заниматься, чем-то его наполнять, регулярно обновлять, чтобы он жил. На это нужны в первую очередь человеческие ресурсы, которых не хватает. Когда Letodb появился на свет, Patrick Mast зарегистрировал letodb.org, но сайт мы так и не создали - не было времени и мотивации.

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




Пост N: 470
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.15 00:02. Заголовок: Режим: RddInfo( RDDI..


Режим: RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) - работа с новыми полями, сервер делает все ok, а клиент нет.
за основу взял test_dbf.prg из tests
для CDX:
Скрытый текст


для LETO:
Скрытый текст


в LETO:
- типы T, @ превращаются в =
- пустое поле типа = не заполняется значением TimeStamp
- значения VM и ID не отображаются, видим NIL
или я что то не так делаю ?

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




Пост N: 471
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.15 00:05. Заголовок: PS сервер делает все..


PS сервер делает все ok для полей типа ^ и +

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




Пост N: 472
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.15 12:40. Заголовок: смотрю в сервере отк..


смотрю в сервере отключены триггера - это специально или нарочно ?
Скрытый текст


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



Пост N: 17
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 12.02.15 15:36. Заголовок: alkresin пишет: Сай..


alkresin пишет:

 цитата:
Сайтом надо заниматься, чем-то его наполнять, регулярно обновлять, чтобы он жил. На это нужны в первую очередь человеческие ресурсы, которых не хватает. Когда Letodb появился на свет, Patrick Mast зарегистрировал letodb.org, но сайт мы так и не создали - не было времени и мотивации.



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

Ненад

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