powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
12 сообщений из 12, страница 1 из 1
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
    #39740666
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть сложный многотабличный обновляемый запрос, то в большинстве случаев из него можно удалить строку.
Как можно определить из какой таблицы будет происходить удаление?

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

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

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

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

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

Код: 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
Как определить из какой таблицы в многотабличном обновляемом запросе Access удалит запись?
    #39740770
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster, как направление раздумий - UniqueTable

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

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

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


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