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

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


Если код выглядит именно так, то SCAN не надо, можно так
Код: sql
1.
DELETE for something in MyTable
...
Рейтинг: 0 / 0
23.01.2017, 13:37
    #39389478
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
В scan намного больше кода, это я для примера привел.
Спасибо всем за помощь
...
Рейтинг: 0 / 0
28.01.2017, 21:44
    #39393859
gorbachevtema
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
провели бы эксперимент сами
...
Рейтинг: 0 / 0
30.01.2017, 07:59
    #39394342
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
может и сместиться..:-), если таблица открыта с индексом или фильтр по del стоит
...
Рейтинг: 0 / 0
30.01.2017, 08:20
    #39394346
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
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
30.01.2017, 10:51
    #39394424
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
Да, курсор останется на записи, а сама запись может сместиться, подняться наверх или спуститься и т.д.
...
Рейтинг: 0 / 0
30.01.2017, 11:40
    #39394477
Удаление записи во время scan
q1w1e1Да, курсор останется на записи, а сама запись может сместиться, подняться наверх или спуститься и т.д.Не порите чушь, ей больно. Записи не перемещаются в принципе. Меняется порядок их об обхода в соответствии с индексами и фильтрами, но не более того.
...
Рейтинг: 0 / 0
30.01.2017, 12:38
    #39394523
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
Ну смотря что назвать перемещением, если вы имеете нумерацию записей, да, она не изменяется... В данном случае я вижу на мониторе таблицу, делая удаление, запись для меня переместилась вверх(так как настроен индекс)... Как Вы это назовёте, порядком обхода или ещё как это ваше личное дело...
...
Рейтинг: 0 / 0
30.01.2017, 12:51
    #39394541
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
q1w1e1делая удаление, запись для меня переместилась вверх(так как настроен индекс)... Как Вы это назовёте, порядком обхода или ещё как это ваше личное дело...
Такое может произойти только если в индексном выражении участвует DELETED() и этот индекс активен.
Во-первых обычно DELETED() не используют в индексном выражении.
Во-вторых в документации по SCAN написано что нельзя внутри цикла менять поля участвующие в индексном выражении, что в данном случае происходит.
...
Рейтинг: 0 / 0
30.01.2017, 12:58
    #39394551
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
Если сильно хочется, то можно, начиная с клипера, приводились такие примеры, они и сейчас у меня работают в индексном выражении (iif(deleted(),"F","T"))+ и т.д. Так что я и написал, что есть иногда такие случаи, при нерекомендуемом подходе программирования..
...
Рейтинг: 0 / 0
30.01.2017, 13:42
    #39394609
Удаление записи во время scan
To q1w1e1.
Сударь, давайте не придумывать свои интерпретации терминов вместо тех, что уже установились в практике общения специалистов в данной области знаний. И это не мое личное дело, а ваше, если вы, конечно, хотите, чтобы ваши изречения понимали правильно.

Перемещение записи - изменение места записи в файле.
Изменение места записи на экране - изменение отображения записи. Отображение зависит от порядка обхода в соответствии с активным индексом. При отображении, кстати, происходит неявное перемещения указателя. Еще раз отмечу - при отображении. Которого в любом цикле может и не быть и тем более его нет при выполнении команды delete. То есть ваши замечания про монитор и то, что на нем вы видите, тут совершенно не в кассу.
...
Рейтинг: 0 / 0
31.01.2017, 06:11
    #39395081
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи во время scan
Пустой спор с правильным специалистом, который фанатчно верит в свою правильность..
Код: 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
01.02.2017, 10:18
    #39396071
Удаление записи во время scan
q1w1e1,

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


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