|
|
|
| Имеется функция - для удаления из базы 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
|
| |
|
| |
|
|
|
| Как передавать сюда и проверяя удалять не нужные - n-наименований таблиц..... | |
|
| |
|
|
|
| если есть возможность неудаляемую таблицу (tblUserdata as Var) обозвать по маске MSys(any name) то задача упростится | |
|
| |
|
|
|
| Можно передавать в функцию:
1. строку из имен таблиц через разделители
2. массив имен таблиц
3. ссылку на коллекцию
4. ... | |
|
| |
|
|
|
| 3
только коллекцию нужно сначала заполнить
а вообще - есть на русьиморте такая прилада для удаленного гроханья таблиц | |
|
| |
|
|
|
| Ну да.
Впрочем, как и строку(1) и массив(2) и ...(4)
Вариант с именованием с маской, конечно, основательнее и проще в реализации. | |
|
| |
|
|
|
| со строкой (1) как-то больно непредсказуемо (фиг его знает что за строка получится) ИМХО - я бы не стал так делать
проще сделать коллекцию "Undeletabletables" и удалять все остальные n-наименований (исключая и MSys*, конечно. или включить MSys* в каллекцию неудаляемых, что алгоритмически четче)
чтобы не путать таблицы MSys* с другими неудаляемыми их можно обзывать USys* и внести соответсвующие изменение в маску
Mid(adoxTbl.Name, 2, 4) <> "Sys"
а вообще - временные "удаляемые" таблицы нужно делать во временных удаляемых БД и не "раздувать" рабочие и не плодить мусор в рабочих БД | |
|
| |
|
|
|
| а вообще - временные "удаляемые" таблицы нужно делать во временных удаляемых БД и не "раздувать" рабочие и не плодить мусор в рабочих БД
============================================
Я не пложу.........
=============================================
Я копирую базу и в ней удаляю лишние таблицы...........
Это типа переношу таблицы из одной базы во временный файл - для использования (экспорта) | |
|
| |
|
|
|
|
Я копирую базу и в ней удаляю лишние таблицы...........
|
понятно
как создается список таблиц подлежащих удалению?
впрочем лукас об этом уже спрашивал :) | |
|
| |
|
|
|
| Имена таблиц будут передаваться по мере необходимости 'n такая глоба функция которую все другие юзают по мере надобности....... | |
|
| |
|
|
|
|
Допустим
строку из имен таблиц через разделители
====================================
потом по одной выковыриваем........... нет.......
потом надо создать строку - условие
| |
|
| |
|
|
|
| 1. Откуда вообще берутся имена таблиц?
Выбор варианта зависит в том числе и от этого.
2. ...через разделители...по одной выковыриваем...
Нет. Скопом. Split. | |
|
| |
|
|
|
| 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 | |
|
| |
|
|
|
| в дебаг попали:
Табла1
Табла2
Табла3
Табла4
Табла5 | |
|
| |
|
|
|
| Имена таблиц будут передаваться по мере необходимости 'n такая глоба функция которую все другие юзают по мере надобности....... | |
|
| |
|
|
|
| Остаётся вопрос -как дропить ориентируясь на строку........
Если бы наоборот -было бы проще.......
берёшь по очееди и дропишь а как в данном случае??????? | |
|
| |
|
|
|
| Видимо вот так???
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
|
Как Вы считаете - работоспособно?
нет не так........ | |
|
| |
|
|
|
|
|
Как Вы считаете - работоспособно?
|
это называется "выпиливание" шаблоном по лобзику
берем таблицу и "пилим" ее стрингом с именами остающихся
не распилилась - выбрасываем и идем пилить следующую :)))
прикольно
ЗЫ
чуть поправил | |
|
| |
|
|
|
|
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
|
Так попробовал - работает исправно....
А как ещё можно??
или
А как нужно??? | |
|
| |
|
|
|
|
Так попробовал - работает исправно....
|
ну работает так работает :) не трогай
F1 Connection Close Method | |
|
| |
|
|
|
| У мну MSDN не стоит
А зачем мне клосить konnect ?
Загадками говорите........ | |
|
| |
|
|
|
|
А зачем мне клосить connect ?
|
ну не надо так не надо | |
|
| |
|
|
|
| Нет Вы скажите.....
Вы чего то недоговариваете
Вы со мной ваще не разговариваете
С другими - время разбазариваете
А мне намёки только валите
А так хотелося познать
Чего до сель не ведомо
Потом те знанья применять
Уверенно заведомо
ой куда это мну понесло.....
Я его и клосну | |
|
| |
|
|
|
| час, ты сам прекрасно во всем разбираешься, а умного учить - только портить :)))
кроме того, мы разными вещами занимаемся, разными инструментами пользуемся, разных привычек придерживаемся.
если мы начнем дискутировать вопросы конкретных реализаций "в глубину"
1) у нас за разговорами не останется времени на текущую работу
2) мы все равно будем говорить о разных /вещах /задачах /средах | |
|
| |
|
|
|
|
| давай лучше в болталке стехи песать :))) | |
|
| |
|
|
|
| нуууууууууууууууууууу
ну как скажешь
А я прогу пишу - ивот промблемки возникают из за тупости.......
потому и пришёл за советом............ | |
|
| |
|
|
|
| да нормально все. ну решил ты выпиливать стрингом - ОК - выпиливается и хорошо.
ну а для того чтобы разобраться в деталях и нюансах нужно больше сведений. | |
|
| |
|
|
|
|
| Спасибо за идеи и за помощь - Всё работает!!! | |
|
| |