Выборочно удалить много таблиц в Access?

Мне нужно удалить 175 из 180 таблиц в Access 2003 (используя базу данных формата Access 2000). Первое, что я попробовал, это перейти к списку таблиц и попытаться выбрать все, щелкнуть, удерживая клавишу Control, те, которые я хочу сохранить, и выбрать «Удалить». Однако оказывается, что вы можете выбрать только один за раз.

Затем я нашел способ получить список всех имен таблиц в виде простого текста и сделал кучу операторов drop с помощью Vim:

drop table table_1;
drop table table_2;
...
drop table table_175;

(Очевидно, это не настоящие имена.) Эти операторы прекрасно работают сами по себе (т. е. просто выполняются по одному, но когда я пытаюсь запустить 2 или более из них, я получаю сообщение об ошибке:

Syntax error in DROP TABLE or DROP INDEX.

Кажется, это противоречит цели. О, Аксесс... ты всегда заставляешь меня рвать на себе волосы.

Что мне не хватает, чтобы сделать эту работу? Любой процесс, который позволит мне сохранить те несколько таблиц, которые мне нужны для моих целей, был бы великолепен. (Однако я бы хотел избежать изучения Visual Basic.)


person Benjamin Oakes    schedule 12.02.2010    source источник


Ответы (3)


У Remou есть решение вашей проблемы, но в качестве предложения вы можете импортировать таблицы, которые хотите сохранить, в новый файл. Вы можете выбрать несколько файлов и их данные. Вы можете получить более чистый файл, если у вас не осталось много таблиц.

person JeffO    schedule 13.02.2010

Используйте VBA.

For Each tbl In CurrentDb.TableDefs
    If Left(tbl.Name,4) <> "Msys" Then
        s = "DROP TABLE " & tbl.Name
        CurrentDb.Execute s
    End If
Next

For i = ( CurrentDb.TableDefs.Count - 1 ) To 0 Step -1
    If Left(tbl.Name,4) <> "Msys" Then
        ''Debug.Print CurrentDb.TableDefs(i).Name
        CurrentDb.TableDefs.Delete CurrentDb.TableDefs(i).Name
    End If
Next

Возможно, вам придется предоставить массив или набор записей и повторить его, если вы хотите удалить определенные таблицы или если таблицы связаны.

person Fionnuala    schedule 12.02.2010
comment
Думаю, я мог бы написать что-нибудь, чтобы определить, какие таблицы следует удалить и в каком порядке, но это кажется немного выходящим за рамки исходного поста :) - person Fionnuala; 14.02.2010
comment
Если удаляются все таблицы, почему бы просто не удалить все связи в коде? - person David-W-Fenton; 14.02.2010
comment
Потому что там написано: мне нужно сбросить 175 из 180 столов - person Fionnuala; 14.02.2010
comment
Добавление кода для работы с, возможно, несуществующими отношениями может очень сильно затуманить проблему, более того, если дело доходит до удаления отношений, мне, вероятно, следует потратить время на поиск вопроса по этой теме. - person Fionnuala; 15.02.2010

Как описано выше, вообще говоря, мы используем объектную модель и VBA для удаления определений таблиц и их данных.

Вы не можете запускать пакеты SQL в Access, опять же, способ перебора нескольких операторов SQL находится в VBA.

Access не является СУБД на основе консоли, и вы не можете запускать пакетные сценарии, как в SQL Plus, и вы, безусловно, будете рвать на себе волосы, если попытаетесь.

Access — это контейнер приложений и инструмент анализа, и все процедурные приложения используют либо VBA, либо макросы, что значительно менее гибко, чем VBA. Вы получите максимальную отдачу от Access, если вы делаете некоторые знания VBA. Доступ чрезвычайно ограничен без VBA, а функции, к которым вы сможете получить доступ, — это простые специальные запросы.

person David Boyle    schedule 05.05.2011