Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись? / 12 сообщений из 12, страница 1 из 1
30.11.2018, 08:48
    #39740666
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
Если есть сложный многотабличный обновляемый запрос, то в большинстве случаев из него можно удалить строку.
Как можно определить из какой таблицы будет происходить удаление?

Похоже что решение Access принимает на основе того, какие индексы определены в таблицах и как они связаны, но сам алгоритм выбора мне ещё не понятен.

IMHO, Mon$te®
...
Рейтинг: 0 / 0
30.11.2018, 10:54
    #39740724
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
4d_monster,

Также влияет и тип связи в запросе.
Если не INNER, а просто LEFT/RIGHT, то будет делать вид что удаляет но удалять не будет.
...
Рейтинг: 0 / 0
30.11.2018, 11:02
    #39740731
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
4d_monsterЕсли есть сложный многотабличный обновляемый запрос, то в большинстве случаев из него можно удалить строку.А как же целостность данных?
...
Рейтинг: 0 / 0
30.11.2018, 11:10
    #39740737
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
sdku,

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

Это требуется, что бы писать тригеры INSTEAD OF DELETE для VIEW при переносе на SQL Server, т.к. он "ваще" не умеет удалять если есть больше одной таблицы.
...
Рейтинг: 0 / 0
30.11.2018, 11:35
    #39740761
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
Вот для примера

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CurrentDb.Execute "CREATE TABLE Docs (idDoc AUTOINCREMENT, sNumber text(15), idCustomerId int, discount float);"
CurrentDb.Execute "insert into Docs(sNumber, idCustomerId, discount) VALUES ('z1', 1, .10);"
CurrentDb.Execute "insert into Docs(sNumber, idCustomerId, discount) VALUES ('z2', 1, .20);"
CurrentDb.Execute "insert into Docs(sNumber, idCustomerId, discount) VALUES ('z3', 2, 0);"


CurrentDb.Execute "CREATE TABLE DocsItems(idDocItem AUTOINCREMENT, idDoc int, idItem int, qtyAmount float, curPrice currency);" 
CurrentDb.Execute "insert into DocsItems(idDoc, idItem, qtyAmount, curPrice) VALUES (1, 1, 11, 11);"
CurrentDb.Execute "insert into DocsItems(idDoc, idItem, qtyAmount, curPrice) VALUES (1, 2, 22, 22);"
CurrentDb.Execute "insert into DocsItems(idDoc, idItem, qtyAmount, curPrice) VALUES (1, 3, 33, 33);"

CurrentDb.Execute "insert into DocsItems(idDoc, idItem, qtyAmount, curPrice) VALUES (2, 1, 44, 44);"
CurrentDb.Execute "insert into DocsItems(idDoc, idItem, qtyAmount, curPrice) VALUES (2, 2, 55, 55);"

CurrentDb.Execute "insert into DocsItems(idDoc, idItem, qtyAmount, curPrice) VALUES (3, 1, 66, 66);"

CurrentDb.Execute "CREATE TABLE Items (idItem AUTOINCREMENT, sName text(200), sDescription text(200), qtyMinBuy float);"
CurrentDb.Execute "insert into Items(sName, qtyMinBuy) VALUES ('Item number One', 1);"
CurrentDb.Execute "insert into Items(sName, qtyMinBuy) VALUES ('Item number Two', 2);"
CurrentDb.Execute "insert into Items(sName, qtyMinBuy) VALUES ('Item number Three', 3);"
CurrentDb.Execute "insert into Items(sName, qtyMinBuy) VALUES ('Item number Four', 4);"


Если при таком голом определении создать запрос, он будет, конечно вообще не обновляемым.
Код: vbnet
1.
2.
Currentdb.CreateQueryDef "rsDocItems" , "SELECT DocsItems.*, Items.* FROM DocsItems LEFT JOIN Items ON DocsItems.idItem = Items.idItem"
RefreshDatabaseWindow 


Добавляем индексы:
Код: vbnet
1.
2.
3.
CurrentDb.Execute "CREATE INDEX pkItems ON Items(idItem) WITH PRIMARY;"
CurrentDb.Execute "CREATE INDEX pkDocs ON Docs(idDoc) WITH PRIMARY;"
CurrentDb.Execute "CREATE INDEX pkDocsItms ON DocsItems(idDoc, idItem) WITH PRIMARY;"


Теперь он обновляем. И будет удалять из DocsItem. Если левой таблицей сделать Items - то будет только делать вид что удаляет, при Resfresh покажет опять все записи.
...
Рейтинг: 0 / 0
30.11.2018, 11:58
    #39740770
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
4d_monster, как направление раздумий - UniqueTable

убегаю
...
Рейтинг: 0 / 0
30.11.2018, 12:06
    #39740776
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
Панург,

Так задача как раз по тексту запроса и свойствам таблиц определить какая из упомянутых таблиц UniqueTable.
...
Рейтинг: 0 / 0
03.12.2018, 13:25
    #39741929
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
Пока что сделал так: по * OUTER JOIN доходим до начала цепочки - и вот она UniqueTable. Если среди JOIN
...
Рейтинг: 0 / 0
03.12.2018, 13:27
    #39741930
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
... Если среди JOIN есть [*] INNER JOIN - сдаёмся и прерываем поиск.
...
Рейтинг: 0 / 0
03.12.2018, 15:11
    #39742003
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
Создание в рабочей базе нескольких таблиц,а затем удаление части из них не есть хорошо.А почему нельзя,еще на этапе разработки БД,создать временную таблицу (или создавать по мере надобности),в которую помещать уже отобранные по какому-либо критерию(ям)записи и на ней создавать объект (форму,запрос,отчет)и очищать (удалять) её при закрытии объекта
...
Рейтинг: 0 / 0
03.12.2018, 15:42
    #39742025
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
sdku, так всё сложилось исторически. И описанный вами вариант, тоже присутствует.
Но сейчас задача просто перетащить всё на SQL Server.
...
Рейтинг: 0 / 0
03.12.2018, 16:27
    #39742048
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
4d_monster,

Так это же разовая задача-ручками (и быстрей и без особых сложностей)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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