powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / буферизация и индексы
16 сообщений из 16, страница 1 из 1
буферизация и индексы
    #33099738
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я недавно начала пользоваться представлениями и предполагала, что все будет легко и красиво.
Но у меня такая ситуация. У меня в форме есть PageFrame, вкладки которого содержат гриды с разными Local View. Хотелось, чтобы пользователь наигрался с гридами, а потом нажал кнопку "Сохранить" на форме и оба представления "зафиксировались" в таблицах (по tableupdate(.t.)).
Но мне еще хотелось бы использовать сортировки записей в гридах с помощью индексов.
Я поступаю следующим образом:
1. Открываю представления.
2. Создаю индексы (Index on ... ).
3. Устанавливаю 5-ю буферизацию представлений.
После редактирования представлений:
1. Сделать TableUpdate(.t.) представлений.
2. Закрыть представления.

Я правильно делаю? Что-то у меня не получается. Я на правильном пути? Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
буферизация и индексы
    #33099846
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общая стратегия правильная, только есть некоторые тонкости, при индексировании Local View и сбросе изменений в исходные таблицы.

Сброс изменений в нескольких записях (табличная буферизация) необходимо окружать транзакцией. Почему? Уже объяснял. Возможно не тебе, но в форуме есть.

Внутри транзакции не может быть НЕ структурных индексов. Вызовет отказ открытия транзакции.

Если кроме Local View наложена буферизация на таблицы-источники, то после TableUpdate() на сам Local View надо будет сделать TableUpdate() и на таблицы-источники.

С индексацией View есть "заморочки", связанные с обновлением View по команде Requery("MyView"). Последний пункт в твоей "программе". Надо не закрывать View, а обновлять его.
...
Рейтинг: 0 / 0
буферизация и индексы
    #33100532
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ВладимирМ!

Транзакция точно нужна если данные логически связаны - из описания же
задачи это не вытекает - так что вполне возможно что именно тут транзакция и
не нужна...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
буферизация и индексы
    #33100584
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, k_sv !
Я поступаю следующим образом:
1. Открываю представления.
2. Создаю индексы (Index on ... ).
3. Устанавливаю 5-ю буферизацию представлений.
После редактирования представлений:
1. Сделать TableUpdate(.t.) представлений.
2. Закрыть представления.

После редактирования представлений:
1. Сделать TableUpdate(.t.) представлений.
1.1. Я бы сделал здесь REINDEX для LV. Чтобы далее пользователь наигрался с гридами
...
Рейтинг: 0 / 0
буферизация и индексы
    #33104622
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо за советы.
Транзакцию я действительно использую.
1. Я думаю, моя ошибка была в том, что я индексы создавала неструктурные:
INDEX ON eExpression TAG TagName OF CDXFileName. Переделала на структурные: INDEX ON eExpression TAG TagName.
Не судите строго.

2. ВладимирМС индексацией View есть "заморочки", связанные с обновлением View по команде Requery("MyView"). Последний пункт в твоей "программе". Надо не закрывать View, а обновлять его.
Это однозначно? Тут мне переделывать много придется.

3. И вообще, в конце концов у меня получилось "приехали":
на попытку открытия моих представлений и таблиц - ошибка:
Index does not match the table. Delete the index file and re-create the index. (114)

Я балдею...
Почему это произошло?
...
Рейтинг: 0 / 0
буферизация и индексы
    #33104727
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ничего страшного :)
Делай, как пишут - удаляй CDX, создавай заново. Где-то видимо были изменения с таблицей без индекса (с индексом без таблицы)...
А вообще файлы CDX - имеют такое свойство "пухнуть" при каждом выполнении команды INDEX ON... TAG... - нужно переиодически их "чистить", а проще (если данных - не слишком уж много) - совсем удалять после завершения работы (перед началом), когда еще таблицы, с которыми они связаны, не открыты, и потом создавать заново. На больших таблицах это будет слегка тормозить, но при входе (выходе) это терпимо.
Недавно вот с удивлением наткнулся на такую вещь (в чужой программе ;) - 20-30 МБ(!!!) индексы CDX у 2-3-х полупустых DBF-ок размером каждая всего по 200-700 кБ(!!!) - результат такого многолетнего "накопления"

А все остальное, что тут выше говорили - это более, чем однозначно! ;)
...
Рейтинг: 0 / 0
буферизация и индексы
    #33104783
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, меня все-таки не устраивает не закрывать передставление. Допустим, я хочу одно из представлений использовать и в другом месте (другой пункт меню, другая форма). У меня больше 20 таблиц. Если так дело пойдет, мне их что, придется все открытыми держать? Мне как-то дико.
Ну, а если при выходе из формы я могу закрыть представление, и открыть его в другой форме, почему бы мне не закрывать его и здесь, после того, как "пользователь наигрался с гридами". :))
...
Рейтинг: 0 / 0
буферизация и индексы
    #33104822
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Crispy А вообще файлы CDX - имеют такое свойство "пухнуть" при каждом выполнении команды INDEX ON... TAG... - нужно переиодически их "чистить", а проще (если данных - не слишком уж много) - совсем удалять после завершения работы (перед началом), когда еще таблицы, с которыми они связаны, не открыты, и потом создавать заново.
То есть мне надо написать програмку, которая удаляет индексы всех моих таблиц и создает новые?
Если не сложно, набросайте, пожалуйста, общую схемку.
После сообщения Index does not match the table. Delete the index file and re-create the index. (114) я и удалила cdx файл. Потребовало Validate Database... Жуть.
...
Рейтинг: 0 / 0
буферизация и индексы
    #33106207
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Crispy!

> А вообще файлы CDX - имеют такое свойство "пухнуть" при каждом выполнении команды INDEX ON... TAG...

В нормально написанной системе просто НЕТ этих команд и ничего нигде не пухнет. Единственное допустимое для них место - это отдельный административный модуль - где помимо переиндексации может дыть Pack, архивирование данных, восстановление из архивов и т.п. И я бы не советовал делать этот модуль частью основной программы.

> а проще (если данных - не слишком уж много) - совсем удалять после завершения работы (перед началом), когда еще таблицы, с которыми они связаны, не открыты, и потом создавать заново

