Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор-Адаптер & индексация / 20 сообщений из 20, страница 1 из 1
05.01.2013, 07:17
    #38100412
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Столкнулась с такой проблемой. Грид отображает данные Курсора-Адаптера. задумала производить его индексацию по клику заголовка грида. Т.е клик по заголовку выстраивает (индексирует) данные колонки.
Из описания узнала, что для буферизованной таблицы не поддерживаются команды: ALTER TABLE, INDEX и т.д.
(ИМХО - в событии header1.click
gVariable="Field2"
oCursor.SelectCmd="SELE Table1.* FROM Table1 ...... ORDER BY &gVariable"
oCursor.CursorFill
вот такой огород на бумаге нагородила - не нравиться )
Не могу сообразить как свою задумку поэлегантней осуществить? Может кто подскажет?
...
Рейтинг: 0 / 0
05.01.2013, 16:46
    #38100596
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Индексировать можно, если курсор находится в строковом режиме буферизации (3). Запрет касается только табличного режима буферизации (5). Как следствие, перед индексацией надо перевести курсор в строковый режим, выполнить индексацию и вернуть в табличный режим.

Код: sql
1.
2.
3.
4.
select MyCursor
CursorSetProp('Buffering',3,'MyCursor')
index on ... tag ...
CursorSetProp('Buffering',5,'MyCursor')


Только следует иметь в виду, что переключение режима буферизации автоматически сбрасывает буфер. Поэтому, если Ваш курсор предназначен для редактирования, то лучше проиндексировать все столбцы сразу в момент открытия формы, а при клике на заголовок только переключаться между индексами по Set Order. Если же курсор используется только на просмотр, то нет смысла устанавливать для него 5 режим буферизации.
...
Рейтинг: 0 / 0
06.01.2013, 01:04
    #38100807
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Спасибо!
Действительно относительно простого Курсора - предварительно создав нужные индексы
INDEX ON ... Tag TagName1
INDEX ON ... Tag TagName2 ADDITIVe
затем - CURSORSETPROP("Buffering",5)
в событии .Header1.Click -
SET ORDER TO TagName1
Grid.SetFocus
Всё работает!
Но пока не совсем представляю чтобы это всё заработало с Курсор-Адаптером (источник Native)?
...
Рейтинг: 0 / 0
06.01.2013, 05:13
    #38100839
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
ответ ВладимираМ применим и для Курсор-Адаптера (протестила!)
в методе Init формы - пока стоит буферизация строк (3-по умолчанию)
INDEX on .... Tag Tg1
INDEX on .... Tag Tg2 ADDITIVE
.............
CURSORSETPROP("Buffering",5,"MyCursor") - переводим в буферизацию таблицы

