Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MSAccess ADO: как написать DROP TABLE tblMain если она существует? / 17 сообщений из 17, страница 1 из 1
27.12.2004, 11:50:32
    #32845693
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
Как я заметил сиснтаксис MS SQL не катит.
А как надо?

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

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

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

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

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

Как бы все-таки SQL запросом написать?
...
Рейтинг: 0 / 0
27.12.2004, 12:47:04
    #32845834
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
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
27.12.2004, 13:15:26
    #32845906
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
Кстати, а в мдб она тоже есть?:)

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

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

Есть.
...
Рейтинг: 0 / 0
27.12.2004, 16:34:03
    #32846476
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
2 aleks2
А вот с этого момента поподробнее:)
Создаём пустой мдб, создаём табличку, сохраняем. Делаем запрос, копируем туда текст вашего запроса и что получаем?:)
...
Рейтинг: 0 / 0
27.12.2004, 17:10:37
    #32846578
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
Иван Абрамов
Просто с 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
27.12.2004, 18:14:47
    #32846711
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
1 sql access от сиквела многим отличается
согласен :)
2 а чем проверка существования таблиц через ADOX плоха,например
тем, что в данном VB6 проекте не испольуестся ADOX (нет на нее ссылки).
...
Рейтинг: 0 / 0
29.12.2004, 17:24:04
    #32850338
medium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
Код: plaintext
1.
TmpSql = "if Isnull(Object_Id('tempdb..##Analyse') ,0)<> 0 drop Table ##Analyse"
CurrentProject.Connection.Execute TmpSql
...
Рейтинг: 0 / 0
29.12.2004, 17:32:05
    #32850359
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
автор
'tempdb..##Analyse' Object_Id( )

похоже на sql сиквела - sql JET в mdb - вероятно не пойдет
...
Рейтинг: 0 / 0
29.12.2004, 17:47:29
    #32850399
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
2 Shuhard
Object_id - встроенная функция в сиквеле:)
...
Рейтинг: 0 / 0
29.12.2004, 21:57:28
    #32850626
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
Hummer2 Shuhard
Object_id - встроенная функция в сиквеле:)
гы - я и намекал ,что синтаксис сиквела и в mdb не катит
...
Рейтинг: 0 / 0
30.12.2004, 00:56:50
    #32850669
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSAccess ADO: как написать DROP TABLE tblMain если она существует?
все-таки отказ от 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MSAccess ADO: как написать DROP TABLE tblMain если она существует? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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