|
|
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
Использую 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2005, 11:09:49 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
тихий ужас я бы рискнул сделать так 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 т.е. при переходе по справочнику номенклатуры каждый раз срабатывает селект и отображается в гриде ужас в двойне ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2005, 11:15:46 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
Hi leaf! т.е. при переходе по справочнику номенклатуры каждый раз срабатывает селект и отображается в гриде ужас в двойне ! Вовсе нет. Если это подчинённый грид, то вполне естественно что навигация по курсору верхнего уровня предполагает перезапрос нижнего уровня. Другое дело что это можно сделать и на LocalView - REQUERY() не разрушает грид. Но можно и так - позаботившись о сохранении грида конечно. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2005, 03:54:46 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
угу тока обычно при правильной организации то что стоит под гридом это курсор(таблица) небольшого размера индексированный естественно и хватит просто фильтра а у вас на каждое движение мыши requery ну ну .... да еще если перестройку таблицы организовать это супер просто хотя бывает что по другому низя, но честно говоря не сталкивался пока не сталкивался но в каждом случае так как Вы говорите я бы не стал Но мы же с вами разные это уже выяснено хотя если я сменю технологию с одного стула на несколько может может я по другому запою не знаю хотя если подумать то и так можно но мне пока не нравиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2005, 10:51:32 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
Hi leaf! В Detail таблицах ПО ОПРЕДЕЛЕНИЮ записей больше чем в Master. Скажем 100 накладных по 10 строк - уже 1000 строк в Detail. И чем дальше, тем хуже. SET FILTER в гриде до VFP9 работает плохо и это факт. Использовать "тут SET FILTER а там LV" - оно конечно можно, но IMHO запаришься поддерживать 2 технологии куда как проще ВЕЗДЕ по одинаковой схеме работать. Тем более что у LV/запроса практически нету существенных (непреодолимых) недостатков. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 02:29:20 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
Igor KorolyovSET FILTER в гриде до VFP9 работает плохо и это факт.Игорь, прости мое ignorance, а конкретнее, что в плане SET FILTER изменилось в VFP9, что он стал работать хорошо? И каким образом этого достигли? И как можно переформулировать с учетом нового в этом вопросе правила использования SET FILTER? Правила, которых я придерживался ранее, было очень простыми: 1) стараться не делать SET FILTER на таблицы вообще, ну в крайнем случае на короткие, длиной записей до 2000, не более. 2) допускается SET FILTER в выборках, например, в курсоры, но и здесь лучше сначала построить индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 08:05:38 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
2Igor Korolyov ну да оно конечно ересь тока почему-то работает и хорошо работает начиная с шестой версии и это при том что в таблице деталей более 100 000 записей исходной конечно так что оно всё относительно весь вопрос как подойти насколько я помню вариант с перевыборкой каждый раз в курсор был хуже правда это было еще в шестерке с тех пор я не тестировал на скорость но если Вы говорите, что ситуация стала лучше так оно и хорошо never say never ) не будем спорить мы разные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 10:33:47 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 11:55:47 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
leafну да оно конечно ересь тока почему-то работает и хорошо работает начиная с шестой версии и это при том что в таблице деталей более 100 000 записей исходной конечно так что оно всё относительно весь вопрос как подойти насколько я помню вариант с перевыборкой каждый раз в курсор был хуже правда это было еще в шестерке с тех пор я не тестировал на скорость но если Вы говорите, что ситуация стала лучше так оно и хорошо never say never ) не будем спорить мы разные Запусти тест отсюда http://]http://forum.foxclub.ru/read.php?f=5&i=89610&t=89181 и посмотри на результат, желательно это исполнить перед обедом, поскольку успеешь ещё и поесть ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:05:36 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
спасибо конечно но смотреть не буду я конечно извеняюсь но как говориться с дуру можно всё что хочешь сломать у меня программа реально работала а возможно и работает еще я просто не в курсе если бы у меня под гридом был миллион записей я бы вообще задумался как задачу упростить тут хоть фильтры хоть что ставь всё равно тяжело будет Повторю 100 000 было в исходной таблице а под гридом было реально меньше При изменении глобальных условий была перевыборка Так что я вас обманул это был не чистый фильтр а комбинация методов И это реально лучше хотя конечно не всегда возможно Хотя вот имено процес перевыборки был длителен и если каждый раз при нажатии на стрелку .... Короче я бы сдесь не писал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:21:24 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2005, 23:46:39 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
Ну, про SCAN я и не говорил, там что SCAN FOR, что SET FILTER + SCAN - примерно одинаково. Нет, дело именно в BROWSE / GRID. Радует, что можно добавить "было" (но вряд ли мой подход резко изменится так, что я сразу и всесторонне начну использовать SET FILTER). ;-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2005, 14:14:21 |
|
||
|
Header в Grid
|
|||
|---|---|---|---|
|
#18+
Hi Urri! Кстати говоря BROWSE то как раз был "оптимизируемым" - не знаю всегда или нет, но даже в 6-ке быстро всё бегало - правда использовать BROWSE в VFP программе это IMHO моветон... > вряд ли мой подход резко изменится Аналогично :) Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 00:57:58 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=315&tid=1593965]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 391ms |

| 0 / 0 |
