-Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â rss_sql_ru_access_programming

 -Ïîäïèñêà ïî e-mail

 

 -Ïîñòîÿííûå ÷èòàòåëè

 -Ñòàòèñòèêà

Ñòàòèñòèêà LiveInternet.ru: ïîêàçàíî êîëè÷åñòâî õèòîâ è ïîñåòèòåëåé
Ñîçäàí: 16.03.2006
Çàïèñåé:
Êîììåíòàðèåâ:
Íàïèñàíî: 4


Àâòîìàòè÷åñêàÿ ïåðåëèíêîâêà ñâÿçàííûõ òàáëèö ( TableDefs RefreshLink )

Ïîíåäåëüíèê, 01 Äåêàáðÿ 2014 ã. 00:54 + â öèòàòíèê
ó íàñ, íàïðèìåð, ñäåëàíî òàê:
_ ÔÈÎ - â ôàéëå íà îäíîì êîìïóòåðå,
__ àäðåñà(ôèî) íà äðóãîì(â îäíîì çäàíèè),
_ ïîëîâàÿ îðèåíòàöèÿ - íà òðåòüåì(â äðóãîì çäàíèè),
__ îñòàëüíûå äàííûå - â ñîñåäíåé äåðåâíå

Ôîðóì ÷èòàë, ïîèñêîì ïîëüçîâàòüñÿ óìåþ, è ò.ï.

Î÷åðåäíàÿ ïîïûòêà èçîáðåñòè âåëîñèïåä - ôóíêöèÿ 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


 

Äîáàâèòü êîììåíòàðèé:
Òåêñò êîììåíòàðèÿ: ñìàéëèêè

Ïðîâåðêà îðôîãðàôèè: (íàéòè îøèáêè)

Ïðèêðåïèòü êàðòèíêó:

 Ïåðåâîäèòü URL â ññûëêó
 Ïîäïèñàòüñÿ íà êîììåíòàðèè
 Ïîäïèñàòü êàðòèíêó