Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Найти все таблицы, связанные с заданной
 
 автор: Дядя Федор   (25.01.2012 в 10:15)   личное сообщение
 
 

Грядет глобальная переделка базы.
Вопрос.
Можно ли как-то автоматизировать поиск всех таблиц,
которые связаны с заданной таблицей по заданному полю?

  Ответить  
 
 автор: kot_k_k   (25.01.2012 в 10:59)   личное сообщение
 
 

напиши прогу которая анализирует поля и если в свойствах поля есть Select * from tabla - вот и будет тебе имя таблы
есть аксовое (не помню где в сервисе) - запускаешь - идешь куришь, пьешь, гуляешь - через время формирует файл с описанием ВСЕГО че есть в базе (кажись pdf или док) - сидим и смотрим. у меня получилось 3500 стр.

  Ответить  
 
 автор: Дядя Федор   (25.01.2012 в 11:23)   личное сообщение
 
 

Пока сделал так (в предположении, что если есть связи по полю, то оно одинаково обзывается.
Т.е. тупо перебираю все таблицы и ищу где есть заданное поле.

Public Sub AllTableAndFlds(snamefld$)

Dim tbl As TableDef
Dim fld As Field

Debug.Print "----- " & snamefld & " -----"
For Each tbl In CurrentDb.TableDefs
 
 For Each fld In tbl.Fields
 If snamefld = fld.name Then
    Debug.Print tbl.name ', fld.name
 End If
 Next
Next

End Sub

Public Sub tst()
AllTableAndFlds "IdPrice"
AllTableAndFlds "IdPricePref"
AllTableAndFlds "IdSChPoz"
AllTableAndFlds "IdPriceGroup"
End Sub


Есть опасность что могут быть связи типа Tbl1.IdPrice-tbl2.IdPr1

  Ответить  
 
 автор: kot_k_k   (25.01.2012 в 11:57)   личное сообщение
 
 

когда-то создал к связанным таблам их копии с названием имятаблы_TMP
нужно было все связанные поля перестроить на эти новые таблы
вот такое замутил



Function Tabla_TMP_RowSource()
Dim dbs As DAO.Database
Dim tbl As DAO.TableDef
Dim op As DAO.Recordset
Dim po As DAO.Recordset

Set dbs = CurrentDb
For Each tbl In dbs.TableDefs

берем линкованную таблицу

    If tbl.Connect <> "" Then

открываем ее _TMP двойник

        Set op = dbs.OpenRecordset(tbl.Name & "_TMP")

ищем свойство RowSource - означающее что поле связанное

        For i = 0 To op.Fields.Count - 1
            For j = 0 To op.Fields(i).Properties.Count - 1
                If op.Fields(i).Properties(j).Name = "RowSource" Then           
                    Stroka = Split(op.Fields(i).Properties(j).Value, " ")
                    dbs.Execute ("delete * from Re_Name_TBL")
                    Set po = dbs.OpenRecordset("Re_Name_TBL")

раскладываем его sql строку, добавляем в названия таблиц   _TMP 
загоняем старую строку и новую (в разобраном виде) в таблу 

                    For k = 0 To UBound(Stroka)
                        With po
                            .AddNew
                            !Name_Old = Stroka(k)
                            !Name_New = Replace(Stroka(k), ".", "_TMP.")
                            !Vibor = IIf(Stroka(k) = Replace(Stroka(k), ".", "_TMP."), False, True)
                            .Update
                        End With
                    Next
                    Kod_G = 0
вываливаем форму на основаини этой таблы  в ней корректируем действа машины как нужно

                    DoCmd.OpenForm "Re_Name_TBL", , , , , acDialog
                    If Kod_G = 0 Then

собираем SQL строку по новой 

                        po.MoveFirst
                        str_ = ""
                        Do While po.EOF = False
                            str_ = str_ & po!Name_New & " "
                            po.MoveNext
                        Loop
                        
загоняем ее в свойства поля

                        op.Fields(i).Properties(j).Value = Trim(str_)
                        op.Fields(i).Properties.Refresh
                    End If
                    j = op.Fields(i).Properties.Count + 100
                End If
            Next
        Next
    End If
Next
End Function


и так по всей коллекции таблиц.

  Ответить  
 
 автор: osmor   (25.01.2012 в 11:42)   личное сообщение
 
 

вообще если речь идет о полях подстановки, то можно свойства полей посмотреть
если про связи, то relations вроде

  Ответить  
 
 автор: Дядя Федор   (25.01.2012 в 12:33)   личное сообщение
 
 

Всем спасибо.Через архивариус удобно. Но надо брать серверную часть.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList