Хочу представить Вам функции, без которых нормальная жизнь программы на MS Access не возможно.
Их всего три:
CM_LT_AddAllExt() - добавляет в текущую базу ссылки на таблицы из mdb файла
CM_LT_AddAllExt_ODBC() - добавляет в текущую базу ссылки на ODBC таблицы на сервере
CM_LT_DelAll() - удаляет таблицы-ссылки из текущей базы
Они позволяют создать в интерфейсной базе ссылки на таблицы из базы с данным. У меня они запускаются каждый раз при запуске. Написаны они давным давно, но полезны до сих пор.
Текст функций:
view plain copy to clipboard print
Public Function CM_LT_AddAllExt(ByVal stPathToBase As String) As Long
' <Скоков С.А.> создана: 2004-02-05
' подлинковывает все таблицы из указанной базы
' проверяет существует ли подлинковываемая таблица в текущей как ссылка, то обновляется строка подключения.
' если же в тек. базе есть таблица с таким именем (не ссылка), то подлинковываемая таблица пропускается
' т.о. перед вызовом этой функции удалять линкованные таблицы не нужно
' вход: stPathToBase - путь и имя базы
' выход: количество не подлинкованных таблиц, в случае ошибки возвращает -1
On Error GoTo Err_
CM_LT_AddAllExt = 0
Dim tdf As TableDef
Dim db As Database
Dim bIsSysOrLink As Boolean
Dim stNameTbl As String
Dim lCountNotLinket As Long ' количество не подлинкованных таблиц
Dim stConnect As String
Dim dbCur As DAO.Database
Dim tdfNew As DAO.TableDef
Dim tdfsCur As DAO.TableDefs
stConnect = ";DATABASE=" & stPathToBase
Set dbCur = CurrentDb
Set tdfsCur = dbCur.TableDefs
'-- делаем масив таблиц в текущей базе
Dim masNameTbl() As String
Dim i As Long
tdfsCur.Refresh
ReDim masNameTbl(tdfsCur.count - 1)
i = 0
For Each tdf In tdfsCur
masNameTbl(i) = tdf.Name
i = i + 1
Next tdf
'-- коннектимся к базе
Set db = OpenDatabase(stPathToBase)
lCountNotLinket = 0
'-- линкуем
For Each tdf In db.TableDefs
bIsSysOrLink = (tdf.Attributes And dbSystemObject) Or _
(tdf.Attributes And dbHiddenObject) _
Or (tdf.Attributes And dbAttachedTable) ' системная или присеоединенная ли?
If Not bIsSysOrLink Then ' если не то что выше, то можно делать линк
stNameTbl = tdf.Name
'-- если такая таблица существует в текущей базе
If SerchStrInMas(masNameTbl, stNameTbl) <> -1 Then
'-- то проверяем подлинкованая ли? иначе пропускаем эту таблицу и переходим на следующую
If (tdfsCur(stNameTbl).Attributes And dbAttachedTable) Then