powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как удалить все таблицы из базы данных.
8 сообщений из 8, страница 1 из 1
Как удалить все таблицы из базы данных.
    #32846701
Sergei K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, определить названия всех имеющихся таблиц и произвести их удаление из базы.

Сейчас у меня работает такой блок, но с каждым разом появляются всё новые и новые таблицы, которые приходится прописывать....

======================================
Set dbs777 = CurrentDb()
dbs777.TableDefs.Delete "B1_part"
dbs777.TableDefs.Delete "B2_tovar"
....................
....................
....................
dbs777.TableDefs.Refresh
dbs777.Close
======================================

кроме этого имеются таблицы типа "Ошибки вставки" ; "Ошибки вставки1" ; "Ошибки вставки2" и т.д....

Как одним вахом определить название всех таблиц и загнать их в цикл удаления???

и неплохо бы после этого провести сжатие базы (программно!!! )...
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32846742
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то вроде того:
for each TD in dbs777.TableDefs
dbs777.TableDefs.delete td
next TD
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32846747
RVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32846750
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=147643&hl=tabledefs

если есть внешние ключи,их нужно не забыть удалить

я делаю вот так(для mdb - ADOX,для сиквела DDL)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
Public Function XTblAllDel(MyCat As ADOX.Catalog)
' удаление всех локальных таблиц с предвартельным удалением внешних ключей
Dim Mytable As ADOX.Table
Dim MyKey As ADOX.Key
Dim MyAmbar As Collection
Dim MyPoint As Variant
Dim MyRst As ADODB.Recordset
Dim MySql As String
Dim Ct As Long
Dim MySwop As String
' ветвление DDL
Select Case XSwADox(MyCat)
Case - 1 : Exit Function
Case  0 
'==================  DDL     - внешние ключи  =======================================
Set MyAmbar = New Collection
Set MyRst = New ADODB.Recordset
MySql = "select OBJECT_NAME ( id ) as Inna,OBJECT_NAME ( parent_obj ) AS anna  " & _
"from sysobjects where OBJECTPROPERTY ( id , 'IsForeignKey' )=1" 'имя ключа и его таблицы
MyRst.Open MySql, MyCat.ActiveConnection, adOpenStatic, adLockReadOnly
   Do Until MyRst.EOF
    MySwop = "ALTER TABLE " & CStr(MyRst( 1 )) & " DROP CONSTRAINT " & CStr(MyRst( 0 ))
       MyAmbar.Add MySwop
    MyRst.MoveNext
   Loop
MyRst.Close
Set MyRst = Nothing
For Each MyPoint In MyAmbar
   MyCat.ActiveConnection.Execute MyPoint 'удаляем все внешние ключи
   'Debug.Print MyPoint
Next MyPoint
Set MyAmbar = Nothing
'==================  DDL     - таблички  =======================================
Set MyAmbar = New Collection
Set MyRst = New ADODB.Recordset
MySql = "select OBJECT_NAME ( id ) as Inna from sysobjects where OBJECTPROPERTY ( id , 'IsUserTable' )=1" 'имя таблицы
MyRst.Open MySql, MyCat.ActiveConnection, adOpenStatic, adLockReadOnly
   Do Until MyRst.EOF
    MySwop = "DROP TABLE " & CStr(MyRst( 0 ))
       If UCase(CStr(MyRst( 0 ))) <> UCase("dtproperties") Then MyAmbar.Add MySwop
    MyRst.MoveNext
   Loop
MyRst.Close
Set MyRst = Nothing
For Each MyPoint In MyAmbar
   MyCat.ActiveConnection.Execute MyPoint 'удаляем все таблицы
   'Debug.Print MyPoint
Next MyPoint
Set MyAmbar = Nothing
Case  1  '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'=======================   внешние ключи     ==============
For Each Mytable In MyCat.Tables
       If Mytable.Type = "Table" Then
         Set MyAmbar = New Collection
          For Each MyKey In Mytable.Keys
             If MyKey.Type = adKeyForeign Then
               MyAmbar.Add MyKey.Name
             End If
          Next MyKey
                For Each MyPoint In MyAmbar
                    Mytable.Keys.Delete MyPoint
                Next MyPoint
         Set MyAmbar = Nothing
        End If
Next Mytable
'=======================   таблицы      ====================
Set MyAmbar = New Collection
For Each Mytable In MyCat.Tables
         If Mytable.Type = "Table" Then MyAmbar.Add Mytable.Name
Next Mytable
For Each MyPoint In MyAmbar
 MyCat.Tables.Delete MyPoint
Next MyPoint
Set MyAmbar = Nothing
'===============================================================
End Select
End Function
Public Function XSwADox(MyCat As ADOX.Catalog) As Variant
' возвращает 0 - DDl; 1 - ADOX;-1 - облом
Select Case MyCat.ActiveConnection.Provider
Case "SQLOLEDB.1": XSwADox =  0 
Case "Microsoft.Access.OLEDB.10.0": XSwADox =  0 
Case "Microsoft.Jet.OLEDB.4.0": XSwADox =  1 
Case "MSDASQL.1": XSwADox =  0 
Case Else: XSwADox = - 1 
End Select
End Function
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32846784
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sasha_1что-то вроде того:
for each TD in dbs777.TableDefs
dbs777.TableDefs.delete td
next TD

так все не удалит ...
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32846941
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim rst As ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Type)=1)AND ((MSysObjects.Flags)=0));"
Set rst = New ADODB.Recordset
rst.Open strSQL, CurrentProject.Connection
If rst.RecordCount >  0  Then
    rst.MoveFirst
    Do While Not rst.EOF
        CurrentProject.Connection.Execute "Drop table [" & rst!Name & "]"
        rst.MoveNext
    Loop
End If
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32847161
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander G:
судя по началу вопроса, где указано
Set dbs777 = CurrentDb()
речь идет о mdb
и соответственно
CurrentProject.Connection.Execute "Drop table ..."
не прокатит.
...
Рейтинг: 0 / 0
Как удалить все таблицы из базы данных.
    #32847173
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sasha_12 Alexander G:
судя по началу вопроса, где указано
Set dbs777 = CurrentDb()
речь идет о mdb
и соответственно
CurrentProject.Connection.Execute "Drop table ..."
не прокатит.
Про А97 не было. А для A2000 и выше нет проблем и в mdb.
В конце-концов переделать на DAO и CurrentDb несложно
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как удалить все таблицы из базы данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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