powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Header в Grid
14 сообщений из 14, страница 1 из 1
Header в Grid
    #33128344
Роман Новичек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую VFP8. В проге есть форма на которой расположен грид. в гриде в качестве РекордСоурса используется курсор, в котором отображается информация по определенной позиции (берется из справочника номенклатуры) по всем торговым точкам, т.е. при переходе по справочнику номенклатуры каждый раз срабатывает селект и отображается в гриде. Перед отображением я грид каждый раз перестраиваю, т.е. определяю количество колумнов, рекордсоурс и подписываю Header каждой колонки. Так вот, все замечательно до определенного момента времени, когда возникает ошибка, что объект Header не найден. Что это такое и с чем его надо кушать, т.е. как побороть.
Пример:
WITH THISFORM.PFrsp.PgMain.Grid1
SELECT a.*, b.choice FROM distr_goods a, all_magaz b WHERE
isnd=inventtable.isnd AND a.pol=b.kag ;
ORDER BY a.numRec INTO CURSOR tmp_distr READWRITE

.RECORDSOURCE='tmp_distr'
.DELETEMARK=.F.
.COLUMNCOUNT=3


.Column1.Header1.CAPTION='Магазин' //вот здесь она и ругается на Header
.Column1.Header1.ALIGNMENT=2
.Column1.Header1.FONTBOLD=.T.
.Column1.CONTROLSOURCE='n_kag'
.Column1.FONTBOLD=.T.
.Column1.FONTSIZE=10
.Column1.ALIGNMENT=0
.Column1.WIDTH=100

.Column2.Header1.CAPTION='Распред.'
.Column2.Header1.ALIGNMENT=2
.Column2.Header1.FONTBOLD=.T.
.Column2.CONTROLSOURCE='distrib'
.Column2.ALIGNMENT=2
.Column2.WIDTH=60

.Column3.Header1.CAPTION='Ост.'
.Column3.Header1.ALIGNMENT=2
.Column3.Header1.FONTBOLD=.T.
.Column3.CONTROLSOURCE='Qty'
.Column3.Text1.ENABLED=.F.
.Column3.Text1.DISABLEDBACKCOLOR=RGB(255,255,255)
.Column3.Text1.DISABLEDFORECOLOR=RGB(0,0,0)
.Column3.ALIGNMENT=1
.Column3.WIDTH=40
ENDWITH
...
Рейтинг: 0 / 0
Header в Grid
    #33128367
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Header в Grid
    #33128369
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тихий ужас
я бы рискнул сделать так
WITH THISFORM.PFrsp.PgMain.Grid1
.RECORDSOURCE=''
SELECT a.*, b.choice FROM distr_goods a, all_magaz b WHERE
isnd=inventtable.isnd AND a.pol=b.kag ;
ORDER BY a.numRec INTO CURSOR tmp_distr READWRITE

.RECORDSOURCE='tmp_distr'
.Column1.CONTROLSOURCE='n_kag'
.Column2.CONTROLSOURCE='distrib'
.Column3.CONTROLSOURCE='Qty'
ENDWITH

т.е. при переходе по справочнику номенклатуры каждый раз срабатывает селект и отображается в гриде
ужас в двойне !
...
Рейтинг: 0 / 0
Header в Grid
    #33130170
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi leaf!

т.е. при переходе по справочнику номенклатуры каждый раз срабатывает селект и отображается в гриде
ужас в двойне !
Вовсе нет. Если это подчинённый грид, то вполне естественно что навигация по курсору верхнего уровня предполагает перезапрос нижнего уровня. Другое дело что это можно сделать и на LocalView - REQUERY() не разрушает грид. Но можно и так - позаботившись о сохранении грида конечно.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Header в Grid
    #33130570
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
угу
тока обычно при правильной организации то что стоит под гридом это курсор(таблица) небольшого размера индексированный естественно
и хватит просто фильтра
а у вас на каждое движение мыши requery ну ну ....
да еще если перестройку таблицы организовать это супер просто
хотя бывает что по другому низя, но честно говоря не сталкивался пока не сталкивался
но в каждом случае так как Вы говорите я бы не стал
Но мы же с вами разные это уже выяснено
хотя если я сменю технологию с одного стула на несколько может может я по другому запою не знаю
хотя если подумать то и так можно но мне пока не нравиться
...
Рейтинг: 0 / 0
Header в Grid
    #33132411
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi leaf!

В Detail таблицах ПО ОПРЕДЕЛЕНИЮ записей больше чем в Master. Скажем 100 накладных по 10 строк - уже 1000 строк в Detail. И чем дальше, тем хуже. SET FILTER в гриде до VFP9 работает плохо и это факт. Использовать "тут SET FILTER а там LV" - оно конечно можно, но IMHO запаришься поддерживать 2 технологии куда как проще ВЕЗДЕ по одинаковой схеме работать. Тем более что у LV/запроса практически нету существенных (непреодолимых) недостатков.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Header в Grid
    #33132510
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovSET FILTER в гриде до VFP9 работает плохо и это факт.Игорь, прости мое ignorance, а конкретнее, что в плане SET FILTER изменилось в VFP9, что он стал работать хорошо? И каким образом этого достигли? И как можно переформулировать с учетом нового в этом вопросе правила использования SET FILTER?