Не ну для локальной задачи, написанной в FPD в "классическом" стиле или в каком-нить Clipper это самое то, но для VFP так поступать - это большое свинство :( В общем не стоит...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
буферизация и индексы
    #33106208
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi k_sv!

> То есть мне надо написать програмку, которая удаляет индексы всех моих таблиц и создает новые?

Не надо - от этого у тебя распухнет dbc до неимоверных размеров.
Если в программе нету INDEX ON для основных таблиц (а их в нормальной программе быть не должно по определению!) то cdx не "пухнет" - там достаточно продвинутые алгоритмы распределения...

> Если не сложно, набросайте, пожалуйста, общую схемку.

DELETE TAG ALL - но это разрушит имеющиеся в dbc relationships (они конечно не очень то и нужны обычно, но тем не менее), и в последующем увеличит размер dbc - т.к. там хранится инфа о индексах, а записи ессно прои DELETE TAG удаляются как и из других dbf - т.е. просто "помечаются" как удалённые...

> После сообщения Index does not match the table. Delete the index file and re-create the index. (114) я и удалила cdx файл. Потребовало Validate Database... Жуть.

По-моему всё нормально - у тебя возникла рассинхронизация - в cdx написано одно (один перечень тегов), а в dbc написано другое - вот и приходиться "лечить".

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
буферизация и индексы
    #33106458
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, Igor Korolyov !

В общем-то по сути все, конечно, верно :\
Если речь идет о DBC - там с CDX приходится, конечно, обращаться по-другому - более замудрено, слишком строгий там везде контроль...

Но, если таблицы свободные, и в результате разных причин (моргание света, случайные, хаотичные нажатия кнопок, пролили чай на клавиатуру - пришлось срочно выключиться :) ...) индексы CDX разрушаются, не будешь же каждый раз создавать их вручную? - для таких случаяев, по-моему, не грех попросту удалять их, и при входе создавать заново.
Само собой - речь может идти только о какой-то небольшой задаче. Ведь там же заводить DBC, уж наверно все-таки не имеет смысла? (не настолько в них много пользы - для малых задач! - чтобы компенсировать излишнюю сложность - можно в data environment навставлять и свободных таблиц - сразу все намного упрощается)
...
Рейтинг: 0 / 0
буферизация и индексы
    #33107104
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо за поддержку.
Команды типа INDEX ON для основных таблиц я не делаю (религия не позволяет :) ). А в dbc relationships не использую. Это моя первая задача на VFP, решила не рисковать. И так много приколов.
Я уже не помню, каким образом мне удалось добиться разрушения индексов, а когда-то и базу данных не удалось открыть вообще (пришлось восстанавливать старую версию).
Из всего вышесказанного я решила, что для таких ситуаций мне нужно:
1. Иметь програмку, которая сносит индексы во всех таблицах (DELETE TAG ALL по каждой таблице) и заново делает INDEX ON eExpression TAG TagName OF CDXFileName.
2. Предлагать восстанавливать резервную копию данных.
Интересно, как часто будут такие ситуации?
...
Рейтинг: 0 / 0
буферизация и индексы
    #33107273
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для начала, в качестве практики, можно чего-то и поломать - а потом попробовать снова сделать, чтоб заработало.
А вообще - интересный способ понять - как сделать лучше, удобнее для работы - сидеть рядом с пользователем и наблюдать, как он работает. Столько потрясающих вещей для себя откроешь! И вдруг поймешь, что то, что может казаться удобным программисту - на самом деле жуть как неудобно пользователю - после чего совсем по-другому будешь строить весь внешний интерфейс программ, уже исходя не из теории.
...
Рейтинг: 0 / 0
буферизация и индексы
    #33108312
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Crispy!

Хех, если лузер умудриться особо удачно пролить чай/кофе, то вообще не
станет никаких проблем - комп сгорит, а юзера током убьёт :)
В любом случае создавать cdx при КАЖДОМ входе в программу - совершенно
неправильно - если уж так страшно (и юзеры реально тупые) - отслеживай
некорректные выходы (скажем создал в начале проги по FCREATE()
flag.txt - в конце проги закрыл его и удалил - значит если файлик есть -
прогу убили некорректно - НО если он заблокирован - значит просто работает
другой экземпляр проги).

Решение о использовании DBC принимается уж никак не от размеров задачи и
базы. Если тебе нужны её "фишки" - используй даже если таблица всего одна -
а прога состоит из одного примитивнейшего prg - не нужны - не используй.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
буферизация и индексы
    #33109179
Данилов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovВ любом случае создавать cdx при КАЖДОМ входе в программу - совершенно
неправильно - если уж так страшно (и юзеры реально тупые) - отслеживай
некорректные выходы (скажем создал в начале проги по FCREATE()
flag.txt - в конце проги закрыл его и удалил - значит если файлик есть -
прогу убили некорректно - НО если он заблокирован - значит просто работает
другой экземпляр проги).
Папа, вы будете смеяться, но... (С)
Еще в 1992 в однопользовательской зарплате на FP2.0 у меня была табличка USER, в которой отслеживал вход-выход. Можно себе представить, насколько тупые были расчетчицы. При "входе без выхода" принудительно запускал переиндексацию, для чего в INDEX.DBF держал все тэги и ключевые выражения. Естественно, и пункт "Переиндексация" в главном меню. А то по точкам не наездишься.
...
Рейтинг: 0 / 0
буферизация и индексы
    #33110711
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Юрий!

Ну я и не претендую на то что открыл Америку :) Вообще если как следует присмотреться, то все современные технологии, фишки и примочки имеют свои аналоги в программах писанных и 20 и 30 лет назад.
Конечно актуальность многих приёмов заметно снизилась (многое делает сама среда), но тем не менее :)

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


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