|
|
Подключение всех таблиц внешней БД (DAO) v011 + Error Handler ON|OFF (+ Пример)
Private Const blnErrHandlerIsON As Boolean = True
Public Function LinkAllTables_MSADB_DAO(sSrcDBPath As String, Optional sLocalPrefix$ = "") As Long
Dim dbSrc As DAO.Database, tdfSrc As DAO.TableDef
Dim dbLocal As DAO.Database, tdfLocal As DAO.TableDef
Dim sSrcDBConnectionStr$, sSrcTableName$, sLocalTableName$
Dim iConut%
If blnErrHandlerIsON Then On Error GoTo LinkAllTables_MSADB_DAO_Err
Set dbLocal = CurrentDb
Set dbSrc = DBEngine.OpenDatabase(sSrcDBPath)
sSrcDBConnectionStr = ";DATABASE=" & sSrcDBPath
For Each tdfSrc In dbSrc.TableDefs
If tdfSrc.Attributes = 0 Then
sSrcTableName = tdfSrc.Name
sLocalTableName = sLocalPrefix & sSrcTableName
If DCount("*", "MSysObjects", "[Name]='" & sLocalTableName & "'") > 0 Then
Set tdfLocal = dbLocal.TableDefs(sLocalTableName)
tdfLocal.Connect = sSrcDBConnectionStr
tdfLocal.RefreshLink
Else
Set tdfLocal = dbLocal.CreateTableDef(sLocalTableName)
tdfLocal.Connect = sSrcDBConnectionStr
tdfLocal.SourceTableName = sSrcTableName
CurrentDb.TableDefs.Append tdfLocal
End If
iConut = iConut + 1
End If
Next tdfSrc
If iConut > 0 Then _
MsgBox "Все таблицы файла:" & vbCrLf & sSrcDBPath & vbCrLf & _
"Подключены в кол-ве: " & iConut & "шт.", vbInformation, "Подключение Таблиц"
LinkAllTables_MSADB_DAO_Bye:
On Error Resume Next
Set tdfSrc = Nothing: dbSrc.Close: Set dbSrc = Nothing
Set tdfLocal = Nothing: dbLocal.Close: Set dbLocal = Nothing
Err.Clear
Exit Function
LinkAllTables_MSADB_DAO_Err:
LinkAllTables_MSADB_DAO = Err.Number
Debug.Print "LinkAllTables_MSADB_DAO - Err on sSrcTableName:" & sSrcTableName
Resume LinkAllTables_MSADB_DAO_Bye
End Function
Public Sub DelConnectedTables()
Dim tbl As DAO.TableDef
Dim strPath As String
If blnErrHandlerIsON Then On Error GoTo DelConnectedTablesErr
For Each tbl In CurrentDb.TableDefs
If tbl.Connect <> "" Then
CurrentDb.TableDefs.Delete tbl.Name
End If
Next
CurrentDb.TableDefs.Refresh [/REM]
Application.RefreshDatabaseWindow
DoEvents
MsgBox "Все внешние таблицы успешно отключены.", vbInformation, "Пока!"
DelConnectedTablesBye:
On Error Resume Next
Set tbl = Nothing
Err.Clear
Exit Sub
DelConnectedTablesErr:
MsgBox "Произошла ошибка при удалении подключенных таблиц:" & vbCrLf & _
Err.Description, vbCritical
Resume DelConnectedTablesBye
End Sub
Private Sub DelTable(sTableName As String)
On Error Resume Next
CurrentDb.TableDefs.Delete sTableName
Err.Clear
End Sub
По умолчанию приложение ищет данные в фиксированной подпапке относительно себя (в данном случае подпапка: "DATA"), если не находит, то запрашивает новый путь и запоминает его для будущего использования.
MSA-2007 и выше ( 184 kB) Пример
|
|