Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / организация удаления / 25 сообщений из 33, страница 1 из 2
01.05.2020, 19:57
    #39953598
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Добрый всем праздничный первомайский вечер!

Подскажите, как правильно организовать удаление записей в приложении.

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

Можно использовать служебную форму, не доступную пользователю, и находить время и возможность почистить таблицу командой PACK, но это не кажется изящным решением.

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

Кто-то же решал такую проблему наверное, может поделитесь советом.
...
Рейтинг: 0 / 0
01.05.2020, 21:13
    #39953617
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Ничего не понял.
Если надо повторно использовать помеченную на удаление запись то RECALL
Но сам факт такой необходимости говорит о том что есть проблемы в архитектуре БД.
...
Рейтинг: 0 / 0
01.05.2020, 21:21
    #39953620
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

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

Пока думаю так, в процедуре сохранения для удаленных записей делать blank for deleted() , при создании нового заказа их по пустому полю находить и recall и переписывать. Но еще не воплотил.
...
Рейтинг: 0 / 0
02.05.2020, 07:25
    #39953660
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
DmitryKn

Пока думаю так, в процедуре сохранения для удаленных записей делать blank for deleted() , при создании нового заказа их по пустому полю находить и recall и переписывать. Но еще не воплотил.


1. Судя по предложенному алгоритму в БД отсутствует FK/RI.

2. Не надо придумывать велосипед, "чистка" удаленных записей обычно делается в административной процедуре, да и в большинстве случаев это не требуется.
...
Рейтинг: 0 / 0
02.05.2020, 08:50
    #39953665
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
PaulWist,

добрый день, что такое FK/RI ?
...
Рейтинг: 0 / 0
02.05.2020, 09:40
    #39953670
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
PaulWist,

1. Прошу извинить, если не прав, но может имеется в виду Foreign Key и Referential Integrity ?
От Relation между таблицами отказался, внешние ключи используются.

2. Может вы и правы, но разве это не будет улучшением - усовершенствованием приложения, если требующих "чистки" помеченных на удаление записей накапливаться в принципе не будет никогда и административная процедура не понадобится тоже никогда?

Это не критично все, конечно, просто хотел услышать мнение, надо оно такое, не надо, я ведь только учусь, опытом не обладаю, профильным образованием тоже, пилю себе один свой собственный проект и постигаю мудрость, в том числе с вашей помощью.
...
Рейтинг: 0 / 0
02.05.2020, 10:17
    #39953671
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
DmitryKn
и административная процедура не понадобится тоже никогда?

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

Да и производительность сильно просядет если сначала искать помеченную на удаление запись, а если нет - добавлять. Просто добавлять - быстрее.
...
Рейтинг: 0 / 0
02.05.2020, 13:29
    #39953699
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

Основная идея понятна, спасибо )

На счет индексов хотя бы кратко - каков алгоритм переиндексации ?
И в моем случае: есть поле id I (autoincrement), он же primary key, и есть ключи внешние, regular.
Составных нет, просто не умею ими пользоваться, а потому и не вижу куда и как применить.
Relation нет.
Записей до 200 000 . Надо ли тут переиндексацию затевать, да и как это возможно?
...
Рейтинг: 0 / 0
02.05.2020, 14:28
    #39953721
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
DmitryKn
На счет индексов хотя бы кратко - каков алгоритм переиндексации ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
use MyTable excl
delete tag all
pack
index on ... tag ...
index on ... tag ...
...
use MyTable2 excl
...
use


DmitryKn
И в моем случае: есть поле id I (autoincrement), он же primary key, и есть ключи внешние, regular.
Составных нет, просто не умею ими пользоваться, а потому и не вижу куда и как применить.
Relation нет.
Записей до 200 000 . Надо ли тут переиндексацию затевать, да и как это возможно?

Индексы для другого нужны, они ускоряют поиск нужных записей, гугли rushmore и про sys(3054) почитай
...
Рейтинг: 0 / 0
02.05.2020, 15:06
    #39953724
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

посмотрю, спасибо
...
Рейтинг: 0 / 0
05.05.2020, 16:35
    #39954352
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
В общем случае, использование Recall - не желательно. Это, скорее, инструмент разработки и отладки. А вот в готовом приложении использовать не стоит. Возникает ряд проблем

Удаление записей в таблице
...
Рейтинг: 0 / 0
07.05.2020, 20:00
    #39955081
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
ВладимирМ,

большое спасибо за ссылку.
Уже иду правильным путем )
...
Рейтинг: 0 / 0
13.05.2020, 07:01
    #39956632
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
DmitryKn,

Как вариант использовать индекс, например
INDEX ON IIF(DELETED() OR EMPTY(sk_id),"F","T")+STR(sk_id,7) TAG sk_id ADDITIVE
далее при просмотре таблицы
SET KEY TO "T"
будут отображаться только не удалённые записи..
...
Рейтинг: 0 / 0
08.03.2021, 12:44
    #40051561
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Доброго всем времени!

Удаляю помеченные записи:
Код: sql
1.
2.
3.
CLOSE DATABASES all && если без all - база не закрывается, видимо, потому что папка data лежит в другом каталоге, отличном от pathwork
OPEN DATABASE 'myBase' EXCLUSIVE && путь в названии прописан, isexlusive проверен
PACK DATABASE



И ничего не происходит, все помеченные записи на месте. Что-то еще надо PACKy ?
...
Рейтинг: 0 / 0
08.03.2021, 13:06
    #40051571
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
из командного окна тоже не работает (
...
Рейтинг: 0 / 0
08.03.2021, 14:58
    #40051620
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Помеченные не в базе, а в конкретной таблице надо удалять
Код: sql
1.
2.
use MyTable excl
pack
...
Рейтинг: 0 / 0
08.03.2021, 16:03
    #40051643
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

Спасибо за ответ, да еще и в праздник.

Да, по таблицам пакует, я просто думал pack database сразу все помеченные записи во всех таблицах базы уберет, что бы не перебирать таблицы. Не прошла халтурка ))
...
Рейтинг: 0 / 0
08.03.2021, 17:41
    #40051661
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

Получилось такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
TRY 
	CLOSE DATABASES all
	OPEN DATABASE 'myBase' EXCLUSIVE
		IF DBUSED('myBase') AND ISEXCLUSIVE('myBase',2)
			lldbexl = .t.
		ENDIF 
CATCH 
	MESSAGEBOX('Нельзя открыть монопольно, есть еще сессии',48)
ENDTRY

IF lldbexl
	USE mytable1 IN 0 EXCLUSIVE
	SELECT mytable1
	PACK
	REINDEX
	USE IN mytable1

        ...
	
	CLOSE DATABASES all
	SET EXCLUSIVE OFF 
	OPEN DATABASE 'myBase'
	
ENDIF 



Насколько здесь уместен будет reindex и вообще, может методологические ошибки есть? Так-то вроде работает
...
Рейтинг: 0 / 0
08.03.2021, 18:45
    #40051671
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
DmitryKn
Dima T,

Спасибо за ответ, да еще и в праздник.

Да, по таблицам пакует, я просто думал pack database сразу все помеченные записи во всех таблицах базы уберет, что бы не перебирать таблицы. Не прошла халтурка ))

pack database пакует контейнер БД, который тоже таблица.
DmitryKn
Dima T,

Получилось такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
local lldbexl && без этого при исключении ошибка будет на IF lldbexl
TRY 
	CLOSE DATABASES all
	OPEN DATABASE 'myBase' EXCLUSIVE
		IF DBUSED('myBase') AND ISEXCLUSIVE('myBase',2) && оно уже USED и EXCLUSIVE
			lldbexl = .t.
		ENDIF 
CATCH 
	MESSAGEBOX('Нельзя открыть монопольно, есть еще сессии',48)
ENDTRY

IF lldbexl
	USE mytable1 IN 0 EXCLUSIVE
	SELECT mytable1
	PACK
	REINDEX
	USE IN mytable1

        ...
	
	CLOSE DATABASES all
	SET EXCLUSIVE OFF 
	OPEN DATABASE 'myBase'
	
ENDIF 



Насколько здесь уместен будет reindex и вообще, может методологические ошибки есть? Так-то вроде работает

Желтым лишнее выделил. Можно выкинуть.
При наличии помеченных на удаление внутри PACK выполняется REINDEX, но
REINDEX не всегда спасает, надежнее удалять индексы и заново создавать, выше писал 22126645
...
Рейтинг: 0 / 0
08.03.2021, 19:24
    #40051680
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

Огромное спасибо
...
Рейтинг: 0 / 0
11.03.2021, 20:49
    #40052716
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
use MyTable excl
delete tag all
pack
index on ... tag ...
index on ... tag ...
...
use MyTable2 excl
...
use




Доброго времени,
это индексы те же самые индексы, что указываются в конструкторе таблиц при создании таблицы?
...
Рейтинг: 0 / 0
11.03.2021, 21:56
    #40052730
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Да, те самые
...
Рейтинг: 0 / 0
12.03.2021, 11:47
    #40052847
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T,

а с теми, которые primary, не будет ли каких осложнений? В хэлпе сказано, что мы примари не можем задать:
"Вы не можете создать первичный (primary) индекс командой INDEX..."
Мы ведь delete tag all , значит и примари тоже?
...
Рейтинг: 0 / 0
12.03.2021, 12:35
    #40052860
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Не знаю, хэлп надо смотреть. Я использую только обычные индексы.

PS Всякие связи, средства контроля целостности и т.п. тоже не использую.
...
Рейтинг: 0 / 0
12.03.2021, 13:01
    #40052871
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация удаления
Dima T
Не знаю, хэлп надо смотреть. Я использую только обычные индексы.

PS Всякие связи, средства контроля целостности и т.п. тоже не использую.


Это я тоже не использую, но примари индексы есть, на автоинкрементных полях.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / организация удаления / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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