Правила, которых я придерживался ранее, было очень простыми:
1) стараться не делать SET FILTER на таблицы вообще, ну в крайнем случае на короткие, длиной записей до 2000, не более.
2) допускается SET FILTER в выборках, например, в курсоры, но и здесь лучше сначала построить индекс.
...
Рейтинг: 0 / 0
Header в Grid
    #33132743
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Igor Korolyov
ну да оно конечно ересь
тока почему-то работает и хорошо работает начиная с шестой версии
и это при том что в таблице деталей более 100 000 записей исходной конечно
так что оно всё относительно весь вопрос как подойти
насколько я помню вариант с перевыборкой каждый раз в курсор был хуже
правда это было еще в шестерке с тех пор я не тестировал на скорость но если Вы говорите, что ситуация стала лучше так оно и хорошо
never say never )
не будем спорить мы разные
...
Рейтинг: 0 / 0
Header в Grid
    #33132990
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urri Igor KorolyovSET FILTER в гриде до VFP9 работает плохо и это факт.Игорь, прости мое ignorance, а конкретнее, что в плане SET FILTER изменилось в VFP9, что он стал работать хорошо? И каким образом этого достигли? И как можно переформулировать с учетом нового в этом вопросе правила использования SET FILTER?


Позволю себе ответить цитатой из хелпа

авторSpecifies whether the Grid control uses Rushmore optimization. Read/write at design time and run time.


Grid.Optimize [ = lExpr]


Return Value
lExpr


Logical expression specifying if the Grid control uses Rushmore optimization.
Setting Description
True (.T.)
The Grid control uses Rushmore optimization.

False (.F.)
(Default) The Grid control does not use Rushmore optimization.


Remarks
Applies To: Grid Control

When Rushmore Optimization is enabled by setting the Optimize property to True (.T.), the set of matched records is refreshed during the following operations:

When the Grid is initially populated


When the Grid is activated


When the Grid Refresh Method is called


Note:
As with any data manipulation command that can impact Rushmore optimization, you should be aware that actions taken against the Grid's data source could result in behavior that differs from when the Optimize property is set to False (.F.). For example, Rushmore optimization might trigger an implicit TABLEUPDATE to occur for a row buffered cursor. And an error may or may not occur depending on whether the record is blank or whether the cursor is a view.
...
Рейтинг: 0 / 0
Header в Grid
    #33133266
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leafну да оно конечно ересь
тока почему-то работает и хорошо работает начиная с шестой версии
и это при том что в таблице деталей более 100 000 записей исходной конечно
так что оно всё относительно весь вопрос как подойти
насколько я помню вариант с перевыборкой каждый раз в курсор был хуже
правда это было еще в шестерке с тех пор я не тестировал на скорость но если Вы говорите, что ситуация стала лучше так оно и хорошо
never say never )
не будем спорить мы разные

Запусти тест отсюда http://]http://forum.foxclub.ru/read.php?f=5&i=89610&t=89181 и посмотри на результат, желательно это исполнить перед обедом, поскольку успеешь ещё и поесть ;))
...
Рейтинг: 0 / 0
Header в Grid
    #33133324
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо конечно но смотреть не буду
я конечно извеняюсь но как говориться с дуру можно всё что хочешь сломать у меня программа реально работала а возможно и работает еще я просто не в курсе
если бы у меня под гридом был миллион записей я бы вообще задумался как задачу упростить тут хоть фильтры хоть что ставь всё равно тяжело будет
Повторю 100 000 было в исходной таблице а под гридом было реально меньше
При изменении глобальных условий была перевыборка
Так что я вас обманул это был не чистый фильтр а комбинация методов
И это реально лучше хотя конечно не всегда возможно
Хотя вот имено процес перевыборки был длителен и если каждый раз при нажатии на стрелку ....
Короче я бы сдесь не писал
...
Рейтинг: 0 / 0
Header в Grid
    #33135035
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Urri!

> Правила, которых я придерживался ранее, было очень простыми:
> 1) стараться не делать SET FILTER на таблицы вообще, ну в крайнем случае на короткие, длиной записей до 2000, не более.

Дело не в SET FILTER (а равно и SET RELATION) как таковом, а в их взаимодействии с гридом - согласись, что гриду дабы заполнить видимые строчки нужно ходить по таблице (пуская это и не видно никак нам - это глубоко "внутри" фокса зашито, и это конечно не влияет напрямую на указатель записи и т.п.) частично это "проявляется" если прописать свою UDF в Dynamic* свойстве колонки грида. И вплоть до VFP9 это "хождение" было неоптимизированным (по крайней мере не полностью оптимизированным). А что значит вынимать из таблицы по 10-20 записей на каждый рефреш грида?

> 2) допускается SET FILTER в выборках, например, в курсоры, но и здесь лучше сначала построить индекс.

Повторюсь - важен не тип курсора (в смысле курсор это или таблица) а количество записей. На 100-1000 записях и прямой перебор весьма быстр (тем боле для курсора, где не нужно ПОСТОЯННО с диска считывание проводить - всё уже в памяти, и "извне" изменено быть не может).

НО если речь НЕ идёт о гриде - т.е. SCAN FOR vs SET FILTER+SCAN и т.п. - то тут никаких проблем нету - главное чтобы выражение было оптимизируемым :) Обычно это 1 проход (возможно даже неполный!) и работает это весьма быстро (не медленнее собственно SQL выборки сравнимого объёма).

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Header в Grid
    #33136353
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, про SCAN я и не говорил, там что SCAN FOR, что SET FILTER + SCAN - примерно одинаково. Нет, дело именно в BROWSE / GRID. Радует, что можно добавить "было" (но вряд ли мой подход резко изменится так, что я сразу и всесторонне начну использовать SET FILTER). ;-)))
...
Рейтинг: 0 / 0
Header в Grid
    #33141656
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Urri!

Кстати говоря BROWSE то как раз был "оптимизируемым" - не знаю всегда или нет, но даже в 6-ке быстро всё бегало - правда использовать BROWSE в VFP программе это IMHO моветон...

> вряд ли мой подход резко изменится

Аналогично :)

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Header в Grid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]