powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор-Адаптер & индексация
20 сообщений из 20, страница 1 из 1
Курсор-Адаптер & индексация
    #38100412
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулась с такой проблемой. Грид отображает данные Курсора-Адаптера. задумала производить его индексацию по клику заголовка грида. Т.е клик по заголовку выстраивает (индексирует) данные колонки.
Из описания узнала, что для буферизованной таблицы не поддерживаются команды: ALTER TABLE, INDEX и т.д.
(ИМХО - в событии header1.click
gVariable="Field2"
oCursor.SelectCmd="SELE Table1.* FROM Table1 ...... ORDER BY &gVariable"
oCursor.CursorFill
вот такой огород на бумаге нагородила - не нравиться )
Не могу сообразить как свою задумку поэлегантней осуществить? Может кто подскажет?
...
Рейтинг: 0 / 0
Курсор-Адаптер & индексация
    #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
Курсор-Адаптер & индексация
    #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
Курсор-Адаптер & индексация
    #38100839
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ответ ВладимираМ применим и для Курсор-Адаптера (протестила!)
в методе Init формы - пока стоит буферизация строк (3-по умолчанию)
INDEX on .... Tag Tg1
INDEX on .... Tag Tg2 ADDITIVE
.............
CURSORSETPROP("Buffering",5,"MyCursor") - переводим в буферизацию таблицы

и Всё работает!
...
Рейтинг: 0 / 0
Курсор-Адаптер & индексация
    #38102730
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоит добавить, что после обновления Курсора-Адаптера (в моём случае это с периодичностью в 20сек) через .CursorFill() индексы исчезают :(
приходится буфер переводить на 3 > прописывать Индексы > затем опять буфер в 5 > ну и все настройки Грида по-новой указывать (они тоже слетают все!). Для обывателя это конечно будет незаметно (опция тестовая) всё происходит практически незаметно хотя и ресурсозатратно.
Может кто знает метод обновления КАдаптера без потери вышеперечисленных настроек?
...
Рейтинг: 0 / 0
Курсор-Адаптер & индексация
    #38102784
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila, скорее всего, не поможет, но вдруг? Попробуйте cursorrefresh()
...
Рейтинг: 0 / 0
Курсор-Адаптер & индексация
    #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
Курсор-Адаптер & индексация
    #38104068
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги спасибо! действительно CursorRefresh() и только он!
ВСЕ настройки остаются целыми и всё обновляется!

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

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

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


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