ó íàñ, íàïðèìåð, ñäåëàíî òàê:
_ ÔÈÎ - â ôàéëå íà îäíîì êîìïóòåðå,
__ àäðåñà(ôèî) íà äðóãîì(â îäíîì çäàíèè),
_ ïîëîâàÿ îðèåíòàöèÿ - íà òðåòüåì(â äðóãîì çäàíèè),
__ îñòàëüíûå äàííûå - â ñîñåäíåé äåðåâíå
Ôîðóì ÷èòàë, ïîèñêîì ïîëüçîâàòüñÿ óìåþ, è ò.ï.
Î÷åðåäíàÿ ïîïûòêà èçîáðåñòè âåëîñèïåä - ôóíêöèÿ TableDefsRefreshLink()
âûçûâàòü åå ìîæíî èç ìàêðîñà àâòîçàïóñêà èëè èç splash-ôîðìû
Option Compare Database
Option Explicit
Public Function TableDefsRefreshLink()
Dim a As Variant, b As New Collection
' ïðîáåãàåìñÿ ïî âñåì ñâÿçàííûì òàáëèöàì
For Each a In f1()
If a(2) Then ' íå îòêðûëàñü òàáëèöà
' ïðîáóåì ïðèëèíêîâàòü èç óæå èìåþùèõñÿ ïóòåé
If Not f3(a, b) Then ' íå ïîëó÷èëîñü
' ïî÷åìó?
If a(3) Then
MsgBox "íåò ôàéëà " & a(1) & " äëÿ òàáëèöû '" & a(0) & "'"
Else
MsgBox "íåò òàáëèöû '" & a(0) & "' â ôàéëå " & a(1)
End If
'äîáàâëÿåì íîâûé ïóòü
b.Add f2(a)
' è ïðîáóåì ïðèëèíêîâàòü çàíîâî
If Not f3(a, b) Then
'åñëè íå ïîëó÷èëîñü - Quit
MsgBox "â âûáðàííîì ôàéëå '" & b(b.Count) & "' íåò òàáëèöû '" & a(0) & "', ïðîäîëæåíèå íåâîçìîæíî"
Quit
End If
End If
End If
Next
End Function
Private Function f1() As Collection
Dim a As New Collection
With CurrentDb.OpenRecordset("SELECT ForeignName, Database FROM msysobjects WHERE Database Is Not Null;", dbOpenForwardOnly)
While Not .EOF
a.Add Array(!ForeignName.Value, !Database.Value, f5(!ForeignName.Value), Not CBool(Len(Dir(!Database.Value))))
.MoveNext
Wend
.Close
End With
Set f1 = a
End Function
Private Function f2(a) As String
Dim b As FileDialog
Static c As String
If Len(c) = 0 Then c = CurrentProject.Path & "\"
Set b = FileDialog(msoFileDialogOpen): With b
.InitialFileName = c
.InitialView = msoFileDialogViewList
.AllowMultiSelect = False
.Title = "Âûáåðèòå ôàéë ñ òàáëèöåé '" & a(0) & "' (èñõ.ïóòü:" & a(1) & ")"
.Filters.Clear
.Filters.Add "Access Databases", "*.mdb"
.Filters.Add "All Files", "*.*"
If .Show = True Then
c = f4(.SelectedItems(1))
f2 = .SelectedItems(1)
Else
MsgBox "ôàéë íå âûáðàí, ïðîäîëæåíèå íåâîçìîæíî"
Quit
End If
End With: Set b = Nothing
End Function
Private Function f3(a, b) As Boolean
Dim c As Variant, d As String
With CurrentDb
For Each c In b
With .TableDefs(a(0))
If Len(d) = 0 Then d = .Connect
.Connect = Replace(d, a(1), c)
On Error Resume Next
.RefreshLink
If Err.Number = 0 Then
f3 = True
Exit Function
End If
On Error GoTo 0
End With
Next
End With
End Function
Private Function f4(a As String) As String
f4 = Left(a, InStrRev(a, "\"))
End Function
Private Function f5(a As String) As Boolean
Dim b As Recordset
On Error Resume Next
Set b = CurrentDb.OpenRecordset(a)
f5 = CBool(Err.Number)
Set b = Nothing
On Error GoTo 0
End Function
http://www.sql.ru/forum/1129753/avtomaticheskaya-perelinkovka-svyazannyh-tablic-tabledefs-refreshlink