powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление записей замучало....
36 сообщений из 36, показаны все 2 страниц
Удаление записей замучало....
    #35041077
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помечаю на удаление
кнопка delete
IF MESSAGEBOX("Âû òàê õîòèòå?",20,"Âíèìàíèå!")=6
SET DELETED ON
DELETE IN dopoln
DELETE IN osnown
SKIP -1 IN dopoln
SKIP -1 IN osnown
thisform.Refresh()
ELSE
_screen.ActiveForm.Refresh()
ENDIF

кнопка выход
SET DELETED OFF
IF MESSAGEBOX("Âûõîäèòü èç ôîðìû?",4+32+256, "Âûõîä")=6
PACK IN osnown
PACK IN dopoln
endif
_screen.ActiveForm.Release()

ELSE

_screen.ActiveForm.Refresh()

ENDIF
вроде должно работать,но если нет записей на удаление то начинает fox материться....
пробовал вставлять
if deleted()=.t. ... ещё вот так if deleted("osnown")=.t. по всякому короче...
может как то не так ищу?
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35041109
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. Простите за орфографию:В кнопке выхода один endif конечно лишний...лишнего накопировал.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35041135
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как матерится Фокс? Можно подробнее?
У Вас как минимум два подозрительных места.
1) Когда вы вклюяаете DELETED, удаляете записи и делаете SKIP-1.
- нужно набороот DELETED OFF - а то непннятно откуда скипать - от удаленной или от той что осталась. По идее, до смещения текущая запись при удалении не уходит. Но Вы то с нее сходите. Тем более дело происходит в двух областях и в GUI интерфейсе. Это тоже может внести неопределенность.
PS. При DELETED OFF данные удаляются - если Вы сомневаетесь.

2) Вы вызываете ПАК. А это требует монопольного доступа. Если Вы в форме - то вряд ли доступ Ваш монопольный.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35041482
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как я понял,то я сначала просто помечаю текущую запись на удаление,а потом просто ухожу на запись назад,при этом она не помечается.Разве не так?(skip'ает он от удалённой)А при отсутствии записи на удаоение он говорит про уникальный индекс.Если же помеченная запись есть на удаление,то всё отлично проходит.
P.S.если так проще,то я сделаю
после пометки
thisform.prosteel.click()
Скачайте архив,добавьте записи по вкусу,потом удалите.....а потом попробуйте без пометки на удаление.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35041517
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, в Вашем проекте я не нашел кнопку "Выход", поэтому проверить Ваши слова нет никакой возможности.

Во-вторых, ТАК удаление записей никогда не делают.

Да, по команде DELETE записи только помечаются как удаленные, но физическое удаление записей (команда PACK) выносится в отдельные служебные процедуры. В процессе работы выполнять PACK - это искать себе приключений.

Общая логика примерно такая:

-) В главном стартовом файле делается глобальная настройка SET DELETED ON
-) В процессе работы приложения записи только помечаются как удаленные командой DELETE
-) Создается отдельный пункт меню, по которому все пользователи выгоняются из программы и выполняется упаковка базы данных.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35041572
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вставил такой код на destroy формы
If Used("osnown") AND Used("dopoln")
Use in osnown
Use in dopoln
Use d:\проект\data\osnown.dbf in 0 exclusive
Use d:\проект\data\dopoln.dbf in 0 exclusive
endif
PACK IN dopoln
PACK IN osnown


ну а помечаю так
MESSAGEBOX("Вы так хотите?",20,"Внимание!")
SET DELETED ON
DELETE IN dopoln
DELETE IN osnown
thisform.prosteel.Click()

ну а под выходом я имел виду Х на форме(у меня уже столько версий,что не успеваю следить,убрал я там что или оставил)простите душевно...
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35041655
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз:

В процессе работы приложения команда PACK - НЕ ИСПОЛЬЗУЕТСЯ. Она выносится в ОТДЕЛЬНЫЙ пункт меню.

Конечно, можно и так, как Вы. Но поскольку Вы откровенно "плаваете" в том, что именно делаете, то Вас еще ждет много удивительных открытий Успехов!
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042172
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До книжек ты похоже так и не добрался

lihach... вроде должно работать,но если нет записей на удаление то начинает fox материться....
А что он должен делать если удалять нечего?
Вместо слова "материться" принято писать выдает сообщение об ошибке " тут текст сообщения " и указывать строку на которой ошибка произошла

Ошибка в твоем коде не на DELETE, a на SKIP вероятней всего

Перед удалением проверь указатель на записи или нет. Примерно так:
Код: plaintext
1.
2.
3.
if eof('osnown') or bof('osnown')
   MessgaeBox('Запись не выбрана')
   return
endif

Вот это _screen.ActiveForm.Refresh() не всегда обозначает ту форму из которой вызывается. Если нужно форму из которой вызываешь - используй thisform.Refresh()

