powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление записей замучало....
25 сообщений из 36, страница 1 из 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
25 сообщений из 36, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление записей замучало....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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