powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подключение таблиц
9 сообщений из 9, страница 1 из 1
Подключение таблиц
    #32498528
Noboris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как при загрузке базы данных проверять наличие файла связанной таблиц, и при его отсутствии устанавливать новый путь
...
Рейтинг: 0 / 0
Подключение таблиц
    #32498607
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
Public Sub MyStart()
Dim MyDb As Database
Dim tdf As TableDef
Dim Str As Variant
Dim Inna As String
Dim test As Variant
Dim Name As String
Dim Out As String
Dim SourceName As String
Dim Connect As String
Dim strFileName As String
Dim tdfArray( 256 ,  4 ) As String
Dim Ct As Long
Dim II As Long
Dim Flagsearch As Variant
Dim Len_inna As Variant
Set MyDb = CurrentDb
II =  0 
'цикл по табличкам формирует массив длинной Ct содержащий Name,SourceTableName,Connect
For Each tdf In MyDb.TableDefs
     If Len(tdf.SourceTableName) > 1 Then
         Str = tdf.Connect
         Str = Right(Str, Len(Str) - 10)
On Error GoTo ErrorHandler
         Len_inna = Len(Dir(Str))
       
         If Len_inna < 5 Then
               Connect = tdf.Connect
               SourceName = tdf.SourceTableName
               Name = tdf.Name
               tdfArray(II, 0) = Name
               tdfArray(II, 1) = SourceName
               tdfArray(II, 2) = Connect
               II = II + 1
        End If
     End If
Next tdf
Ct = II
           Flagsearch = 0
           If Ct > 0 Then test = MsgBox("Не найдены присоединенные таблицы    Yes - игноре NO - переприсоединить Cansel - общий путь", vbYesNoCancel)
           If (test = 6) Then GoTo alless
           If (test = 2) Then Flagsearch = 1
For II = 0 To Ct - 1
               Name = tdfArray(II, 0)
               SourceName = tdfArray(II, 1)
               Connect = tdfArray(II, 2)
               If Flagsearch < 2 Then
                   If Flagsearch = 1 Then Flagsearch = 2
                   Out = "Было:" & "имя-->" & Name & "табличка---->" & SourceName & "путь к mdb -->" & Right(Connect, Len(Connect) - 10)
                   MsgBox (Out)
                   strFileName = OpenFile(".", "")
               End If
                    If (Len(strFileName) > 5) Then
                           Connect = strFileName
                           MyDb.TableDefs.Delete (Name) ' при удалении
                           Call MyAddtable(Name, SourceName, Connect)
                    End If
Next II
alless:
Out = Out
Exit Sub
ErrorHandler:   ' Обработчик ошибок.
Select Case Err.Number
Case 68 '  "Ошибка " путь не верен".
             Len_inna =  0 
             Resume Next
End Select

End Sub

...
Рейтинг: 0 / 0
Подключение таблиц
    #32498679
Гы
...
MyDb.TableDefs.Delete (Name) ' при удалении
Call MyAddtable(Name, SourceName, Connect)
...
и как мы потом узнаем, (при неудаче в MyAddtable), чего нам при следующем запуске надо подключить ? (бе-бе-бе)


т.ч. не ленитесь - создавайте табличку с определением всех подключаемых объектов и их статусом (в самой базе с кодом). После любой неудачи сможете восстановиться независимо от тяжести склероза.
...
Рейтинг: 0 / 0
Подключение таблиц
    #32498716
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
табличку создать можно неудобно поддерживать
пример учебный для затравки на полноту решений не претендую
...
Рейтинг: 0 / 0
Подключение таблиц
    #32498871
ААА1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно MyAddTables расшифровать?
...
Рейтинг: 0 / 0
Подключение таблиц
    #32498885
Noboris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вообще просто поменять путь связанной таблицы?
...
Рейтинг: 0 / 0
Подключение таблиц
    #32498902
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://sql.ru/forum/actualtopics.aspx?search=RefreshLink&submit=%CD%E0%E9%F2%E8&bid=4
...
Рейтинг: 0 / 0
Подключение таблиц
    #32498914
EDUDK01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример определения наличия и состояния подключенных таблиц в текущей базе на основе ВСЕХ несистемных таблиц внешней базы.
Private Function myLinkedTablesState() As Integer
'PROVERYAEM NALICHIE I SVYAZI PODKLUCHENNIH TABLIC
'V KLIENTSKOI CHASTI PRILOZHENIYA

'0-TABLIC NET
'1-TABLICI NE PODKLUCHENI
'2-TABLICI EST I PODKLUCHENI

On Error GoTo HandleErr

Dim myTbl As TableDef

For Each myTbl In CurrentDb.TableDefs

If myTbl.Attributes = dbAttachedTable Then

myTbl.RefreshLink

If myLinkedTablesState <> 2 Then myLinkedTablesState = 2

End If

Next myTbl

ExitErr:
Exit Function

HandleErr:
myLinkedTablesState = 1
Resume ExitErr

End Function

Private Sub myRepairLinkedTables(myDatabasePath As String)
'OBNOVLYAEM SVYAZI SVYAZANIH TABLIC

On Error Resume Next

Dim myTbl As TableDef

For Each myTbl In CurrentDb.TableDefs

If myTbl.Attributes = dbAttachedTable Then

myTbl.Connect = Left(myTbl.Connect, 10) & myDatabasePath

myTbl.RefreshLink

End If

Next myTbl

End Sub


Private Sub myCreateLinkedTables(myDatabasePath As String)
'SOZDAEM NOVIE SVYAZANNIE TABLICI
'NA OSNOVE TABLIC IZ DRUGOI BAZI

On Error Resume Next

Dim myDB As DAO.Database
Dim myTbl As TableDef


Set myDB = OpenDatabase(myDatabasePath)


For Each myTbl In myDB.TableDefs

If myTbl.Attributes = 0 Then

DoCmd.TransferDatabase acLink, "Microsoft Access", myDatabasePath, acTable, myTbl.Name, myTbl.Name, False

End If

Next myTbl

myDB.Close
Set myDB = Nothing

End Sub

Private Sub myAnalyser()
'OBRABATIVAEM DANNIE O PODKLUCHENNIH TABLICAH

On Error GoTo HandleError

Dim myStr As String

Do While myLinkedTablesState <> 2

myStr = GetOpenFile_CLT("C:\", "Open")

If Len(myStr) > 0 Then

Select Case myLinkedTablesState

Case 0

Call myCreateLinkedTables(myStr)

Case 1

Call myRepairLinkedTables(myStr)

End Select

Else

If MsgBox("Select OK to resume connection, or CANCEL to exit database", vbRetryCancel + vbExclamation + vbDefaultButton1) = vbCancel Then
Quit
End If

End If

Loop

MsgBox "LOGIN"

ForceExit:
Exit Sub

HandleError:
MsgBox Error$
Resume ForceExit

End Sub
...
Рейтинг: 0 / 0
Подключение таблиц
    #32499043
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub MyAddtable(Name As String, SourceName As String, Connect As String)
 Dim MyDb As Database
 Dim tdw As TableDef
  Set MyDb = CurrentDb
  Set tdw = MyDb.CreateTableDef(Name)
  tdw.Connect =  ";DATABASE="  & Connect
  tdw.SourceTableName = SourceName
  MyDb.TableDefs.Append tdw
  Set MyDb = Nothing
End Sub
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подключение таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]