Вот это не надо:
Код: plaintext
1.
PACK IN osnown
PACK IN dopoln
PACK делается для уменьшения размера таблицы, а не решения проблемы уникальности ключа в таблице. И никак не при выходе из формы.

SET DELETE не надо туда-сюда переключать. Написал в DE.BeforeOpenTable() SET DELETED ON и все.

PS Когда книжки читать пойдешь?
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042357
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TPACK делается для уменьшения размера таблицы, а не решения проблемы уникальности ключа в таблице.


Согласен на все 100% (иначе и не могло быть). Но раз уж зашел разговор об уникальных ключах и удаленных записях - прведу один случай, когда я прокололся с этим (это было на FoxPro/Lan2.0(DOS)). Если удалить запись с ключом например k=17 - на удаление запись помечается, но уникальный индекс - как и следовало ожидать - не перестраивается. Далее вы могли тогда в старом Фоксе добавить 2-ю запись с тем же k=17. Integrity тогда не было. Теперь уникальный индекс брал первую - то есть удаленную - запись. И при deleted on не показывал ничего. А вторая - неудаленная - запись не бралась уникальным индексом.

Я не проверял это на VFP - но сейчас я думаю ситуация должна быть такая: запись с k=17 удалена и при deleted on не отображается. В то же время вставить новую запись с k=17 Вам должен не позволить контейтер dbc.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042464
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 apapacy

Вы путаете термины. Точнее, они Вас вводят в заблуждение.

В FP2.x существовали индексы только 2 типов: Regular и Unique

Так вот, индекс типа Unique никак не контролировал уникальность записей. Т.е. вообще. Ему было не важно, сколько записей имеют одно и то же значение. И статус удаленная/ не удаленная для него тоже роли не играл.

Этот индекс отображал уникальные значения. По сути, это был просто своеобразный фильтр, наложенный на таблицу. А уж какая из одинаковых записей будет отображена - заранее предсказать невозможно. Просто первая попавшаяся.

В VFP были введены два новых типа индекса: Candidat и Primary. Вот эти типы реально следят за уникальностью данных. Они просто не дадут возможности ввести две записи с одинковым значением. Причем для них также не имеет значение помечена ли запись как удаленная или нет. Уникальность контролируется среди всех записей без исключения.

Подробнее по индексам можно посмотреть здесь

http://www.foxclub.ru/articles/index.php?id=35

В VFP9 добавлен еще один тип индексов: Binary. Он используется только и исключительно с целью ускорения поиска по логическим полям или выражениям. Например, по выражению Deleted().

Ну, а насчет генерации уникальных значений, так это решается через дополнительные таблицы. Никогда нельзя присвавать новой записи значение удаленной записи. Даже если запись была физически удалена. Потом никому же не докажешь, что запись удаляли! Да и с контролем уникальности возни меньше.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042472
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил, да я это же и гвоврил. Просто для меня это было в свое время вроде граблей. Хотел обратить внимание, раз уж зашла речь об удаленных записях и уникальных индексах. Что б кто прочитал - не наступил.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042475
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дико извиняюсь, не Михаил, ВладимирМ. Действительно, очень стыдно.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042476
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Этот индекс отображал уникальные значения. По сути, это был просто своеобразный фильтр, наложенный на таблицу. А уж какая из одинаковых записей будет отображена - заранее предсказать невозможно. Просто первая попавшаяся.

5 - , Владимир.
Всегда отображается запись с меньшим RECNO(), то есть заведенная раньше. (Нарушаем 1НФ)
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042670
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А никто не говорил что я спец(я вообще впервые месяц назад увидел fox) в foxpro,просто темы курсовой другой не было,так и пришлось выбрать эту("Создание простейшей базы данных в FoxPro").
Вот и втянулся....
P.s.Купил книжку Visual FoxPro 9.0 Т.В.Мусина....Сижу читаю...Согласно ей косяков я не наделал великих.
Ну так заработал же и такой способ,чем он не нравится Вам,я откровенно говоря не понимаю.Ну не программерски,по ламерски.Так я не волшебник,я только учусь.
А главное про открытия:С моим способом удаления что-то не так?Он мне сюрпризов не принесёт в последний момент?А то мне после праздников здавать.
А так,всех с НГ!
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042716
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lihach...
P.s.Купил книжку Visual FoxPro 9.0 Т.В.Мусина....Сижу читаю...Согласно ей косяков я не наделал великих.
Молодец :)
lihachНу так заработал же и такой способ,чем он не нравится Вам,я откровенно говоря не понимаю.Ну не программерски,по ламерски.Так я не волшебник,я только учусь.
А главное про открытия:С моим способом удаления что-то не так?Он мне сюрпризов не принесёт в последний момент?А то мне после праздников здавать.
А так,всех с НГ! Что не так - несколько раз объяснили. Если тебя это устраивает - сдавай.
При сдаче будет работать так же как и у тебя. Если при тестировании сюрпризов нет, то и при сдаче не будет.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35042762
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отлично!Тестирую,пока проблем не возникало.
P.S.Сижу,почитываю литературку...Чувтсвую ещё пару примочек сделаю к проекту...
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35044656
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще не работаю напрямую с таблицами, а только с лок genview и запросами, поэтому удаляется все просто и влюбое время,
1)запоминаю Id строки в view
2) открываю табл в Exclus
3) нахожу строку delete pack
4) закрываю таблицу.
Один раз написана проц на удаление и все :)
Напрямую с таблицами работать нельзя!
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35044962
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rom_ewВообще не работаю напрямую с таблицами, а только с лок genview и запросами, поэтому удаляется все просто и влюбое время,
1)запоминаю Id строки в view
2) открываю табл в Exclus
3) нахожу строку delete pack
4) закрываю таблицу.
Один раз написана проц на удаление и все :)
Напрямую с таблицами работать нельзя!
А теперь запустите Ваше приложение два раза (симуляция многопользовательского режима) и посмотрите, куда Вас пошлет FoxPro.

