On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
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 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 465
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет