1

Тема: VBS/SQL: Одновременное удаление из 2-х и более таблиц

Коллеги, приветствую !
Вопрос следующий, нормально производится удаление из каждой по отдельности таблицы, хотел сделать так, чтобы сразу же удаляло из обоих таблиц, но комп падает в ступор, кто знает, в чём дело ?
Необходимые индексы созданы.
Код следующий

Set Engine = CreateObject("DAO.DBEngine.36")
Set MDB=Engine.OpenDatabase ("C:\Inetpub\wwwroot\invent\invent.mdb")
arm="host07"
mdb.Execute("delete a.*,b.* from primary a,software b where a.arm=b.arm='" & arm & "'")
Времени не хватает... :-(

2

Re: VBS/SQL: Одновременное удаление из 2-х и более таблиц

Добрый день.

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

Для теста сделал две таблицы: tabARM и tabSOFT(Access 2003). Для ключей в каждой отдельное поле(счётчик), в обоих таблицах есть поле ARM. В tabARM поле ARM сделал уникальным индексом. Далее в схеме данных связал эти таблицы по полю ARM (один tabARM.arm) к (многим tabSOFT.arm) - если я правильно понял суть таблиц, то в первой список рабочих мест, во второй список софта на этих рабочих местах? В свойствах связи включил каскадное удаление и обновление связанных записей. Теперь при удалении записи о рабочем месте из первой таблицы также удаляются связанные записи из второй(обновление за компанию включил, полагаю удаляться будет и без каскадного обновления):


DELETE * FROM tabARM WHERE tabARM.arm="002"

3 (изменено: Евген, 2011-04-28 11:10:20)

Re: VBS/SQL: Одновременное удаление из 2-х и более таблиц

2 BeS Yara у меня такой вариант не прокатит...
я не все подробности описал, для Вашего варианта мне нужно 2 ключевых поля, а такого не бывает
Меня интересует только вариант решения SQL командой...

Времени не хватает... :-(

4 (изменено: BeS Yara, 2011-04-28 11:31:48)

Re: VBS/SQL: Одновременное удаление из 2-х и более таблиц

Ключевых полей было по одному на таблицу. Впрочем не существенно - разбил схему, удалил ключевые поля(в таблицах больше ключей нет). Осталось только индексное поле в таблице tabARM. Снова сделал связь один к многим с каскадным удалением связанных записей. Закрыл mdb-шку.


Set Engine = CreateObject("DAO.DBEngine.36")
Set MDB=Engine.OpenDatabase ("c:\aScripts\vbs\MDB\db5.mdb")
arm="002"
mdb.Execute("DELETE * FROM tabARM WHERE arm=""" & arm & """")

Запустил скрипт. Открыл mdb - ни в одной таблице записей по arm="002" нет.

Или в первой таблице колонка arm содержит не уникальные записи?
P.S. по sql-команде ещё подумаю

5

Re: VBS/SQL: Одновременное удаление из 2-х и более таблиц

Почитал хэлп к аксесу - там Delete работает с одной таблицей.
Почитал BOL, MSDN, sql.ru по Transact-SQL - в DELETE может упоминаться несколько таблиц после второго FROM(в качестве критериев для выбора удаляемых записей), но удаляться данные будут только из одной таблицы, указанной после DELETE.
how to delete records from multiple tables
Похоже в T-SQL также подобное можно реализовать с помощью каскадного удаления.

Вариант приведённый в википедии не знаю для какого диалекта приведён

6

Re: VBS/SQL: Одновременное удаление из 2-х и более таблиц

Угу, спасибки !
Вопрос снят.

Времени не хватает... :-(