и Всё работает!
...
Рейтинг: 0 / 0
09.01.2013, 00:51
    #38102730
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Стоит добавить, что после обновления Курсора-Адаптера (в моём случае это с периодичностью в 20сек) через .CursorFill() индексы исчезают :(
приходится буфер переводить на 3 > прописывать Индексы > затем опять буфер в 5 > ну и все настройки Грида по-новой указывать (они тоже слетают все!). Для обывателя это конечно будет незаметно (опция тестовая) всё происходит практически незаметно хотя и ресурсозатратно.
Может кто знает метод обновления КАдаптера без потери вышеперечисленных настроек?
...
Рейтинг: 0 / 0
09.01.2013, 04:59
    #38102784
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Людмila, скорее всего, не поможет, но вдруг? Попробуйте cursorrefresh()
...
Рейтинг: 0 / 0
09.01.2013, 14:05
    #38103369
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
ЛюдмilaСтоит добавить, что после обновления Курсора-Адаптера (в моём случае это с периодичностью в 20сек) через .CursorFill() индексы исчезают :(
приходится буфер переводить на 3 > прописывать Индексы > затем опять буфер в 5 > ну и все настройки Грида по-новой указывать (они тоже слетают все!). Для обывателя это конечно будет незаметно (опция тестовая) всё происходит практически незаметно хотя и ресурсозатратно.
Может кто знает метод обновления КАдаптера без потери вышеперечисленных настроек?
Физически, CursorFill() удаляет ранее существовавший курсор и связанные с ними индексы и создает курсор заново. Удаление источника данных Grid автоматически "сносит" все настрйки Grid. На практике, делать подобную операцию нет необходимости. Вполне достаточно выполнить CursorRefresh().

Кроме того, "дергать" курсор по таймеру (раз в 20 секунд) вообще бессмысленно!

Представьте себе ситуацию. Пользователь вводит некие данные и тут по таймеру происходит обновление и все то, что он вводил, куда-то пропадает. Или пользователь просматривает данные прокручивая список вниз. Вдруг опять по таймеру происходит обновление и указатель записей улетает в начало. Это крайне раздражающее поведение списка с точки зрения пользователя. С таким списком работать крайне сложно.

Если очень уж хочется, то сделайте отдельную кнопку "Обновить". Вот пусть сам пользователь и обновляет данные по мере необходимости. В этой же кнопке и добавьте переиндексацию, если индексы слетели.

Чтобы настройки Grid не слетали, необходимо перед данной операцией обнулить свойство RecordSource, а после пересоздания курсора восстановить

Код: sql
1.
2.
3.
4.
5.
6.
ThisForm.Grid.RecordSource = ''
ca.CursorFill()
ThisForm.Grid.RecordSource = ca.Alias
ThisForm.Grid.Column1.ControlSource = ...
ThisForm.Grid.Column2.ControlSource = ...
ThisForm.Grid.Column3.ControlSource = ...
...
Рейтинг: 0 / 0
09.01.2013, 20:31
    #38104068
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Коллеги спасибо! действительно CursorRefresh() и только он!
ВСЕ настройки остаются целыми и всё обновляется!

Данное обновление мне критически нужно. Из-за него пришлось и знакомиться с КусорАдаптером. Интервал будет варьироваться от кол-ва подключенных к проге пользователей (только что придумала!) и/или увеличим интервал + кнопка-обновить (отдельное СП ВладимируМ).
В моём случае (пока на бумаге):
- сетка по умочанию ReadOnly=.T. - вот тогда таймер и крутится, запуская СursorRefresh();
- ну а переход в Grid1.ReadOnly=.F. - останавливает таймер.
- в режим редактирование/просмотр переходим по клику на соответстенную кнопку или кнопку Save - (сохраняя всю измененную в сетке информация и Grid1.ReadOnly=.T.) - таймер запустился!

Ну и конечно буду работать чтобы при обновлении сетки никаких побочных действий (перескакивание на другую запись и прочего) для пользователя не происходило.
...
Рейтинг: 0 / 0
02.02.2013, 11:24
    #38134648
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Сделала всё что задумала. Неделю ушло на тестирование и незначительные доработки.
Обновление грида с периодичностью 30 сек. происходит практически незаметно, настройки и идексы не слетают!
Спасибо за помощь!
Двигаюсь дальше.
...
Рейтинг: 0 / 0
11.02.2013, 10:32
    #38145604
VIVA_CA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Уважаемая Людмила! Меня очень заинтересовала Ваша тема. Может найдете время по подробнее на условном примере
расписать, что у Вас получилочь.
...
Рейтинг: 0 / 0
11.02.2013, 11:46
    #38145711
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Ну, тогда вам придется представить 2-х этажную стомат.поликлинику, куча больных.
Начинают они с регистратуры, где их направляют к какому-либо врачу (если обращается впервые - заносят все паспортные данные и заводят-распечатывают мед.карту), естественно всё компьютеризировано. Моментально (работает CA с обновлением 15сек.) врач ведущий прием в своем кабинете видит этого направленного к нему пациента. После его осмотра или лечения заносит МКБ, цель,характер,исход заболевания пр. неодходимые данные в отличае от формы оплаты (Платный-ДМС-ОМС) и/или направляет к др.врачу (на рентген ...). Далее заинтересованные сотрудники (опять же спасибо СА) тут же видят появившуюся инфу. Направляется данный пациент в кассу чтобы оплатить лечение, а Кассир уже видит всех и всё - опять же сп.СА!
и так под управлением АС"Стоматология" крутиться терапия, хирургия, ортодонтия, ортопедия и 2 рентген-кабинета.
Ну, если вкратце - вот так вот примерно.
...
Рейтинг: 0 / 0
11.02.2013, 12:50
    #38145860
VIVA_CA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Спасибо! но меня интересует в деталях основные свойства СА, Формы и Грид - как Вы в конечном итоге решили опубликованную
тему
...
Рейтинг: 0 / 0
11.02.2013, 15:17
    #38146205
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Открыла форму, грид, СА - очень много настроек (отличных от по-умолчанию), какие из них основные?
Пришла к выводу, что ВСЕ, а именно - всё это работает благодаря совокупности настроек всех элементов.

А по теме топика - было поставлено обсуждение индексации в СА, которая раскрыта более чем полностью (сюда и дополнительные свойства и методы СА попали)
...
Рейтинг: 0 / 0
11.02.2013, 16:19
    #38146357
VIVA_CA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Меня и интересует только индексация. Вы же добили все до конца - поделитесь
...
Рейтинг: 0 / 0
11.02.2013, 18:22
    #38146653
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Смотрим тут 13728278
...
Рейтинг: 0 / 0
11.02.2013, 18:26
    #38146660
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
А методе .Grid1.column1.header1.click()
SET ORDER TO TagName
...
Рейтинг: 0 / 0
12.02.2013, 13:24
    #38147621
VIVA_CA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Спасибо за ответ. А что дает Вам использование Курсор-Адаптера (источник Native)?, Другое дело когда данные
на MySQL источник - ODBC.
...
Рейтинг: 0 / 0
12.02.2013, 14:55
    #38147843
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Вы угадали, источник Native, но чтобы организовать описанный тут 13907466 фукционал, как мне показалось, лучше всего справится СА (и справляется!). Не согласны?
Да и на будущее - переделав в клиентском приложении не более чем пару строк кода работай с MySQL или ...
...
Рейтинг: 0 / 0
17.02.2013, 17:22
    #38154693
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
Ненароком образовалась небольшая проблемка:
СА формируется из трех таблиц, но при редактировании СА изменения вносятся только в 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 -одна.
или я не права и возможно ли это?
...
Рейтинг: 0 / 0
17.02.2013, 20:51
    #38154852
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор-Адаптер & индексация
из описания:
BeforeInsert - перед вставкой и AfterInsert - после
BeforeDelete - перед вставкой и AfterDelete - после
BeforeUpdate - перед вставкой и AfterUpdate - после
протестировала - всё так
но когда в эти события вставляю
CA.Tables="Tab1" && Insert Delete
CA.Tables="Tab1,Tab2" && Update
какая-то каша происходит, закономерностей пока не выявила. Сработает вставка, редактирование - нет и пр.варианты
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор-Адаптер & индексация / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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