mir die Client-Anforderung Weirdest Lassen erklären, wir unsere Köpfe zum Scratchen:finden die Feldpunkte bilden
Wir haben eine MS Access VBA-Anwendung mit Tausenden von Formularfeldern in Hunderten von Formen.
Einige Felder in diesen Formularen füllen Daten aus wenigen Tabellen/Abfragen.
Einige andere Felder in Formularen fügen Daten in wenige Tabellen durch Abfragen/direkten Code ein. Beachten Sie, dass diese Tabellen verknüpfte Tabellen mit SQL Server-Tabellen sind.
Gibt es eine Möglichkeit zu finden, welches Formularfeld zu welcher Tabellenspalte gehört?
Daher benötigen wir einige Werkzeug/Makro, um dies zu tun.
Wie finden wir, welches Formularfeld auf welche Datenbankfelder in MS Access zeigt?
Basierend auf @ClintB's answer haben wir den folgenden Code vorbereitet. Die Werte in ctl.ControlSource
nicht scheint nicht auf die tatsächlichen Datenbankobjekte mit Bezug zu:
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
zu finden, die fast unmöglich sein wird, wie Felder in Cord-Sets und DLookup und Funktionen verwendet werden, die wiederum in Abfragen verwendet werden können, die in aliased werden kann andere Abfragen und in Ausdrücken verwendet, bevor ein Control als ControlSource erreicht wird. – Gustav
Für ein Standardformular, das an eine Tabelle oder eine einfache Abfrage gebunden ist, sind ControlSources Feldnamen, so dass einige auf diese Weise gefunden werden können. Der schwierige Teil besteht darin, alle Vorkommnisse zu erfassen. Die einzige Methode, die ich gefunden habe, ist harte Arbeit - und rohe Gewalt, indem ich eine Abfrage umbenenne und sehe, was passiert. Nicht nett. Sie können die Funktion _SaveAsText_ verwenden, um Objekte in Textdateien zu speichern, die die Suche ein wenig erleichtern können. – Gustav