|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Столкнулась с такой проблемой. Грид отображает данные Курсора-Адаптера. задумала производить его индексацию по клику заголовка грида. Т.е клик по заголовку выстраивает (индексирует) данные колонки. Из описания узнала, что для буферизованной таблицы не поддерживаются команды: ALTER TABLE, INDEX и т.д. (ИМХО - в событии header1.click gVariable="Field2" oCursor.SelectCmd="SELE Table1.* FROM Table1 ...... ORDER BY &gVariable" oCursor.CursorFill вот такой огород на бумаге нагородила - не нравиться ) Не могу сообразить как свою задумку поэлегантней осуществить? Может кто подскажет? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2013, 07:17 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Индексировать можно, если курсор находится в строковом режиме буферизации (3). Запрет касается только табличного режима буферизации (5). Как следствие, перед индексацией надо перевести курсор в строковый режим, выполнить индексацию и вернуть в табличный режим. Код: sql 1. 2. 3. 4.
Только следует иметь в виду, что переключение режима буферизации автоматически сбрасывает буфер. Поэтому, если Ваш курсор предназначен для редактирования, то лучше проиндексировать все столбцы сразу в момент открытия формы, а при клике на заголовок только переключаться между индексами по Set Order. Если же курсор используется только на просмотр, то нет смысла устанавливать для него 5 режим буферизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2013, 16:46 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Спасибо! Действительно относительно простого Курсора - предварительно создав нужные индексы INDEX ON ... Tag TagName1 INDEX ON ... Tag TagName2 ADDITIVe затем - CURSORSETPROP("Buffering",5) в событии .Header1.Click - SET ORDER TO TagName1 Grid.SetFocus Всё работает! Но пока не совсем представляю чтобы это всё заработало с Курсор-Адаптером (источник Native)? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2013, 01:04 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
ответ ВладимираМ применим и для Курсор-Адаптера (протестила!) в методе Init формы - пока стоит буферизация строк (3-по умолчанию) INDEX on .... Tag Tg1 INDEX on .... Tag Tg2 ADDITIVE ............. CURSORSETPROP("Buffering",5,"MyCursor") - переводим в буферизацию таблицы и Всё работает! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2013, 05:13 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Стоит добавить, что после обновления Курсора-Адаптера (в моём случае это с периодичностью в 20сек) через .CursorFill() индексы исчезают :( приходится буфер переводить на 3 > прописывать Индексы > затем опять буфер в 5 > ну и все настройки Грида по-новой указывать (они тоже слетают все!). Для обывателя это конечно будет незаметно (опция тестовая) всё происходит практически незаметно хотя и ресурсозатратно. Может кто знает метод обновления КАдаптера без потери вышеперечисленных настроек? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2013, 00:51 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Людмila, скорее всего, не поможет, но вдруг? Попробуйте cursorrefresh() ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2013, 04:59 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
ЛюдмilaСтоит добавить, что после обновления Курсора-Адаптера (в моём случае это с периодичностью в 20сек) через .CursorFill() индексы исчезают :( приходится буфер переводить на 3 > прописывать Индексы > затем опять буфер в 5 > ну и все настройки Грида по-новой указывать (они тоже слетают все!). Для обывателя это конечно будет незаметно (опция тестовая) всё происходит практически незаметно хотя и ресурсозатратно. Может кто знает метод обновления КАдаптера без потери вышеперечисленных настроек? Физически, CursorFill() удаляет ранее существовавший курсор и связанные с ними индексы и создает курсор заново. Удаление источника данных Grid автоматически "сносит" все настрйки Grid. На практике, делать подобную операцию нет необходимости. Вполне достаточно выполнить CursorRefresh(). Кроме того, "дергать" курсор по таймеру (раз в 20 секунд) вообще бессмысленно! Представьте себе ситуацию. Пользователь вводит некие данные и тут по таймеру происходит обновление и все то, что он вводил, куда-то пропадает. Или пользователь просматривает данные прокручивая список вниз. Вдруг опять по таймеру происходит обновление и указатель записей улетает в начало. Это крайне раздражающее поведение списка с точки зрения пользователя. С таким списком работать крайне сложно. Если очень уж хочется, то сделайте отдельную кнопку "Обновить". Вот пусть сам пользователь и обновляет данные по мере необходимости. В этой же кнопке и добавьте переиндексацию, если индексы слетели. Чтобы настройки Grid не слетали, необходимо перед данной операцией обнулить свойство RecordSource, а после пересоздания курсора восстановить Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2013, 14:05 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Коллеги спасибо! действительно CursorRefresh() и только он! ВСЕ настройки остаются целыми и всё обновляется! Данное обновление мне критически нужно. Из-за него пришлось и знакомиться с КусорАдаптером. Интервал будет варьироваться от кол-ва подключенных к проге пользователей (только что придумала!) и/или увеличим интервал + кнопка-обновить (отдельное СП ВладимируМ). В моём случае (пока на бумаге): - сетка по умочанию ReadOnly=.T. - вот тогда таймер и крутится, запуская СursorRefresh(); - ну а переход в Grid1.ReadOnly=.F. - останавливает таймер. - в режим редактирование/просмотр переходим по клику на соответстенную кнопку или кнопку Save - (сохраняя всю измененную в сетке информация и Grid1.ReadOnly=.T.) - таймер запустился! Ну и конечно буду работать чтобы при обновлении сетки никаких побочных действий (перескакивание на другую запись и прочего) для пользователя не происходило. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2013, 20:31 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Сделала всё что задумала. Неделю ушло на тестирование и незначительные доработки. Обновление грида с периодичностью 30 сек. происходит практически незаметно, настройки и идексы не слетают! Спасибо за помощь! Двигаюсь дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 11:24 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Уважаемая Людмила! Меня очень заинтересовала Ваша тема. Может найдете время по подробнее на условном примере расписать, что у Вас получилочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 10:32 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Ну, тогда вам придется представить 2-х этажную стомат.поликлинику, куча больных. Начинают они с регистратуры, где их направляют к какому-либо врачу (если обращается впервые - заносят все паспортные данные и заводят-распечатывают мед.карту), естественно всё компьютеризировано. Моментально (работает CA с обновлением 15сек.) врач ведущий прием в своем кабинете видит этого направленного к нему пациента. После его осмотра или лечения заносит МКБ, цель,характер,исход заболевания пр. неодходимые данные в отличае от формы оплаты (Платный-ДМС-ОМС) и/или направляет к др.врачу (на рентген ...). Далее заинтересованные сотрудники (опять же спасибо СА) тут же видят появившуюся инфу. Направляется данный пациент в кассу чтобы оплатить лечение, а Кассир уже видит всех и всё - опять же сп.СА! и так под управлением АС"Стоматология" крутиться терапия, хирургия, ортодонтия, ортопедия и 2 рентген-кабинета. Ну, если вкратце - вот так вот примерно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 11:46 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Спасибо! но меня интересует в деталях основные свойства СА, Формы и Грид - как Вы в конечном итоге решили опубликованную тему ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:50 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Открыла форму, грид, СА - очень много настроек (отличных от по-умолчанию), какие из них основные? Пришла к выводу, что ВСЕ, а именно - всё это работает благодаря совокупности настроек всех элементов. А по теме топика - было поставлено обсуждение индексации в СА, которая раскрыта более чем полностью (сюда и дополнительные свойства и методы СА попали) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 15:17 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Меня и интересует только индексация. Вы же добили все до конца - поделитесь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 16:19 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Смотрим тут 13728278 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 18:22 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
А методе .Grid1.column1.header1.click() SET ORDER TO TagName ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 18:26 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Спасибо за ответ. А что дает Вам использование Курсор-Адаптера (источник Native)?, Другое дело когда данные на MySQL источник - ODBC. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 13:24 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Вы угадали, источник Native, но чтобы организовать описанный тут 13907466 фукционал, как мне показалось, лучше всего справится СА (и справляется!). Не согласны? Да и на будущее - переделав в клиентском приложении не более чем пару строк кода работай с MySQL или ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 14:55 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
Ненароком образовалась небольшая проблемка: СА формируется из трех таблиц, но при редактировании СА изменения вносятся только в 1 и 2-ю (так и задумано) СА.Tables='Tab1,Tab2' при UPdate всё отлично работает, изминения происходят в обоих таблицах-источниках а при Delete и Insert задумывалось удаление и вставка только в 1-ой таблице. я конечно кривенько это обошла Delete СА.Tables='Tab1' Tableupdate(1) CA.CursorRefresh() СА.Tables='Tab1,Tab2' Insert примерно так-же Из описания узнаю, что TableUpdate обновляет каждую строку по отдельности, т.е. если было сделано три изменения - 1-я строка Update 2-я строка Delete 3-я строка Insert то при Tableupdate обновление пройдет в три захода (если я правильно понимаю) так значит в процессе Tableupdate можно (и нужно) управлять свойством СА.Tables - если Update - две таблицы, если Delete or Insert -одна. или я не права и возможно ли это? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2013, 17:22 |
|
Курсор-Адаптер & индексация
|
|||
---|---|---|---|
#18+
из описания: BeforeInsert - перед вставкой и AfterInsert - после BeforeDelete - перед вставкой и AfterDelete - после BeforeUpdate - перед вставкой и AfterUpdate - после протестировала - всё так но когда в эти события вставляю CA.Tables="Tab1" && Insert Delete CA.Tables="Tab1,Tab2" && Update какая-то каша происходит, закономерностей пока не выявила. Сработает вставка, редактирование - нет и пр.варианты ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2013, 20:51 |
|
|
start [/forum/topic.php?fid=41&msg=38100807&tid=1583159]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 268ms |
total: | 424ms |
0 / 0 |