Еще раз. НЕЛЬЗЯ использовать команды требующие эксклюзивного доступа к таблицам (например, PACK) в процессе работы приложения. Как курсовая - сойдет. В реальном приложении этого делать нельзя. Будут неразрешимые конфликты совместного доступа.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35044995
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут никому не мешаю?Вроде как Я сдаю курсовую...База будет использоваться на 1 компьютере,никаких совметных доступов.По теме курсовой,база должна быть наипростейшая,но т.к. препод меня не переваривает,то всё должно быть без сучка и задоринки.Поэтому надо всё предусмотреть...
P.S.сам он в fox'е не рубит(праям как я практически) и код разбирать не будет.Так что все старания идут на интерфейс и на сам факт работы программы.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045015
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще надо убрать это удаление!Сделал запрос(есть тема на форуме моя),так результат в форму вывел.Всё конечно работает,находит всё нараз,но результат поиска то он из курсора берёт,выводит на форму на ту же.Так вот моё удление тут не применимо.Я ж просматриваю и перелистываю курсор,а не мои таблицы.
А если препод спросит,как удалить,скажу что никак..
У кого-нить новаторские идеи по этому поводу есть?Или правда без удаления обойтись?
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045034
прох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lihach , тебе ведь ВладимирМ написал: запусти приложение два раза на одной машине. Второй раз тебя пошлет. Твой препод кликнет несколько раз вместо одного по ярлыку проги, запустится несколько копий и вылезет куча ругани при попытке удаления. Так что тебе Владимир не зря советует не использовать команды, требующие монопольного доступа. Если же расчитывать на работу в данном конкретном случае только на одной машине, то следует хотя бы учитывать и обрабатывать при запуске приложения возможнось запуска нескольких копий одновременно. Как вариант, для этого можно объявить и использовать АПИ функции типа FindWindow, BringWindowToTop, ShowWindow, IsIconic, SetForegroundWindow, SetActiveWindow.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045052
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новаторские идеи по поводу чего? Удаление из курсора? Так Rom_ew дал общее направление. По коду записи в курсоре ищете удаляемую запись в исходной таблице и удаляете найденную запись.

Однако поскольку Вы игнорируете все советы и идете "своим путем", то скажите, что удалять нельзя. Вам ведь все равно с FoxPro не работать. Сдадите курсовую и забудете. Зачем же забивать голову всякой ерундой...
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045320
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для ВладимирМ:
Уточняю, таблица открывается на долю секунды в Excl, а все пользователи которые работают одновременно с одной базой - все работают на запросах и view - все таблицы закрыты почти всегда, поэтому никогда Fox не орет на удаление. И самое главное - вообще отказался от Data Environment(формы) и других Wiz (поэтому переписывал всю прогу 1.5 года)
Насчет того, что вообще не удалять строки, даже не думайте - Все ненужное надо убирать физически обязательно, чтобы не забивать ДБ (иначе через несколько лет база будет забита хламом )
Правда удаление можно делать и в конце сесии, но тогда придется иметь ввиду все время метки на удаление, что очень неудобно.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045365
lihach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да всё не так!Я конечно же прислушиваюсь к ответам,но общего плана у меня не было, и поэтому так всё и получается.
Сначала сделал удаление,потом понял,что нужно организовать поиск.Сделал поиск,а тут на тебе!А мой то способ удаления не подходит!Надо заново делать всё...
Простите уж неумеху...Больше с такими глупыми вопросами не появлюсь.Буду разбираться своими мозгами.
P.S.Раньше никогда не занимался базами данных,даже боялся их,а теперь даже понравилось с ними работать,довольно интересно,я б даже сказал.Поэтому бросать это дело точно не буду.Попробую ещё что-нибудь сотворить,а там уж срок сдачи меня не будет поджимать,буду тихо и спокойно разбираться,допускать ошибки,и сам их исправлять.
Всем спасибо за помощь,если что,буду искать по форуму,или загуглюсь.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045619
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rom_ewдля ВладимирМ:
Уточняю, таблица открывается на долю секунды в Excl, а все пользователи которые работают одновременно с одной базой - все работают на запросах и view - все таблицы закрыты почти всегда, поэтому никогда Fox не орет на удаление.
Надеюсь, Вы в курсе, что View, по своей сути, это обычный Select-SQL. Для его выполнения таблица должна быть открыта обязательно. Если таблица не открыта, то она будет открыта автоматически, вне зависимости от Ваших желаний.

