3 / 3 / 0
Регистрация: 21.10.2012
Сообщений: 208

DROP TABLE

12.09.2013, 20:37. Показов 4662. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Как можно прописать в запросе (-управление?) удаление всех созданных таблиц (например: таб1,таб2,таб3...таб15) при этом необходимо оставить все экспортированные таблицы?
Просто в запросе указать все таблицы которые могут быть созданы если пользователь использует все запросы может вызвать ошибку, т.к. не все запросы мгли быть запущены при работе. Хочу уменьшать размер файла после завершения работы пользователем. Как это прописать?
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2013, 20:37
Ответы с готовыми решениями:

DROOP TABLE и CREATE TABLE в ACCESS
Как использовать конструкции DROOP TABLE и CREATE TABLE в ACCESS? собственно ситуация такова: есть локальная база на аксесе...

Drop table и Close existing connections
Добрый день. Как мне удалить скриптом БД так чтобы с начало были закрыты все соединения, а и потом только удаление БД. В интернете...

Необходимо ли очищать удаляемую таблицу перед использованием оператора drop table?
1) В учебнике Граббера по SQL говорится, что перед исопльзованием оператора DROP TABLE необходимо очистить удаляемую таблицу (DELETE...

8
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.09.2013, 20:57
А чем отличаются "созданные" таблицы от "экспортированных"? Названиями? Чем-то еще?

Если все "созданные" таблицы имеют регулярные названия, отличающиеся только номером - таб1,таб2,таб3...таб15, то можно в процедуре, в цикле обойти TableDefs по шаблону и удалить таблицы
Visual Basic
1
2
3
4
5
6
7
Dim db as dao.Database, i
set db=currentdb
For i = db.Tabledefs.count-1 to 0 step -1
  if db.Tabledefs(i).name="таб" & i then
    db.execute "drop table [" & "таб" & i & "]"
  end if
next
0
3 / 3 / 0
Регистрация: 21.10.2012
Сообщений: 208
12.09.2013, 21:53  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
А чем отличаются "созданные" таблицы от "экспортированных"? Названиями? Чем-то еще?

Если все "созданные" таблицы имеют регулярные названия, отличающиеся только номером - таб1,таб2,таб3...таб15, то можно в процедуре, в цикле обойти TableDefs по шаблону и удалить таблицы
Visual Basic
1
2
3
4
5
6
7
Dim db as dao.Database, i
set db=currentdb
For i = db.Tabledefs.count-1 to 0 step -1
  if db.Tabledefs(i).name="таб" & i then
    db.execute "drop table [" & "таб" & i & "]"
  end if
next
Созданные - это те которые создаются запросами при работе пользователя, назавания их разные (напр. SPHдинамика, было111день, Статистика и т.д.). Наличие их на момент завершения работы зависит от того, какие запросы запускал пользователь. Максимум - 24 названия
Экспортированные - связанные таблицы с сервера: "КодификаторДеталей", "КодификаторПростоев", "КодТПА", "База_литьё".... . Их 12-шт. Они всегда есть и должны быть.
Вот я думаю как прописать что-то типо такого:
---- Удалить все таблицы, кроме "КодификаторДеталей", "КодификаторПростоев", "КодТПА", "База_литьё"....
Спасибо.
0
1181 / 632 / 39
Регистрация: 30.05.2010
Сообщений: 715
12.09.2013, 23:26
Здравствуйте u_tarvo.
"..Как можно прописать в запросе .. удаление всех .. таблиц.." - в одном запросе MS Access никак,
т.к. SQL не процедурный язык и обработка массива или коллекции запросом в цикле не возможна.
mobile предложил реальное решение Вашей задачи в VBA, как вариант используйте следующую конструкцию:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub dropTable()
Const sQ = "SELECT Name FROM MSysObjects WHERE Left([Name],4)<>'MSys' AND Type=1 AND " + _
   "Name Not In ('КодификаторДеталей', 'КодификаторПростоев', 'КодТПА', 'База_литьё')"
Dim db, rs
Set db = CurrentDb: Set rs = db.OpenRecordset(sQ)
Do Until rs.EOF
    db.Execute "drop table [" & rs(0) & "]": rs.MoveNext
Loop
Set ds = Nothing
End Sub
она удалит все таблицы БД за исключением системных, прилинкованных (связанных) и указанных Вами.

"..Созданные.." все таблицы созданы, но у них нет свойств хранящих информацию - "..создана запросом при работе пользователя..".
"..Экспортированные - связанные таблицы с сервера .." - не стоит оправдывать не верную терминологию, это разные понятия.

Евгений.
1
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.09.2013, 23:47
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от u_tarvo Посмотреть сообщение
Созданные - это те которые создаются запросами при работе пользователя, назавания их разные (напр. SPHдинамика, было111день, Статистика и т.д.). Наличие их на момент завершения работы зависит от того, какие запросы запускал пользователь. Максимум - 24 названия
u_tarvo, прислушайтесь к советам, многократно озвученным на форуме: НЕ делайте лишних таблиц. НЕ делайте таблиц там, где данные можно получить запросом. У этих "созданных" таблиц ровно такой же функционал (и даже меньше) как и в комбинации запрос-форма. Ну, может быть за исключением вырожденных ситуаций, типа перекрестного запроса.
Вы создаете себе лишнюю дополнительную работу по обслуживанию таблиц, увеличиваете сложность разработки. А сложность не слабо коррелирует с вероятностью ошибки.
Кроме того база пухнет, накапливается мусор, который не всегда, к сожалению, можно безобидно вычистить. Не хочу каркать, но наступит время Ч, когда база внезапно лопнет под тяжестью мусора.
Не нужны эти таблицы, созданные запросами. Продумайте схему данных, интерфейс и поймете как запросто можно без них обойтись.
3
3 / 3 / 0
Регистрация: 21.10.2012
Сообщений: 208
13.09.2013, 00:02  [ТС]
Цитата Сообщение от Teslenko_EA Посмотреть сообщение
"..Созданные.." все таблицы созданы, но у них нет свойств хранящих информацию - "..создана запросом при работе пользователя..".
"..Экспортированные - связанные таблицы с сервера .." - не стоит оправдывать не верную терминологию, это разные понятия.

Евгений.
Евгений, спасибо.
Но мне кажется я только в одном ошибся - не экспортированные, а импортированные

А вот эту запись можно пояснить: WHERE Left([Name],4)<>'MSys' AND Type=1 AND
спасибо!

Добавлено через 12 минут
Цитата Сообщение от mobile Посмотреть сообщение
u_tarvo, прислушайтесь к советам, многократно озвученным на форуме: НЕ делайте лишних таблиц. НЕ делайте таблиц там, где данные можно получить запросом.
Спасибо! Я прислушиваюсь к ВАШИМ (касается всех форумчан) советам.
Это первая моя работа в Ацессе, (факультативно), осваиваю. Но эти таблицы - это необходимость и их (24) не так много по сравнению с запросами (250!!!), 10 форм, 20 отчетов и 50 макросов.
Мне очень интересно.
Спасибо!
0
3 / 3 / 0
Регистрация: 21.10.2012
Сообщений: 208
25.09.2013, 21:47  [ТС]
Цитата Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте u_tarvo.
"..Как можно прописать в запросе .. удаление всех .. таблиц.." - в одном запросе MS Access никак,
т.к. SQL не процедурный язык и обработка массива или коллекции запросом в цикле не возможна.
mobile предложил реальное решение Вашей задачи в VBA, как вариант используйте следующую конструкцию:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub dropTable()
Const sQ = "SELECT Name FROM MSysObjects WHERE Left([Name],4)<>'MSys' AND Type=1 AND " + _
   "Name Not In ('КодификаторДеталей', 'КодификаторПростоев', 'КодТПА', 'База_литьё')"
Dim db, rs
Set db = CurrentDb: Set rs = db.OpenRecordset(sQ)
Do Until rs.EOF
    db.Execute "drop table [" & rs(0) & "]": rs.MoveNext
Loop
Set ds = Nothing
End Sub
она удалит все таблицы БД за исключением системных, прилинкованных (связанных) и указанных Вами.
Здравствуйте!
Не стал создавать новую тему.
Как правильно вписать операцию очистки таблиц 'КодификаторДеталей', 'КодификаторПростоев', 'КодТПА' без удаления. При этом некоторые таблицы могут быть созданы, а некоторые нет при работе пользователя. Попробовал запрос на очистку, но там нужно чтобы таблица существовала. Это необходимо для уменьшения объема, но с сохранением настроек, т.к. некоторые запросы используют эти таблицы.
Хочу эту операцию (зачистку) провести при выходе из системы.
Спасибо!
0
1181 / 632 / 39
Регистрация: 30.05.2010
Сообщений: 715
28.09.2013, 21:24
Здравствуйте u_tarvo.
".. Попробовал запрос на очистку, но там нужно чтобы таблица существовала.."
действительно запросом очистить несуществующие таблицы проблематично.
но если незначительно переделать предложенную мной конструкцию, она будет выполнять
проверку существования таблиц и удалит из них данные:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub clearTable()
Const sQ = "SELECT Name FROM MSysObjects WHERE Name In ('КодификаторДеталей', 'КодификаторПростоев', 'КодТПА')"
Dim db, rs
Set db = CurrentDb: Set rs = db.OpenRecordset(sQ)
Do Until rs.EOF
    db.Execute "delete from [" & rs(0) & "]": rs.MoveNext
Loop
Set ds = Nothing
End Sub
".. для уменьшения объема .. Хочу эту операцию (зачистку) провести при выходе из системы.."
совет :
объём данных в БД эта операция безусловно уменьшит, но уменьшить размер файла БД с её
помощью не удастся. Размер файла можно уменьшить только выполнив сжатие БД.
Сжатие можно выполнить программно или вручную, но т.к. это не самая безопасная операция
сохранение резервной копии БД перед сжатием - ОБЯЗАТЕЛЬНО!!!

Евгений.
1
3 / 3 / 0
Регистрация: 21.10.2012
Сообщений: 208
28.09.2013, 23:17  [ТС]
Спасибо Евгений!
Я решил долго не думать и для каждой таблицы сделал запрос на очистку.
И прописал их в макросах при выходе из отчетов.
Все вроде работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2013, 23:17
Помогаю со студенческими работами здесь

Cannot drop or replace a type with type or table dependents
Привет . Борюсь с ошибкой CREATE OR REPLACE TYPE person_typ AS OBJECT ( name VARCHAR2(30) ) NOT FINAL / CREATE TYPE...

Как можно в <table id="tb1 </table> вписать w ??
У меня есть &lt;textarea id=&quot;t1 какой то текст &lt;/textarea&gt; Далее w=document.getElementById(&quot;t1&quot;).value.substr(0,5); И есть таблица...

Получение значения из определенной ячейки <table></table>
Помогите новичку получить значения из таблицы в richTextBox Получаю таблицу со страницы html вот так: HtmlElementCollection data...

select s odnoi table, and insert v drygyjy table
privet! mne nado sdelat backup s ASP.NET, kogda stirayt DB, no na vsaki slychay mne nado soxranit ety table. backup ne poxodit, mne nado...

Как правильно сделать построчное чтение txt файла, чтобы потом эти данные выводились в теге <table></table>?
У меня есть файл file.txt: Саша 12 руб. Рома 76 руб. Петя 120 руб. Маша 234 руб. Я пытаюсь создать функцию, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru