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




Пост N: 2691
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.13 12:02. Заголовок: BMDBFCDX


Занятный RDD. Позволяет ставить оптимизированные фильтры даже без наличия
индексов по фильтруемым полям а так же фильтры типа CUSTOM
Есть пара вопросов
 
proc main
local afilt:={}
local nsec:=0
REQUEST BMDBFCDX
REQUEST _BMDBF
RDDSETDEFAULT( "BMDBFCDX" )
cls
USE karta new // 10 полей 700000 записей
set optimize on // не понятно назначение сией команды , результат одинаков
// при OFF или ON

nsec:=seconds()
set filter to nomer==1454
go top
? seconds()-nsec // 0.14 секунд , DBFCDX выдал чуть хуже результат да и бровс с ним получился с тормозом.

aadd(afilt,1)
aadd(afilt,400000)
aadd(afilt,700000)
nsec:=seconds()
BM_DBSETFILTERARRAY(afilt)
go top
? seconds()-nsec // 0.0 секунд

afilt:={}
aadd(afilt,100)
aadd(afilt,4000)
aadd(afilt,7000)
aadd(afilt,8000)
aadd(afilt,17000)

nsec:=seconds()
BM_DBSETFILTERARRAY(afilt)
go top
? seconds()-nsec // 0.0 секунд


BM_DBSETFILTERARRAYADD(afilt,18000) // добавляем 6 запись
? len(BM_DBGETFILTERARRAY()) // но длина массива не изменилась
//странно , возможно не так ее юзаю
wait

go top
browse() // бровс летает


close all
return nil

И не понятно что за зверь такой BM_Turbo()
? BM_Turbo(.t.)
? BM_Turbo(.f.)
Вернет .F. в обоих случаях





Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]


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




Пост N: 2692
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.13 15:01. Заголовок: Dima пишет: И не п..


Dima пишет:

 цитата:
И не понятно что за зверь такой BM_Turbo()
? BM_Turbo(.t.)
? BM_Turbo(.f.)
Вернет .F. в обоих случаях



Ага , что то видимо задумывалось но .......
 
HB_FUNC( BM_TURBO )
{
hb_retl( HB_FALSE );
}



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2693
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.13 15:05. Заголовок: Dima пишет: BM_DBSE..


Dima пишет:

 цитата:
BM_DBSETFILTERARRAYADD(afilt,18000)


Разобрался.
Надо так
aadd(afilt,18000)
BM_DBSETFILTERARRAYADD(afilt)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2726
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.03.13 16:00. Заголовок: Dima пишет: Надо та..


Dima пишет:

 цитата:
Надо так
aadd(afilt,18000)
BM_DBSETFILTERARRAYADD(afilt)



Можно просто:

BM_DBSETFILTERARRAYADD({18000})

Параметр - это массив номеров записей, которые добавляются к существующему фильтру.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2694
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.13 16:08. Заголовок: Pasha пишет: BM_DBS..


Pasha пишет:

 цитата:
BM_DBSETFILTERARRAYADD({18000})


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 42
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 09.03.13 19:40. Заголовок: Dima пишет: бровс л..


Dima пишет:

 цитата:
бровс летает


Я так понимаю, что база локальная. А сетевой вариант не пробовали?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2695
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.13 20:52. Заголовок: Панченко пишет: Я т..


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

 цитата:
Я так понимаю, что база локальная


Да

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

 цитата:
А сетевой вариант не пробовали?


Нет и смысла в этом не вижу без сервера базы данных. Вот если сделают поддержку
в LetoDB этого RDD тогда другое дело.
Хотя ради интереса завтра попробую , но результат уже предвижу.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2727
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.03.13 23:42. Заголовок: Dima пишет: Вот есл..


Dima пишет:

 цитата:
Вот если сделают поддержку
в LetoDB этого RDD тогда другое дело.



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

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 2696
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.13 23:44. Заголовок: Pasha пишет: Да я у..


Pasha пишет:

 цитата:
Да я уже можно сказать что сделал


Готов тестить. Что нужно от меня ? Мыло ты знаешь если что.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2728
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.03.13 00:40. Заголовок: Отправил. Твой приме..


Отправил. Твой пример работает. Завтра постараюсь выложить на CVS, если глюков не обнаружится конечно.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2729
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.03.13 11:27. Заголовок: Поправил сброс фильт..