Надеюсь, Вы в курсе, что команда PACK осуществляет создание таблицы заново . Т.е. просто переписывает не удаленные записи в новую таблицу, потом удаляет старую и переименовывает новую. Причем это сопровождается коррекцией индексов и мемо-полей. При достаточно большом объеме таблиц эта операция может занимать до нескольких минут !

Следовательно имеем следующую ситуацию: один пользователь запустил выполнение команды PACK и эта операция выполняется довольно долго. В этот момент, другой пользователь захотел открыть View. Для открытия View необходимо открыть таблицу. Но таблица открыта другим пользователем в режиме Exclusive. Значит, данный пользователь идет со своим желанием далеко и надолго. Он просто физически не может работать с приложением, пока другой пользователь не завершит упаковку.

Если Вы пока не столкнулись с такой ситуацией, то это означает две вещи:

1) Объем таблиц не велик
2) Количество пользователей мало

Rom_ewИ самое главное - вообще отказался от Data Environment(формы) и других Wiz (поэтому переписывал всю прогу 1.5 года)
Факт использования или не использования DataEnvironment на весь этот процесс не оказывает вообще никакого влияния. DataEnvironment - это визуализация настройки среды окружения для формы или отчета. Вы либо пишите весь код открытия вручную (что, видимо, Вы и сделали), либо просто визуально в DataEnvironment указываете какие таблицы и связи между таблицами Вам нужны.

Кроме того, есть специальные настройки в DataEnvironment: AutoOpenTables и AutoCloseTables. Если установить их значения в .F., то, фактически, это и будет отказ от автоматического открытия таблиц при загрузке формы и такого же автоматического закрытия таблиц при выгрузке
формы.

И наконец, ничто не мешает после загрузки формы вручную закрыть уже не нужные промежуточные таблицы.

В общем, Вы сделали распространенную ошибку - начали кодить не разобравшись с возможностями и логикой работы инструмента. А теперь и признать это ошибкой не так-то просто. Даже самому себе. Зря что ли 1,5 года переписывал?

Rom_ewНасчет того, что вообще не удалять строки, даже не думайте - Все ненужное надо убирать физически обязательно, чтобы не забивать ДБ (иначе через несколько лет база будет забита хламом )
Правда удаление можно делать и в конце сесии, но тогда придется иметь ввиду все время метки на удаление, что очень неудобно.
Насчет того, чтобы не удалять строки я говорил не Вам. Кроме того, я говорил это в определенном контексте, а не "вообще". Если бы Вы внимательно читали то, что я советовал в данной теме, то увидели бы, что я советовал вынести процесс упаковки в отдельные служебные модули. Вне зависимости от конкретной формы.

Не в конце сессии, а периодически раз в неделю, раз в месяц, раз в год. В зависимости от интенсивности удаления записи в Вашем приложении. Ведь Вы делаете такие операции как резервное хранение, мелкий ремонт базы и т.д. и т.п. Вот в список подобных процедур и включить процедуру упаковки данных.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35045936
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В БД Clarion можно выставлять опцию reuse deleted records. Я решил использовать этот подход в FoxPro. В одном приложении у меня шло достаточно активное удаление записей. И я - чтобы не делать PACK - новые записи писал на место удаленных. Работало нормально.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046003
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacyВ БД Clarion можно выставлять опцию reuse deleted records. Я решил использовать этот подход в FoxPro. В одном приложении у меня шло достаточно активное удаление записей. И я - чтобы не делать PACK - новые записи писал на место удаленных. Работало нормально.
Эх, думаете никто до Вас этого не пробовал? Это все работает до тех пор, пока Ваша база небольшая и количество пользователей не велико.

Я так понимаю, что Вы даете команду RECALL на записи ранее помеченные как удаленные командой DELETE.

Так вот, как Вы разрешали конфликты совместного доступа?

-) Первый пользователь решил создать новую запись. В таблице нашел запись, помеченную как удаленную
-) В этот момент второй пользователь тоже решил создать новую запись и нашел ту же самую запись
-) Первый пользователь выполнил модификацию
-) Второй пользователь тоже выполнил модификацию и затер данные первого пользователя

По сути, вместо ожидаемого создания двух новых записей была создана только одна.

Это простейший вариант конфликта совместного доступа при описанной стратегии. Есть и боле сложные варианты.

Но кроме того, Вы вынужденно запрещаете себе использовать стандартные команды по созданию новой записи (INSERT-SQL, APPEND FROM, проблемы с буферизацией и транзакцией) просто по той причине, что для создания записи надо сначала выполниить поиск ранее удаленной записи и только потом, если ничего не нашли, физически создавать новую запись. Т.е. вместо стандарных команд писать процедуры вставки.

Другими словами, использование ранее удаленных записей не упрощает, а усложняет программный код.

Пока объем базы и количество пользователей не велико с этим можно смириться. Но с увеличением требований к приложению такая стратегия оказывается слишком дорогой во всех смыслах.

Если же в приложении идет активное удаление записей - это означает неверное проектирование приложения. Что-то, где-то не продумали и исправляете кривизну идеологии приложения массовыми удалениями. Не должно так быть. Удаление - это исключительная (в смысле, достаточно редкая) ситуация.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046053
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я согласен с Вами, Владимир. Это был просто экперимент. Конкретно я делал это так (Это было лет 15 тому под DOS). Мне нужно было на рабочем месте открыть табличную часть документа. Расшаривать большую таблицу по сети показалось мне опасным - и я копировал данные по табличной части документа (обычно до 20 записей) в локальный набор. Там редактировал, удалял строки, добавлял, менял местами. Дальше накладывал блокировку на необходимое количество записей. Часть записей переписывал при помощи SCATTER/GETHER - даже удобнее чем INSERT и APPEND. Часть записей удалял. А если было нужно - RECALL. Поскольку все обращались к таблице именно так - проблем не было. Сейчас я вообще не использую dbf и таблицы держу на SQL-сервере и обращаюсь через RemoteView. До recordset не дошел - переключился на другие технологии (не FoxPro).

Кстати по стабильности dbf+FoxPro у меня есть вопрос - может быть поищу по форуму и если не найду ответ - может быть задам на форуме.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046099
olegv12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL-сервер дело хорошее, когда Вы только с ним работаете, я вот погулял и по SQL сервер и по Posgre SQL в очередной раз перед новым годом. Все как обычно - остальные проги заклинило - так что все снес, сегодня почистил реестр и снова VFP-8. Жал 9-ку не купил. Тут коллеги все уши прожужжали этими SQL - ну думаю зачем мне в будущем VFP9.
Вот по стабильности очень интересно полушать тех, кто ушел из VFP. А что там за Clarion?
А записи в основной базе данных удалять - себе дороже. Если уж точно больше не нужна - лучше очистить и закрепить за автором для новых записей. Сам свои удалаешь, сам и используй дальше. И никаких конфликтов. У меня по определнию запись имеет фамилию конструктора, так что никаких проблем.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046152
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ. Но таблица открыта другим пользователем в режиме Exclusive. Значит, данный пользователь идет со своим желанием далеко и надолго.
-просто кнопку еще раз нажмет

Во многом согласен, особенно по удалению, но :),
1) в проге около 30 ДБ и около 250 таблиц - а не в одной базе
2) при пересоздании запросов контролирется переоткрытие с этим же имннем, и не когда попало.
3) в проге нет ни одного жестко подвешенного view, от них отказались, а только генерируемые(class GenView) на ходу и на короткое время с уникальным именем
3) может я и ошибаюсь, но запрос прекрасно существует и редактируется и без запущенной таблицы(сохраняется потом).
4) проверка открытия , если нет, перезапрос
5) установлены level доступа, что и регулирует правила пользования.
*Конечно возможность пересечения userov при удалении остается, но она очень минимальна и неповлечет сбоя системы. Зато нам ненадо своих спецов ставить около каждой копии проги. (+ внутри доп.проги на автопроверку востановление и ремонт ДБ)

ВладимирМА теперь и признать это ошибкой не так-то просто. Даже самому себе. Зря что ли 1,5 года переписывал?

В первой версии было именно так как советуешь. Вообщето полностью переписывали 4 раза , ушло на это занятие 9 лет, сори уже 10, согласен с тобой этот вид работы с БД еще неидеален, но в данный момент для Fox этот вариант самый оптимальный (если не отказ от монопол реж открытия).
И так как это конструктор , админы клиентов могут сами устанавливать правила работы в своих компаниях; (если одновременно Userov на одной базе более 10), хотят-разрешат/запретят удаление или др. Самое главное для их мозгов(далеких от програмир) дан инструмент.

Посмотрите одну из комплектаций, а потом поговорим: http://]www.download.ru/?infoprogram=33110

Очень внимательно отнеслись к Вашим советам, сразу видно хорошего спеца по Fox, спасибо ВладимирМ!
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046168
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ. Удаление - это исключительная (в смысле, достаточно редкая) ситуация.

Надо попробывать сказать это пользователям, интересно как они нам на это ответят .....
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046176
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ....приложении. Ведь Вы делаете такие операции как резервное хранение, мелкий ремонт базы и т.д. и т.п. Вот в список подобных процедур и включить процедуру упаковки данных.

Нет, неделаем (прога сама все делает и проверку и ремонт и архивы и т. д.), к клиентам выезжаем только на установку новых блоков т.е. очень редко.
Мы исходили из того: прога должна обслуживать сама себя. А развивать(доробатывать) прогу могли простые Usera. Что нами и сделано.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046411
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rom_ew

Ну, попробую еще раз.

Термин View только все запутывает. Повторюсь, физически, View - это обычная команда Select-SQL, но "обернутая" в некий класс. Поэтому, когда употребляется термин View это означает Select-SQL.

Значит, "забыли" про View (как он там создается - не имеет никакого значения по расматриваемому вопросу). Нас интересует только тот факт, что пользователи дают команду Select-SQL. Как это реализовано физически (макроподстановка, динамический View, Query, прямой запрос) - совершенно не важно.

Итого, чтобы получить данные пользователь дает команду Select-SQL. Но чтобы выполнить эту команду надо открыть таблицы. Если другой пользователь открыл одну из нужных таблиц в режиме Exclusive, то первый пользователь выполнить эту команду не сможет в принципе. Получит сообщение об ошибке "access denide". После чего он должен повторять попытку открытия до тех пор, пока не "прорвется" к нужной форме. А это уже зависит от того, сколько времени таблица будет удерживаться в состоянии Exclusive и насколько хватит терпения у пользователя.

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

Поскольку, по Вашим словам, прога работает давно, значит, Вы уже "выдрессировали" пользователей. Они рассматривают постоянные задержки и проблемы с открытием форм, как нечто вполне естесственное. Как говорил Жванецкий: наши ботинки замечательные, пока не увидишь другие

Это был первый, совершенно очевидный слой проблем. Дальше на это накладывается масса проблем по организации процесса сохранения. Например, чтобы реализовать транзакцию, надо блокировать изменяемые записи. А это значит, что открыть таблицу в режиме Exclusive другим пользователем для упаковки будет невозможно. Т.е. тормоза будут не только при открытии формы, но и при ее закрытии. Терпеливые же у Вас пользователи

По сути, Вы организовали "закат солнца вручную". Т.е. все то, что FoxPro делает автоматически, на уровне ядра системы, Вы вынуждены были повторить "вручную". И ради чего? Только ради того, чтобы не делать некие периодические операции?

Насчет того, что система делает все сама (резервирование, ремонт и т.п.) - это все хорошо до определенной степени. За это пользователи опять же расплачиваются жуткими тормозами. Ведь совершенно очевидно, что такой самоконтроль реализуется избыточной перестраховкой и многкратным дублированием одних и тех же операций. Ну, например, скорее всего, Вы "восстанавливает" индексы просто удаляя их и создавая заново при каждом включении приложения. Скорее всего, даже не проверяя, а действительно ли это надо делать.

Повторюсь, это все можно терпеть, пока объем данных (в байтах) относительно не велик и общая "заторможенность" системы особо не заметна. При росте размера базы код Вашего приложения начнет катастрофически разрастаться, чтобы довольно сложным программированием компенсировать кривизну идеологии, приводящую к системным тормозам приложения.

Rom_ew ВладимирМУдаление - это исключительная (в смысле, достаточно редкая) ситуация.
Надо попробывать сказать это пользователям, интересно как они нам на это ответят .....
Вы хотите сказать, что Ваши пользователи непрерывно удаляют только что созданные записи? Как же они вообще умудряются работать с Вашим приложением при таких тормозах?

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

Надеюсь, Вы все-таки ведете лог действий пользователей. А то ведь Вы же крайними и окажетесь при "разборе полетов" кто когда и чего сделал...

Rom_ewМы исходили из того: прога должна обслуживать сама себя. А развивать(доробатывать) прогу могли простые Usera. Что нами и сделано.
Это одна из тех идей, которая на практике не работает.

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

А это значит, что этот человек рано или поздно, но обязательном придет к идее "вручную" дублировать все процедуры обслуживания приложения. Ну, не может сколько-нибудь сложное приложение не глючить. Не бывает так!

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

На самом деле, "простой user" будет в ужасе от нагромождения кода. А то, что он у Вас весьма сложный и запутанный у меня нет никаких сомнений. Он "не видит" общую идею и не понимает, почему было сделано так, а не иначе, когда все можно было сделать по другому.

Значит, тому человеку, который решит заняться развитием Вашего приложения придется очень долго и вдумчиво изучать программный код не рискуя в нем ничего трогать. Или же наоборот, "лепить" код "по месту", а потом вылавливать многочисленные баги и глюки того, что он налепил. Не сомневаюсь, что Вы уже сталкивались и с тем и с другим.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046780
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для ВладимирМ
хотелось довольно коректно прокоментировать, но видно не суждено, отвечаю :

ВладимирМ По сути, Вы организовали "закат солнца вручную". Т.е. все то, что FoxPro делает автоматически, на уровне ядра системы, Вы вынуждены были повторить "вручную". И ради чего? Только ради того, чтобы не делать некие периодические операции?
Да, глючные места FoxPro пришлось обходить очень серьезно, особенно при переходе с 6.0 на 8.0. Они кое где забыли учесть приемственность! И чтоб больше от них не зависить ряд процедур было заменено. Зато у нас запускается прога на Linux(+Wine), а например 1C не запускалась и Ваша врятли пойдет ! Хотя замечу FoxPro мне нравится!

ВладимирМИтого, чтобы получить данные пользователь дает команду Select-SQL. Но чтобы выполнить эту команду надо открыть таблицы. Если другой пользователь открыл одну из нужных таблиц в режиме Exclusive, то первый пользователь выполнить эту команду не сможет в принципе. Получит сообщение об ошибке "access denide". После чего он должен повторять попытку открытия до тех пор, пока не "прорвется" к нужной форме. А это уже зависит от того, сколько времени таблица будет удерживаться в состоянии Exclusive и насколько хватит терпения у пользователя.
1)В режиме Exclusive таблицы закрыты почти всегда
2)Класс кнопки удаления видят только пользователи по Левел 1 а их на компанию обычно 3-4, они и устанавливают правила ввода данных.
3)Таблицы даже в режиме Shared открыты только при запросе и сразу закрываются

ВладимирМА это уже зависит от того, сколько времени таблица будет удерживаться в состоянии Exclusive и насколько хватит терпения у пользователя.Повторюсь, это все можно терпеть, пока объем данных (в байтах) относительно не велик и общая "заторможенность" системы особо не заметна. При росте размера базы код Вашего приложения начнет катастрофически разрастаться, чтобы довольно сложным программированием компенсировать кривизну идеологии, приводящую к системным тормозам приложения.
Только бестолковый аналитик держит все данные в "одной-двух" таблицах.Мы распределили нагрузку по вводу через промежуточные таблицы.А уж отделы договорятся когда им удалять , а когда нет!.
Кстати, часть данных за предидущие периоды уплотняются(раз в год или пять...)Пример: из 100т.строк остается 5т.строк(S), они физ переносятся в зеркала по отдельным таблицам.
Самое простое - гнать базу до млн-ов и не решать вопрос, как у Вас видно и сделано.

ВладимирМ Дальше на это накладывается масса проблем по организации процесса сохранения. Например, чтобы реализовать транзакцию, надо блокировать изменяемые записи. А это значит, что открыть таблицу в режиме Exclusive другим пользователем для упаковки будет невозможно. Т.е. тормоза будут не только при открытии формы, но и при ее закрытии. Терпеливые же у Вас пользователи
1)Вот поэтому полностью отказались от блокирования строки.
2)Также отказались от команды =TableUpdate(.t.) , буферизация таблицы колосально тормозит сохранение при больших объемах, неговоря уже об Update view. Используем Scat and Gather на не буф(1) таблицу.

ВладимирМ Поскольку, по Вашим словам, прога работает давно, значит, Вы уже "выдрессировали" пользователей. Они рассматривают постоянные задержки и проблемы с открытием форм, как нечто вполне естесственное.
Скажем так: Да, в чем то прав, действительно мы перенесли на Init все(query,view + index). Да, получаем торможение на 1-2сек дольше чем при обычной работе с Fox. Но , этим мы создаем совершенно независимое рабочее место и в разы увеличили скорость во время ввода данных т.к. оператор получает только необходимый и ограниченный набор данных! А у Вашей проги скорей всего тормозит в процесе, что гараздо хуже. В итоге у нас время ввода данных 2cek+X+X+X ? у Вас X+1+X+1+X+1 у кого быстрее

ВладимирМ Вы хотите сказать, что Ваши пользователи непрерывно удаляют только что созданные записи? Как же они вообще умудряются работать с Вашим приложением при таких тормозах?
Бред, даже коментировать не буду

ВладимирМ Если пользователи "не ведают, что творят", т.е. создают и сразу удаляют - надо "удалять" таких пользователей. Это значит, что пользователь вообще не думает о том, что именно он делает. Он ведь может и удалить то, что удалять не надо было...
Насколько я понимаю, программы пишутся для пользователей, а не для того чтоб им создавать неудобства. И я не говорил что у всех пользователей Левел1, следовательно и доступ к удалению

ВладимирМНадеюсь, Вы все-таки ведете лог действий пользователей. А то ведь Вы же крайними и окажетесь при "разборе полетов" кто когда и чего сделал...
Чаще в компаниях используется процедура анулирования, а не удаления(как хотят так и настраивают) т.е. при анулиров остается строка на месте с пометкой даты, время и логина.


ВладимирМ Rom_ew
Мы исходили из того: прога должна обслуживать сама себя. А развивать(доробатывать) прогу могли простые Usera. Что нами и сделано.
Это одна из тех идей, которая на практике не работает.
РАБОТАЕТ!

ВладимирМПо сути, он и выполняет роль администратора. А это значит, что этот человек рано или поздно, но обязательном придет к идее "вручную" дублировать все процедуры обслуживания приложения. Ну, не может сколько-нибудь сложное приложение не глючить. Не бывает так!
Да, глюки есть везде, но их может быть совсем не много зависит от продолжительности и качества теста и грамотности аналитка. А вот дороботать хотят все, эта возможность нами предоставлена, пусть развлекаются

ВладимирМ Во-вторых, "простые user-а" просто ничего не поймут. Не тешьте себя иллюзиями. Это Вы, с многолетним опытом разработки приложения считаете, что там все просто. По той причине, что Вы "видите" общую идеологию Вашего приложения. Т.е. понимаете зачем вот здесь была сделана дополнительная проверка, а вот здесь поставлено условие.
1)Поэтому мы серьезно доработали все объекты Foxa, они теперь сами подстраиваются друг под друга и БД - писать теперь почти не надо, кинул объект на форму дал ссылку и все.
2)Поэтому как "простые user-а", новички, и тем более профи всегда найдут как дороботать под их деятельность прогу.
3)Для профи: в EWEREST Construction предоставлены теже возможности как и в проекте Foxa (в RUN режиме), пусть творят что хотят и как хотят, толька экономия времени в 50 раз.
Мы сами уже делаем приложения не к Foxu, а к EWEREST: вместо 2-мес, уходит 3-4 дня для выполнение заказа на новый полноценный блок!

ВладимирМНа самом деле, "простой user" будет в ужасе от нагромождения кода. А то, что он у Вас весьма сложный и запутанный у меня нет никаких сомнений. Он "не видит" общую идею и не понимает, почему было сделано так, а не иначе, когда все можно было сделать по другому.
Да,код действительно не маленький за столько лет, но:
Код ядра недоступен и не виден, а сверху пусть пишут что хотят, всегда можно вернуться назад если ошиблись, это предусмотрено! +Прога сама за ними в большинстве случаев подчищает и подсказывает но не изменяет суть.
"простой user" в ужасе от Foxa, ему просто надо было сделать более узкую дорогу, чтоб глаза не разбегались и вроде получилось, правда много лет на это ушло.

ВладимирМЗначит, тому человеку, который решит заняться развитием Вашего приложения придется очень долго и вдумчиво изучать программный код не рискуя в нем ничего трогать.
Незачем , он почти ничего испортить не может, тем более если он хоть немного знаком с FoxPro.

ВладимирМИли же наоборот, "лепить" код "по месту", а потом вылавливать многочисленные баги и глюки того, что он налепил. Не сомневаюсь, что Вы уже сталкивались и с тем и с другим.
Он может вполне потренироваться на его UserForm, а потом код перенести в рабочие комплектации, Вы тоже врятли непроверенный код ставите клиентам! Тем более шанс на ошибку у него в 100 раз менше чем в проекте FoxPro, дорога более узкая!

Редко кто из авторов решился на полную перепись программы в 3 раз. А мы переписывали 4 раза, и вот токо теперь добились желаемого результата и вполне доволны. Переписывать полностью больше не планируем, не по тому что жалко еще 2-3 лет, а т.к. в итоге это оказался самый оптимальный вариант для FoxPro.

ВладимирМ, огромное спасибо за разговор, отвечать больше не буду, слишком много времени на это занятие уходит!
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35046986
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rom_ew

Очень тяжело обсуждать проблему, если оппонент постоянно "вытаскивает кроликов из шляпы". Т.е. на ходу меняет как постановку задачи, так и обсуждаемые проблемы.

У меня создалось впечатление, что Вы не очень-то пытались разобраться с логикой работы Visual FoxPro, поскольку многие Ваши рассуждения пришли от FoxPro for DOS. Иначе просто невозможно объяснить Ваши заблуждения по поводу буферизации, транзакции и скорости работы.

Прежде чем бросаться словами вроде "Бред, даже комментировать не буду", почитайте СВОИ сообщений и подумайте, какие выводы можно было сделать на основе имеющейся информации. Я ведь пишу текст не "вообще", а как ответ на ВАШИ слова.

Все остальное не однократно обсуждалась на форуме FoxClub. Вы повторяете распространенные заблуждения. Можно было бы их обсудить, но, поскольку у Вас нет времени, то, видимо, не стоит и начинать... Да и к данной теме это не относится.

PS: Раз в два...три года полезно пересматривать концепцию (идеологию) своего приложения. Вовсе не с целью его переписать, а с целью оценить какие возможности появились в новых версиях продукта и какие новые концепции (идеи) построений приложений Вы сами узнали. Просто чтобы самому понять в чем ваше приложение было спроектировано не верно, а в чем - правильно.
...
Рейтинг: 0 / 0
Удаление записей замучало....
    #35047516
Rom_ew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полностью согласен.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление записей замучало....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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