Позвольте мне объяснить требования клиента к Вейрдест, мы царапины головы для:Найти которые образуют точки поля, в которой поля базы данных в MS Access
У нас есть приложение MS Access VBA с тысячами форм форм в сотнях форм.
Несколько полей в этих формах заполняют данные из нескольких таблиц/запросов.
Несколько других полей в формах вставляют данные в несколько таблиц через запросы/прямой код.
Обратите внимание, что эти таблицы являются связанными таблицами с таблицами SQL Server.
Есть ли способ найти, какое поле формы относится к столбцу таблицы?
Следовательно, для этого нам нужен инструмент/макрос.
Как найти, какое поле формы указывает на какие поля базы данных в MS Access?
Основано на @ClintB's answer, мы подготовили следующий код. Значения в ctl.ControlSource
не кажется, ссылаясь на фактические объекты базы данных:
Sub GetFormFieldToDBFieldMapping()
Dim frm As Object
Dim LiveForm As Form
Dim ctl As control
Dim i As Integer
Dim fso As Object
Dim ctlSource As String
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = fso.CreateTextFile("D:\ControlSources.txt")
For Each frm In Application.CurrentProject.AllForms
'To access form controls, open it
DoCmd.OpenForm frm.Name, acViewDesign
Set LiveForm = forms(frm.Name)
For i = 0 To LiveForm.Controls.Count - 1
Set ctl = LiveForm.Controls.Item(i)
If ctl.ControlType = 106 Or ctl.ControlType = 111 Or ctl.ControlType = 110 Or ctl.ControlType = 109 Then
ctlSource = ctlSource & vbCrLf & "Form Name :" & LiveForm.Name & ": Control Name :" & ctl.Name & ": Control Source :" & ctl.ControlSource
End If
Next i
'Do not forget to close when you are done
DoCmd.Close acForm, frm.Name
Next
oFile.WriteLine ctlSource
oFile.Close
Set fso = Nothing
Set oFile = Nothing
End Sub
Это будет почти невозможно, так как поля могут быть использованы в наборах записей и DLookup и функциях, которые снова могут быть использованы в запросах, которые могут быть привязаны в другие запросы и используются в выражениях, прежде чем получить контроль в качестве ControlSource. – Gustav
Для стандартной формы, связанной с таблицей или простым запросом, ControlSources будут именами полей, поэтому некоторые из них могут быть найдены таким образом. Трудная часть - поймать все вхождения. Единственный метод, который я нашел, - это тяжелая работа - и грубая сила, переименовав запрос и посмотрев, что происходит. Не хорошо. Вы можете использовать функцию _SaveAsText_ для сохранения объектов в текстовые файлы, которые могут облегчить поиск. – Gustav