powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление записи во время scan
15 сообщений из 15, страница 1 из 1
Удаление записи во время scan
    #39389458
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прохожу scan по записям, типа такого:
SCAN
IF something
DELETE NEXT 1
ENDIF
ENDSCAN
и допустим удаляю текущую запись коммандой DELETE NEXT 1
Хочу понять - что произойдет с курсором - не сместится ли он на след.запись? Не получится ли так, что при удалении я проскочу след. запись?
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39389467
Eugene7,

не сместится.
Но лучше вjобще отказаться от цикла и написать
delete from ... where something
И никаких тайных перемещений :)
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39389469
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NEXT 1 лишнее и явно указывай где удаляешь, а то случайно текущую таблицу сменишь и удалишь не там где надо
Код: sql
1.
DELETE in MyTable


Если код выглядит именно так, то SCAN не надо, можно так
Код: sql
1.
DELETE for something in MyTable
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39389478
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В scan намного больше кода, это я для примера привел.
Спасибо всем за помощь
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39393859
gorbachevtema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
провели бы эксперимент сами
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394342
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может и сместиться..:-), если таблица открыта с индексом или фильтр по del стоит
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394346
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1может и сместиться..:-), если таблица открыта с индексом или фильтр по del стоит
Не сместится. Запись пометится на удаление, но указатель останется на ней. И с этой записью даже можно поработать.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set Deleted On
create Cursor t (f i)
insert into t values (1)
insert into t values (2)
insert into t values (3)
go 2
? t.f, deleted()
delete In t
? t.f, deleted()
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394424
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, курсор останется на записи, а сама запись может сместиться, подняться наверх или спуститься и т.д.
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394477
q1w1e1Да, курсор останется на записи, а сама запись может сместиться, подняться наверх или спуститься и т.д.Не порите чушь, ей больно. Записи не перемещаются в принципе. Меняется порядок их об обхода в соответствии с индексами и фильтрами, но не более того.
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394523
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну смотря что назвать перемещением, если вы имеете нумерацию записей, да, она не изменяется... В данном случае я вижу на мониторе таблицу, делая удаление, запись для меня переместилась вверх(так как настроен индекс)... Как Вы это назовёте, порядком обхода или ещё как это ваше личное дело...
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394541
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1делая удаление, запись для меня переместилась вверх(так как настроен индекс)... Как Вы это назовёте, порядком обхода или ещё как это ваше личное дело...
Такое может произойти только если в индексном выражении участвует DELETED() и этот индекс активен.
Во-первых обычно DELETED() не используют в индексном выражении.
Во-вторых в документации по SCAN написано что нельзя внутри цикла менять поля участвующие в индексном выражении, что в данном случае происходит.
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394551
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сильно хочется, то можно, начиная с клипера, приводились такие примеры, они и сейчас у меня работают в индексном выражении (iif(deleted(),"F","T"))+ и т.д. Так что я и написал, что есть иногда такие случаи, при нерекомендуемом подходе программирования..
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39394609
To q1w1e1.
Сударь, давайте не придумывать свои интерпретации терминов вместо тех, что уже установились в практике общения специалистов в данной области знаний. И это не мое личное дело, а ваше, если вы, конечно, хотите, чтобы ваши изречения понимали правильно.

Перемещение записи - изменение места записи в файле.
Изменение места записи на экране - изменение отображения записи. Отображение зависит от порядка обхода в соответствии с активным индексом. При отображении, кстати, происходит неявное перемещения указателя. Еще раз отмечу - при отображении. Которого в любом цикле может и не быть и тем более его нет при выполнении команды delete. То есть ваши замечания про монитор и то, что на нем вы видите, тут совершенно не в кассу.
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39395081
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пустой спор с правильным специалистом, который фанатчно верит в свою правильность..
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET DELETED ON
CREATE TABLE T (F i)
INSERT INTO T VALUES (1)
INSERT INTO T VALUES (2)
INSERT INTO T VALUES (3)
INSERT INTO T VALUES (4)
INDEX ON IIF(DELETED(),"F","T")+STR(F,4) TO T
DO WHILE !EOF()
    ?RECNO()
    IF F=3
        DELETE
    ENDIF
    SKIP
ENDDO



Что можно делать, что нельзя делать, вопрос философский и каждый решает сам, для меня делать можно всё, что не вызывает сообщение об ошибке VFP, и если так делать нельзя, то разработчики VFP, давно бы это пофиксили...
В общем я остался при своём мнении
...
Рейтинг: 0 / 0
Удаление записи во время scan
    #39396071
q1w1e1,

а теперь в ваш код добавьте еще одну строку ?RECNO() после ENDIF и поймите, наконец-то , разницу между тем, что обсуждается, и вашими высказываниями.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление записи во время scan
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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