Автор | Сообщение |
Dima
|
| |
Пост N: 2728
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 9)
Продолжаем тут
|
|
|
Ответов - 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 дает эту фичу, нелишне будет иметь к ней доступ. Тем более, настройка, использовать ее или нет, существует.
|
|
|
Dima
|
| |
Пост N: 2733
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 16:31. Заголовок: Pasha пишет: Да уже..
Pasha пишет: В смысле уже на CVS с учетом последних глючков ? В Index on почему не срабатывает предложение [EVAL <bBlock>] ? Без него плёхо будет , юзеры не поймут.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2751
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.13 16:46. Заголовок: Нет, на CVS не сбрас..
Нет, на CVS не сбрасывал. Но это уже называется "осталось допилить" А индексация ведь выполняется на сервере, и во время индексации обмена между клиентом и сервером нет, поэтому EVAL и не поддерживается.
|
|
|
Dima
|
| |
Пост N: 2735
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 16:51. Заголовок: Pasha пишет: А инде..
Pasha пишет: цитата: | А индексация ведь выполняется на сервере, и во время индексации обмена между клиентом и сервером нет, поэтому EVAL и не поддерживается. |
| Хммм а почему в ADS это работает ? Предложение EVAL обычно содержит пользовательскую функцию (UDF), которая отображает состояние создания индекса. UDF доступна клиенту пока на сервере строится индекс. Если условие EVAL определено, оно будет вычисляться каждые 2 секунды у клиента. С такой частотой Advantage изменяет внутренний номер записи и количество ключей. Если используются функции RecNo() и/или AX_KeysIncluded(), будет возвращен корректный результат. По моему разумно сделано и юзеру можно показать что он не "висит". Пометил красным ключевую фразу.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2752
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.13 17:08. Заголовок: Это в клиппере ? Я с..
Это в клиппере ? Я смотрю, в харборе в rddads тоже это условие игнорируется Запускать его отдельным потоком во время ожидания завершения индексации, что ли Пока не представляю, как это сделать
|
|
|
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 Тебе виднее можно и нужно ли это. я просто высказал пожелание
|
|
|
Pasha
|
| Администратор
|
Пост N: 2754
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.13 20:15. Заголовок: Отправил на CVS изме..
Отправил на CVS изменения по BM-фильтрам, о которых мы говорили, кроме учета настройки _SET_FORCEOPT на клиенте.
|
|
|
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 на клиенте |
| а что там еще не так ? А вообще отличная работа , спасибо !!!
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2736
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.03.13 22:12. Заголовок: Dima пишет: На мале..
Dima пишет: цитата: | На маленьких базах EVAL в индексе не нужен а вот если база широкая и толстая.......... Можно пойти по тому же пути как в описании выше к RDDADS Тебе виднее можно и нужно ли это. |
| Нужно ! Как юзер увидет что идет индексация ? Что-то нужно делать с этим... Не сейчас, так чуть позже, все равно я только пробую...
|
|
|
Dima
|
| |
Пост N: 2739
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 23:52. Заголовок: Andrey пишет: Как ю..
Andrey пишет: цитата: | Как юзер увидет что идет индексация ? |
| как бы идея есть но она не самая хорошая и сам процесс индексирования конкретного файла юзер не увидит.
|
|
|
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. Это был бы самый гибкий способ, но реализация его сложнее.
|
|
|
|
Dima
|
| |
Пост N: 2740
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.03.13 10:40. Заголовок: Dima пишет: нужно с..
Dima пишет: цитата: | нужно сбрасывать фильтра при установке LBM_DBSETFILTERARRAY() |
| Pasha Это можно починить ?
|
|
|
Dima
|
| |
Пост N: 2741
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.03.13 12:51. Заголовок: Pasha А можно ли с ..
Pasha А можно ли с клиента узнать время и дату на сервере Leto ? Можно ли это добавить в LETO_MGGETINFO() ?
|
|
|
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")
|
|
|
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}
|
|
|
Dima
|
| |
Пост N: 2742
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.03.13 14:02. Заголовок: PSP пишет: Дима, та..
PSP пишет: цитата: | Дима, такая функция есть: Leto_MGGetTime() |
| Точно ;) Не увидел сразу. Pasha пишет: цитата: | А какая дата сервера нужна ? Текущая ? |
| Уже прояснился вопрос.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2757
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.03.13 20:02. Заголовок: Выложил на CVS сброс..
Выложил на CVS сброс фильтра перед LBM_DBSETFILTERARRAY()
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2738
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.03.13 20:53. Заголовок: Pasha пишет: Это бы..
Pasha пишет: цитата: | Это был бы самый гибкий способ, но реализация его сложнее. |
| Я за гибкость !
|
|
|
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.) // убирает переменные
|
|
|
Dima
|
| |
Пост N: 2746
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.03.13 23:55. Заголовок: Pasha пишет: Выложи..
Pasha пишет: цитата: | Выложил на CVS сброс фильтра перед LBM_DBSETFILTERARRAY() |
| Спасибо , работает норм !!! Есть одна мысль по поводу BM фильтров и оптимальной их установке. Думаю она тебе тоже посещала. Изложу позже.
|
|
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|