Поправил сброс фильтра, и сбросил изменения на CVS.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Pasha пишет:

 цитата:
Отправил.


Глянь мыло

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2702
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 15:11. Заголовок: Pasha Все работает ..


Pasha
Все работает отлично. Спасибо !
А собрать уже можно под Harbour 3.0 или все таки юзать 3.2 ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2732
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.03.13 15:33. Заголовок: В связи с этим вопро..


В связи с этим вопрос, может быть кто подскажет
В скрипте hbp для hbmk2 можно задать локальную переменную окружения:

-env:__BM=yes

и затем ее использовать:

{__BM}source/client/letobmcl.prg

т.е, включать в сборку модуль letobmcl.prg, только если задан макрос __BM
В harbour 3.0 этот способ не работает, работает только в 3.2dev
Как можно сделать сборку по условию, т.е. включать в проект модуль только тогда, когда задан определенный макрос ?
Интересует способ, который работал бы и в более ранних версиях Harbour, хотя бы до 3.0

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2704
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 17:38. Заголовок: Первые глюки в LetoD..


Первые глюки в LetoDB и LBM

Ставим Set filter to какой то , в BMDBFCDX BM_DBSETFILTERARRAY() вернет не пустой массив если в фильтре есть записи
В Leto LBM_DBSETFILTERARRAY() вернет 0 да и фильтр получится не оптимизированным

Установка Set filter to (или установка нового фильтра) не сбрасывает предыдущий фильтр , в BMDBFCDX это работает

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2705
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 17:42. Заголовок: Dima пишет: BM_DBSE..


Dima пишет:

 цитата:
BM_DBSETFILTERARRAY()

ошибся имел в виду BM_DBGETFILTERARRAY

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2706
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 18:07. Заголовок: Пример BMDBFCDX se..


Пример
 
BMDBFCDX

set filter to nomer==1
go top
? len(BM_DBGETFILTERARRAY()) // 37


set filter to
go top
? len(BM_DBGETFILTERARRAY()) // 0

set filter to nomer==5
go top
? len(BM_DBGETFILTERARRAY()) //63



 
LETO

set filter to nomer==1
go top
? len(LBM_DBGETFILTERARRAY()) // 0


set filter to
go top
? len(LBM_DBGETFILTERARRAY()) // 0

set filter to nomer==5
go top
? len(LBM_DBGETFILTERARRAY()) //0





Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2734
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.03.13 18:09. Заголовок: Оказывается, в харбо..


Оказывается, в харборе есть такая глобальная настройка:
Set(_SET_FORCEOPT. <lOnOff>)

Для bmdbfcdx она означает, что по set filter будет выполнен цикл по всему файлу, и заполнен массив записей
Если она включена, то фильтр будет устанавливаться медленно (из-за цикла), но работать потом мгновенно. Сейчас получается, он в сервере выключен.
Это очень важный параметр, и автоматически его в сервере устанавливать нельзя. Наверное, надо сделать глобальную настройку в letodb.ini, или отдельную команду для этой настройки
А есть еще и настройка RDDI_FORCEOPT, но в BMDBF она не используется.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2707
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 18:17. Заголовок: Pasha пишет: или от..


Pasha пишет:

 цитата:
или отдельную команду для этой настройки


лучше команду мне кажется давать из клиента или включать(выключать)
на автомате в зависимости от RDD

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2735
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.03.13 18:30. Заголовок: Сейчас это глобальна..


Сейчас это глобальная настройка. Если ее включить, то по любой команде set filter будет выполняться полный перебор всей записей файла, даже без учета set scope
Это может быть медленно, если файл большой. Но так работает BMDBF
Кстати, мне не очень понравился способ, как выполняется цикл
Примерно так:
for i:= 1 to nCount
goto(i)
next

я по своему опыту знаю, что такой цикл выполняется медленнее, чем цикл по skip. Но так в этом rdd у Przemek'a
Кстати, у Miguel Angel Marchuet было по другому. Но в его варианте свои недостатки. У Przemeka все правильно и красиво, только этот момент сделан по другому.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2708
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.13 18:34. Заголовок: Мдя , засада.... ..


Мдя , засада....

И да если установлен фильтр через LBM_DBSETFILTERARRAY() то снять его обычными командами не получается

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 231
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет