|
|
|
| Как проверить есть ли в базе таблица или нет?
Это нужно для того чтобы определиться с вариантами действий
1, есть - 1 вариант действий
2,нет - второй вариант действий | |
|
| |
|
|
|
| обратиться к таблице по имени и
1 выполнить действие 1
2 обработать ошибку и выполнить действие 2 | |
|
| |
|
|
|
| Дело в том что я не знаю как кней обратиться
я уже думал может так IsNull([Table]![Таблица1]) | |
|
| |
|
|
|
| попробуйте вот так
Public Function IsTable(ZP_NameTable As String) As Long
' проверка на наличие определенной таблицы
' ZP_NameTable - наименование таблицы
Application.Echo False 'отключаем обновление экрана
On Error Resume Next
DoCmd.OpenTable ZP_NameTable
If Err.Number = 0 Then
DoCmd.Close acTable, ZP_NameTable
Else
IsTable = Err.Number
End If
Application.Echo True
End Function 'IsTable
|
| |
|
| |
|
|
|
| Ошибку так выдает на открытие, форма всплывающая, может в этом дело? | |
|
| |
|
|
|
| попробуй этот код (подключи библиотеку ADO)
Dim cnn As ADODB.Connection
Dim rstDictionary As ADODB.Recordset
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
Dim col As ADOX.Column
Set cnn = New ADODB.Connection
Set cnn = CurrentProject.Connection
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = CurrentProject.Connection
For Each tbl In cat.Tables
For Each col In tbl.Columns
Debug.Print "++++++++++++++++++++++"
Debug.Print tbl.Name
Debug.Print "----------------------"
Debug.Print col.Name
Debug.Print col.Type
Next col
Next tbl
|
| |
|
| |
|
23 Кб. |
|
| А Какую из АДО? | |
|
| |
|
17 Кб. |
|
| Мне хватило самой нижней 2,8
| |
|
| |
|
11 Кб. |
|
| Посмотри пример. | |
|
| |
|
|
|
| ShadowOfSun
Честно я не понял здесь,
плюсы и минусы - это таблицы?
На кнопке Всплывающая подсказка - Восстановить запись
а Debug.Printы - редактируем?
ЧАС
В примере True False, а
У Меня вылетает Если есть, то Месага 0,
Если нет, то Месага 7874
То что надо Спасибо Час! | |
|
| |
|
|
|
| вместо Debug.Print'ов напиши
if "ИмяТвоейТаблицы" = tbl.Name then tblKey=True
перед поиском выставь tblKey=False
а в конце процедуры результат будет
если таблица есть tblKey=True
если таблицы нет tblKey=False
P. S. Час, по моему писать программы на обработчиках ошибок это близко к парковке по звуку "Бумм" | |
|
| |
|
|
|
|
| Буду писать вот так:
'Возвращает true если есть таблица в базе
Function НаличиеТаблицыБазы(str As String) As Boolean
НаличиеТаблицыБазы = False
On Error GoTo Met1
Dim SearchString As String
SearchString = CurrentDb.TableDefs(str).Connect
НаличиеТаблицыБазы = True
Exit Function
Met1:
НаличиеТаблицыБазы = False
End Function
|
Ан нет - тожа на ошибке обращения выходит..........
ТАДА... | |
|
| |
|
|
|
| А вообщето вопрос обширный
Вопрос: Проверка существования таблицы в базе данных
Совет:
Public Function CheckTable(strtblName As String) As Boolean
Dim tbl As dao.TableDef
On Error Resume Next
Set tbl = CurrentDb().TableDefs(strtblName)
If err.Number = 0 Then
CheckTable = True
Else
CheckTable = False
End If
CheckTable_EXIT:
Exit Function
CheckTable_ERR:
Select Case err.Number
Case Else
MsgBox err.Description & "(" & err.Number & ") в процедуре CheckTable"
Resume CheckTable_EXIT
End Select
End Function
osmor
==================
Dim ao As AccessObject
For Each ao In CurrentData.AllTables
MsgBox ao.Name
Next
==================
Переделка из Кена Гетца
Public Function adhExists(strName As String) As Boolean
Dim dbs As Database
Dim ctr As Container
Dim doc As Document
Set dbs = CurrentDb
On Error Resume Next
Set ctr = dbs.Containers!Tables
Set doc = ctr(strName)
'Debug.Print doc.LastUpdated
Set doc = Nothing
Set ctr = Nothing
Set dbs = Nothing
adhExists = (Err.Number = 0)
Err.Clear
End Function
Anatoliy
==================
Еще вариант
Function IsTableInDB(db As Database, tbl As String) As Integer
Dim tdf As TableDef
On Error GoTo IsTableInDB_Err
Set tdf = db.TableDefs(tbl)
IsTableInDB = True
Exit Function
IsTableInDB_Err:
IsTableInDB = False
End Function
StaleX
==================
ща попробую функцию изобразить
Function Проверка_существования_таблицы(mytdf as string) As Boolean
dim tdf As TableDef
For Each tdf In carrentdb.TableDefs
If tdf.Name = mytdf Then mytdf = true
Next tdf
End Function
filosof
==================
Для А2000 и выше
Dim aob As AccessObject
Dim bol As Boolean
For Each aob In CurrentData.AllTables
If aob.Name = "Клиенты" Then
bol = True
Exit For
End If
Next
MsgBox bol
ДиД
==============
можно так
Public Function IsTable(strNameTbl As String) As Boolean
'***************************************************************************************
' Возвращает истину если таблица есть в базе и ложь если нет
' Комментарий : strNameTbl - имя искомой таблицы
'***************************************************************************************
On Error GoTo IsTable_ERR
IsTable = False
Dim tbl As DAO.TableDef
On Error Resume Next
Set tbl = CurrentDb.TableDefs(strNameTbl)
If Err = 0 Then IsTable = True
Resume 0
IsTable_EXIT:
Exit Function
IsTable_ERR:
Select Case Err.Number
Case Else
MsgBox Err.Description & "(" & Err.Number & ") в процедуре IsTable"
Resume IsTable_EXIT
End Select
End Function
или пробежатся по коллекции tabledefs или посмотреть системную таблицу
Я на прошлой неделе отвечал на этот вопрос, поищите
osmor
===========
А чем плохо это?
Function ЕстьТакаяТаблица (ИмяТаблицы as String) As Boolean
Dim oTable As TableDef
On Error Resume Next
Set oTable=CurrentDB.TableDefs("ИмяТаблицы")
If Err.Number<>0 Then
Err.Clear
ЕстьТакаяТаблица=False
Else
ЕстьТакаяТаблица=True
End If
End Function
ЛМВ
===========================
Public Function ThereIsTable(strNameTable As String) As Boolean
Dim tdf As TableDef
On Error Resume Next
Set tdf = CurrentDb.TableDefs(strNameTable)
ThereIsTable = (Err.Number = 0)
Set tdf = Nothing
End Function | |
|
| |
|
|
|
| Так что - есть выбор......... | |
|
| |
|
|
|
| или вот ещё круче
Вопрос: Проверяет наличие таблицы как внутри базы, так и во внешней
Совет:
Public Function ExistsTable(strNameTable As String, Optional ByRef strResult As String = "") As Byte
On Error Resume Next
DoCmd.SetWarnings False
DoCmd.RunSQL "Insert INTO " & strNameTable & " SELECT * FROM " & strNameTable & " WHERE 0=1"
Select Case Err.Number
Case 0
ExistsTable = 0
strResult = "Таблица существует"
Case 3078
ExistsTable = 1
strResult = "Таблица отсутствует"
Case 3024, 3011
ExistsTable = 2
strResult = "Не найден файл"
Case 3044
ExistsTable = 3
strResult = "Указан ошибочный путь"
Case 3343
ExistsTable = 4
strResult = "Нераспознаваемый формат базы данных"
Case 3321
ExistsTable = 5
strResult = "Не задана база данных в строке подключения"
Case Else
ExistsTable = 6
strResult = "Неизвестная ошибка"
End Select
Err.Clear
DoCmd.SetWarnings True
End Function
============================================end================================ | |
|
| |
|
|
|
| или вот тоже вариант неплохой
Вопрос: Функция проверки существования таблицы или запроса в текущей базе данных
Совет:
Аргументы: strObjName - имя объекта, strObjType - тип проверяемого объекта
Назначение: Проверяет существует ли таблица или запрос с именем strObjName в текущей базе данных
Возвращает: Результат: True - обект существует False - обьекта с таким именем нет
Public Function ObjExists(strObjType As String, strObjName As String) As Boolean
On Error Resume Next
Select Case strObjType
Case "Table"
ObjExists = (CurrentDb.TableDefs(strObjName).Name = strObjName)
Case "Query"
ObjExists = (CurrentDb.QueryDefs(strObjName).Name = strObjName)
Case Else
ObjExists = (CurrentDb.Containers(strObjType & "s").Documents(strObjName).Name = strObjName)
End Select
Err.Clear
End Function | |
|
| |
|
|
|
| Можно продолжить ,
но у ВОЛШЕБНИКА наверное всё нормально работает
так что отдохнём | |
|
| |
|
|
|
| Да, вариантов много
| |
|
| |
|
|
|
|
по моему писать программы на обработчиках ошибок это близко к парковке по звуку "Бумм"
|
вообще-то да :)))
но с другой стороны обращаться к таблице не зная есть она или нет, это все равно что вызывать пожарных набирая телефонный номер наугад... | |
|
| |
|
|
|
| FAQ
http://hiprog.com/index.php?option=com_content&task=blogcategory&id=119&Itemid=159
Q4 | |
|
| |