Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как удалить все таблицы из базы данных. / 8 сообщений из 8, страница 1 из 1
27.12.2004, 18:12:40
    #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
27.12.2004, 18:28:29
    #32846742
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить все таблицы из базы данных.
что-то вроде того:
for each TD in dbs777.TableDefs
dbs777.TableDefs.delete td
next TD
...
Рейтинг: 0 / 0
27.12.2004, 18:31:56
    #32846747
RVI
RVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить все таблицы из базы данных.
...
Рейтинг: 0 / 0
27.12.2004, 18:35:05
    #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
27.12.2004, 18:55:52
    #32846784
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить все таблицы из базы данных.
sasha_1что-то вроде того:
for each TD in dbs777.TableDefs
dbs777.TableDefs.delete td
next TD

так все не удалит ...
...
Рейтинг: 0 / 0
28.12.2004, 04:08:05
    #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
28.12.2004, 10:15:26
    #32847161
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить все таблицы из базы данных.
2 Alexander G:
судя по началу вопроса, где указано
Set dbs777 = CurrentDb()
речь идет о mdb
и соответственно
CurrentProject.Connection.Execute "Drop table ..."
не прокатит.
...
Рейтинг: 0 / 0
28.12.2004, 10:21:51
    #32847173
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить все таблицы из базы данных.
sasha_12 Alexander G:
судя по началу вопроса, где указано
Set dbs777 = CurrentDb()
речь идет о mdb
и соответственно
CurrentProject.Connection.Execute "Drop table ..."
не прокатит.
Про А97 не было. А для A2000 и выше нет проблем и в mdb.
В конце-концов переделать на DAO и CurrentDb несложно
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как удалить все таблицы из базы данных. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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