Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с функцией
 
 автор: час   (21.01.2010 в 19:13)   личное сообщение
 
 

Имеется функция - для удаления из базы mdb всех таблиц, кроме переданой в эту функцию в качестве аргумента...



Public Function FUN_DELETE_NOT_TABLE(CONNECT As Connection, STR_TABLE_NAME As String)
' удаление всех таблиц из базы, кроме таблицы  STR_TABLE_NAME
' CONNECT например GLB_con_DATA_DB
Dim adoxCat As Object
Dim adoxTbl As Object

Set adoxCat = CreateObject("ADOX.Catalog")
Set adoxTbl = CreateObject("ADOX.Table")

Set adoxCat.ActiveConnection = CONNECT
'CONNECT.Execute "DROP TABLE " & "Name" ' Удаление таблицы
'Пробежим по таблицам проверяем имена всех таблиц
   For Each adoxTbl In adoxCat.Tables
      If adoxTbl.Name <> STR_TABLE_NAME And Mid(adoxTbl.Name, 1, 4) <> "MSys" Then       ' наличие таблицы
         CONNECT.Execute "DROP TABLE " & adoxTbl.Name ' Удаление таблицы
      End If
   Next adoxTbl
   
Set adoxCat = Nothing
Set adoxTbl = Nothing

End Function

  Ответить  
 
 автор: час   (21.01.2010 в 19:14)   личное сообщение
 
 

Как передавать сюда и проверяя удалять не нужные - n-наименований таблиц.....

  Ответить  
 
 автор: Explorer   (21.01.2010 в 19:41)   личное сообщение
 
 

если есть возможность неудаляемую таблицу (tblUserdata as Var) обозвать по маске MSys(any name) то задача упростится

  Ответить  
 
 автор: Lukas   (21.01.2010 в 19:42)   личное сообщение
 
 

Можно передавать в функцию:
1. строку из имен таблиц через разделители
2. массив имен таблиц
3. ссылку на коллекцию
4. ...

  Ответить  
 
 автор: Explorer   (21.01.2010 в 19:49)   личное сообщение
 
 

3

только коллекцию нужно сначала заполнить

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

  Ответить  
 
 автор: Lukas   (21.01.2010 в 19:53)   личное сообщение
 
 

Ну да.
Впрочем, как и строку(1) и массив(2) и ...(4)
Вариант с именованием с маской, конечно, основательнее и проще в реализации.

  Ответить  
 
 автор: Explorer   (21.01.2010 в 20:10)   личное сообщение
 
 

со строкой (1) как-то больно непредсказуемо (фиг его знает что за строка получится) ИМХО - я бы не стал так делать

проще сделать коллекцию "Undeletabletables" и удалять все остальные n-наименований (исключая и MSys*, конечно. или включить MSys* в каллекцию неудаляемых, что алгоритмически четче)

чтобы не путать таблицы MSys* с другими неудаляемыми их можно обзывать USys* и внести соответсвующие изменение в маску

Mid(adoxTbl.Name, 2, 4) <> "Sys"

а вообще - временные "удаляемые" таблицы нужно делать во временных удаляемых БД и не "раздувать" рабочие и не плодить мусор в рабочих БД

  Ответить  
 
 автор: час   (21.01.2010 в 20:23)   личное сообщение
 
 

а вообще - временные "удаляемые" таблицы нужно делать во временных удаляемых БД и не "раздувать" рабочие и не плодить мусор в рабочих БД
============================================
Я не пложу.........
=============================================
Я копирую базу и в ней удаляю лишние таблицы...........

Это типа переношу таблицы из одной базы во временный файл - для использования (экспорта)

  Ответить  
 
 автор: Explorer   (21.01.2010 в 20:29)   личное сообщение
 
 


Я копирую базу и в ней удаляю лишние таблицы...........



понятно

как создается список таблиц подлежащих удалению?
впрочем лукас об этом уже спрашивал :)

  Ответить  
 
 автор: час   (21.01.2010 в 20:35)   личное сообщение
 
 

Имена таблиц будут передаваться по мере необходимости 'n такая глоба функция которую все другие юзают по мере надобности.......

  Ответить  
 
 автор: час   (21.01.2010 в 19:54)   личное сообщение
 
 


Допустим
строку из имен таблиц через разделители
====================================
потом по одной выковыриваем........... нет.......
потом надо создать строку - условие

  Ответить  
 
 автор: Lukas   (21.01.2010 в 20:09)   личное сообщение
 
 

1. Откуда вообще берутся имена таблиц?
Выбор варианта зависит в том числе и от этого.

2. ...через разделители...по одной выковыриваем...
Нет. Скопом. Split.

  Ответить  
 
 автор: час   (21.01.2010 в 20:13)   личное сообщение
 
 

Private Sub Command1_Click()
' Считаем число и имена таблиц
Dim stroka As String ' строчка таблиц
Dim retval ' возвращаемое значение
stroka = "Табла1, Табла2, Табла3, Табла4, Табла5"
retval = Split(stroka, ",")
MsgBox "колич. таблиц = " _
& UBound(retval)
Dim F As Long
For F = 0 To UBound(retval)
Debug.Print retval(F)
Next F
End Sub

  Ответить  
 
 автор: час   (21.01.2010 в 20:14)   личное сообщение
 
 

в дебаг попали:

Табла1
Табла2
Табла3
Табла4
Табла5

  Ответить  
 
 автор: час   (21.01.2010 в 20:15)   личное сообщение
 
 

Имена таблиц будут передаваться по мере необходимости 'n такая глоба функция которую все другие юзают по мере надобности.......

  Ответить  
 
 автор: час   (21.01.2010 в 20:17)   личное сообщение
 
 

Остаётся вопрос -как дропить ориентируясь на строку........
Если бы наоборот -было бы проще.......
берёшь по очееди и дропишь а как в данном случае???????

  Ответить  
 
 автор: час   (21.01.2010 в 20:27)   личное сообщение
 
 

Видимо вот так???

STR_TABLE_NAME = "Табла1, Табла2, Табла3, Табла4, Табла5, MSys"



Public Function FUN_DELETE_NOT_TABLE(CONNECT As Connection, STR_TABLE_NAME As String)
' удаление всех таблиц из базы, кроме таблиц строки  STR_TABLE_NAME
' CONNECT например GLB_con_DATA_DB
Dim adoxCat As Object
Dim adoxTbl As Object
Dim retval 
Set adoxCat = CreateObject("ADOX.Catalog")
Set adoxTbl = CreateObject("ADOX.Table")

Set adoxCat.ActiveConnection = CONNECT
'CONNECT.Execute "DROP TABLE " & "Name" ' Удаление таблицы
'Пробежим по таблицам проверяем имена всех таблиц
   For Each adoxTbl In adoxCat.Tables

 retval = Split(STR_TABLE_NAME, adoxTbl.Name)

      if  UBound(retval) = 0 then
         CONNECT.Execute "DROP TABLE " & adoxTbl.Name ' Удаление таблицы
      End If

   Next adoxTbl
   
Set adoxCat = Nothing
Set adoxTbl = Nothing

End Function


Как Вы считаете - работоспособно?
нет не так........

  Ответить  
 
 автор: Lukas   (21.01.2010 в 20:50)   личное сообщение
 
 

Нет.

  Ответить  
 
 автор: Explorer   (21.01.2010 в 20:54)   личное сообщение
 
 



Next adoxTbl 


Как Вы считаете - работоспособно?





это называется "выпиливание" шаблоном по лобзику

берем таблицу и "пилим" ее стрингом с именами остающихся
не распилилась - выбрасываем и идем пилить следующую :)))

прикольно

ЗЫ
чуть поправил

  Ответить  
 
 автор: час   (21.01.2010 в 20:57)   личное сообщение
 
 



Public Function FUN_DELETE_TABLE_123(CONNECT As Connection, STR_TABLE_NAME As String)
' удаление всех таблиц из базы, кроме таблиц из строки  STR_TABLE_NAME
'STR_TABLE_NAME = "Табла1, Табла2, Табла3, Табла4, Табла5"
' CONNECT например GLB_con_DATA_DB
Dim adoxCat As Object
Dim adoxTbl As Object
Dim retval

Set adoxCat = CreateObject("ADOX.Catalog")
Set adoxTbl = CreateObject("ADOX.Table")
Set adoxCat.ActiveConnection = CONNECT

'Пробежим по таблицам проверяем имена всех таблиц
   For Each adoxTbl In adoxCat.Tables
      retval = Split(STR_TABLE_NAME, adoxTbl.Name)

      If UBound(retval) = 0 And Mid(adoxTbl.Name, 1, 4) <> "MSys" Then
         CONNECT.Execute "DROP TABLE " & adoxTbl.Name ' Удаление таблицы
      Debug.Print adoxTbl.Name
         
      End If

   Next adoxTbl
   
Set adoxCat = Nothing
Set adoxTbl = Nothing

End Function



Так попробовал - работает исправно....

А как ещё можно??
или
А как нужно???

  Ответить  
 
 автор: Explorer   (21.01.2010 в 21:10)   личное сообщение
 
 


Так попробовал - работает исправно....



ну работает так работает :) не трогай

F1 Connection Close Method

  Ответить  
 
 автор: час   (21.01.2010 в 21:11)   личное сообщение
 
 

У мну MSDN не стоит
А зачем мне клосить konnect ?
Загадками говорите........

  Ответить  
 
 автор: Explorer   (21.01.2010 в 21:17)   личное сообщение
 
 


А зачем мне клосить connect ?



ну не надо так не надо

  Ответить  
 
 автор: час   (21.01.2010 в 21:19)   личное сообщение
 
 

Нет Вы скажите.....
Вы чего то недоговариваете
Вы со мной ваще не разговариваете
С другими - время разбазариваете
А мне намёки только валите
А так хотелося познать
Чего до сель не ведомо
Потом те знанья применять
Уверенно заведомо

ой куда это мну понесло.....
Я его и клосну

  Ответить  
 
 автор: Explorer   (21.01.2010 в 21:35)   личное сообщение
 
 

час, ты сам прекрасно во всем разбираешься, а умного учить - только портить :)))

кроме того, мы разными вещами занимаемся, разными инструментами пользуемся, разных привычек придерживаемся.

если мы начнем дискутировать вопросы конкретных реализаций "в глубину"

1) у нас за разговорами не останется времени на текущую работу
2) мы все равно будем говорить о разных /вещах /задачах /средах

  Ответить  
 
 автор: час   (21.01.2010 в 21:37)   личное сообщение
 
 



Извини......

  Ответить  
 
 автор: Explorer   (21.01.2010 в 21:37)   личное сообщение
 
 

давай лучше в болталке стехи песать :)))

  Ответить  
 
 автор: час   (21.01.2010 в 22:01)   личное сообщение
 
 

нуууууууууууууууууууу
ну как скажешь
А я прогу пишу - ивот промблемки возникают из за тупости.......
потому и пришёл за советом............

  Ответить  
 
 автор: Explorer   (21.01.2010 в 22:12)   личное сообщение
 
 

да нормально все. ну решил ты выпиливать стрингом - ОК - выпиливается и хорошо.

ну а для того чтобы разобраться в деталях и нюансах нужно больше сведений.

  Ответить  
 
 автор: час   (21.01.2010 в 22:22)   личное сообщение
 
 



На что у мну ума хватает!!!
То руки в коде и клепают!!!

  Ответить  
 
 автор: час   (22.01.2010 в 09:32)   личное сообщение
 
 

Спасибо за идеи и за помощь - Всё работает!!!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList