powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MSAccess ADO: как написать DROP TABLE tblMain если она существует?
17 сообщений из 17, страница 1 из 1
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845693
Как я заметил сиснтаксис MS SQL не катит.
А как надо?

Заранее спасибо.
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845719
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовКак я заметил сиснтаксис MS SQL не катит.
А как надо?

Заранее спасибо.
перед execute ставим
ON ERROR RESUME NEXT
или используем ADOX ,соответственно проверяя наличие таблицы перед удалением

P.S. не забудь убить внешние ключи при наличии целостности
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845732
Интересует, как без использования ADOX и без ON ERROR RESUME NEXT.
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845736
что то типа "IF EXISTS tblMain DROP TABLE tblMain"
Но Access IF не понимает.

не уж то нельзя?
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845744
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для проверки наличия таблицы - см. хелп по ADODB.Connection.OpenSchema

Хотя не понимаю таких людей, которым религия запрещает On Error Resume Next использовать там где это удобно.
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845773
Просто с On Error Resume Next все понятно.
Но я использую данный подход в крайнем случае, и всем советую.
Иначе удобной опцией VB "Error Trapping - Break on All Errors" трудно будет пользоваться.

Как бы все-таки SQL запросом написать?
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845834
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if exists(select * FROM INFORMATION_SCHEMA.Tables WHERE TABLE_NAME="MyTable" AND TABLE_TYPE="BASE TABLE") then
DROP "MyTable"
----------------------
INFORMATION_SCHEMA она для того и придумана.
Кстати, она есть и на MS SQL...
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32845906
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а в мдб она тоже есть?:)

SELECT Name FROM MSysObjects WHERE Name="DBL_ParamTest" (acc xp, 2003)
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32846401
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HummerКстати, а в мдб она тоже есть?:)

SELECT Name FROM MSysObjects WHERE Name="DBL_ParamTest" (acc xp, 2003)

Есть.
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32846476
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aleks2
А вот с этого момента поподробнее:)
Создаём пустой мдб, создаём табличку, сохраняем. Делаем запрос, копируем туда текст вашего запроса и что получаем?:)
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32846578
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван Абрамов
Просто с On Error Resume Next все понятно.
Но я использую данный подход в крайнем случае, и всем советую.

1 sql access от сиквела многим отличается
2 а чем проверка существования таблиц через ADOX плоха,например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function XTblTest(MyCat As ADOX.Catalog, tblName As String) As Boolean
Dim Mytable As ADOX.Table
XTblTest = False
For Each Mytable In MyCat.Tables
  If Mytable.Name = tblName Then
    XTblTest = True
    Exit For
  End If
Next Mytable
End Function
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32846711
1 sql access от сиквела многим отличается
согласен :)
2 а чем проверка существования таблиц через ADOX плоха,например
тем, что в данном VB6 проекте не испольуестся ADOX (нет на нее ссылки).
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32850338
medium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
TmpSql = "if Isnull(Object_Id('tempdb..##Analyse') ,0)<> 0 drop Table ##Analyse"
CurrentProject.Connection.Execute TmpSql
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32850359
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
'tempdb..##Analyse' Object_Id( )

похоже на sql сиквела - sql JET в mdb - вероятно не пойдет
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32850399
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shuhard
Object_id - встроенная функция в сиквеле:)
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32850626
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer2 Shuhard
Object_id - встроенная функция в сиквеле:)
гы - я и намекал ,что синтаксис сиквела и в mdb не катит
...
Рейтинг: 0 / 0
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
    #32850669
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все-таки отказ от ON Error Resume Next резко усложняет код.
(кстати, не важно, записаный с использованием DAO - объектов или ADO.)
В частности, при наличии связей между таблицами, удалять придется в последовательности "значала все дочерние, потом все ведущий".

"на адо" код, удаляющий пользовательские таблицы,
мог бы быть (приблизительно) таким.

Код: 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.
 Dim tRec As ADODB.Recordset
   
  Dim cNN As ADODB.Connection
  Dim strName As String
  Dim bDelete As Boolean
  Dim lngDeleteCounter As Long
  Dim jro As jro.JetEngine
  
  Set jro = New JetEngine
  
  Set cNN = CurrentProject.Connection
  
  
  Set tRec = cNN.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table"))
  
  On Error Resume Next
  
  Do
      lngDeleteCounter =  0 &
     Do While Not tRec.EOF
       strName = tRec.Collect( 2 )
       bDelete = (strName Like "*Def*")
       bDelete = bDelete Or (strName Like "*Que*")
       bDelete = bDelete Or (strName Like "*Object*")
       bDelete = Not bDelete
     
       If bDelete Then
        
         cNN.Execute ("DROP Table " & strName)
         lngDeleteCounter = lngDeleteCounter +  1 &
       End If
       tRec.MoveNext
     Loop
     If lngDeleteCounter =  0  Then Exit Do
     jro.RefreshCache cNN
     Set tRec = cNN.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table"))
   Loop While Not tRec.EOF

(с выражением лица)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MSAccess ADO: как написать DROP TABLE tblMain если она существует?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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