Hallo,
Leider muss ich das Thema Dokumentation noch einmal aufgreifen. Nachdem ich mich in den letzten Tagen intensiv mit meiner Datenbank mit dem Ziel einer Vereinfachung beschäftigt habe, ist mir noch einmal mein Dokumentationsbedarf bewusst geworden, gerade weil es mir helfen würde, meine Datenbank zu verbessern.
Meine Datenbank besteht aus sieben Tabellen, ca. 60 Abfragen, ca. 30 Formularen und rund 40 Berichten. Die Abfragen sind teilweise voneinander abhängig. In den Abfragen finden auch Berechnungen statt, die dann im abhängigen Objekt weiterverwendet werden.
Die Datenbank ist in Frontend und Backend aufgeteilt, da ich im Frontend doch häufiger Änderungen vornehme.
Die Anzahl der Abfragen und Berichte ist im Laufe der Zeit einfach durch Ergänzungen so angewachsen. Diese Anzahlen möchte ich nun reduzieren.
Ziel ist es herauszufinden, welches Feld aus welcher Tabelle bzw. welcher Abfrage in den abhängigen Abfragen, Formularen oder Berichten verwendet wird. Luxus wäre es, wenn man z.B. in berechneten Feldern von Abfragen auch deren Steuerelementinhalt ausgeben könnte (d.h. die hinterlegte Formel).
Mir ist auch als Programmierlaie völlig unklar, wie man so etwas angehen kann. Mit dem AccessDependencyChecker bin ich leider nicht weitergekommen, und der Datenbankdokumentierer führt mich leider auch nicht ans Ziel.
Ich könnte pro Objekt die einzelnen Felder jeweils einzeln in eine riesige Exceltabelle kopieren, was den Vorteil hätte, dass man sie auch durchsuchen kann.
Aber es muss doch eine etwas elegantere, automatisierbare Lösung zur Ausgabe der jeweils verwendeten Felder geben ?
Wie macht Ihr das denn ? Oder ist mein Anliegen hoffnungslos ?
Für Anregungen und Ideen bin ich dankbar.
Hallo,
nur mit Zusatzsoftware. Z.B.
http://www.rickworld.com/products.html
Kostet aber Geld.
Freeware ist mir keine bekannt, was aber nicht heißt, dass es nicht welche gibt.
Hallo,
vielen Dank für die Antwort.
Darüber bin ich schon gestossen, habe nun aber einmal die Probeversion von Find&Replace installiert, daher meine späte Antwort.
Das Programm findet in den ersten Versuchen die einzelnen Felder, aber nur in einem Objekt nach dem anderen; die "Cross-Refence" für eine Listenerstellung lässt sich leider nur mit der registrierten Version ausprobieren. Ich sehe zumindest in der Probeversion auch keine Funktion, wie man das Ergebnis theoretisch exportieren könnte, um eine Gesamtdokumentation zu erstellen.
Ich muss also weiterforschen und bin für alle weiteren Hinweise dankbar !
Vielen Dank und Grüße,
Jochen
Hallo Jochen,
Bist du auch schon auf dieses gestossen?
Könnte das das Richtige für dich sein?
https://team-moeller.de/?Add-Ins:TM-AbhaengigeObjekte (https://team-moeller.de/?Add-Ins:TM-AbhaengigeObjekte)
gruss ekkehard
Hallo ekkehard,
nein, vielen Dank für den Hinweis. Schaue ich mir morgen in Ruhe an. Auf der Seite sind noch mehr interessante Dinge.
Melde mich dann.
Viele Grüße,
Jochen
Hallo ekkehard,
nun hab ich mir TM-abhaengige Objekte angesehen bzw. als Add-In installiert. Leider kann man m.E. auch hier nicht nach Feldern, sondern "nur" nach Objekten suchen. Zudem hängt sich meine DB auf.
Ich habe aber etwas anderes gefunden:
http://dbwiki.net/wiki/VBA_Tipp:_SQL_Source_durchsuchen (http://dbwiki.net/wiki/VBA_Tipp:_SQL_Source_durchsuchen)
Ich habe den Code in meine DB zunächst in ein Modul "SQLDurchsuchen()" kopiert.
- Wie bekomme ich es gestartet ?
[EDIT]: Ich habe es geschafft !! Es öffnet sich ein Fenster mit einer Liste !
- Nun möchte ich es gerne erweitern:
o Wie schaffe ich es, dass sich ein Abfragefenster öffnet, in welchem man den Suchbegriff "Insert" eingibt, oder noch besser, die Prozedur den Feldinhalt aus einem ungebundenen Feld übernimmt, das man in ein Formular eingibt ?
o Wie könnte man die sich ergebende Liste auch anders ausgeben, z.B. Export nach Excel o.ä. ?
- Könnte man dann (und wie...) diese Suche auch in eine Variante "Suche in Berichten" bzw. "Suche in Formularen" umbauen ?
Vielen Dank für Deine/Eure Hilfe im Voraus, ich lerne stets ein bisschen mehr dazu !
Viele Grüße,
Jochen
Nun, die Methode macht nichts anderes, als wortwörtlich einen Suchtext im Text einer jeden Abfrage zu finden und dann den Abfragenamen auszugeben. Dabei werden auch Abfragen, die in Formularen und Berichten direkt als RecordSource bzw. in Steuerelementen als RowSource eingetragen sind, berücksichtigt. Diese Namen beginnen dann alle mit einer Tilde (~).
Im Sinne einer Dokumentation würde ich jedoch eher die Ausgabe aller Feldnamen, deren Datentyp, eventuell die Postion, die Feldgröße, ggf. Parameter, etc. erwarten, die eine Auswahlabfrage beinhaltet. Dabei müsste man dann den Typ und andere Attribute noch in Klartext übersetzen. Im Prinzip lässt sich das ermitteln, was auch im Eigenschaftsfenster einer Abfrage im Entwurf angezeigt wird.
Hier einmal nur das Prinzip mit Ausgabe einiger Eigenschaften für eine fixe Abfrage, die mir hier gerade vorliegt.
Dim q As DAO.QueryDef
Dim p As DAO.Parameter
Dim f As DAO.Field
'<Q2> liegt gespeichert als
'PARAMETERS [@bis_wann] DateTime;
'SELECT s.*
'FROM Schadensfaelle AS s
'WHERE (((s.Datum) < [@bis_wann]));
Set q = CurrentDb.QueryDefs("Q2")
Debug.Print "Abfrage-Info"
Debug.Print "Name: "; q.Name, _
"Typ: "; CStr(q.Type) 'aus: dbQueryDefTypeEnum
Debug.Print
Debug.Print "Feld-Info:"
For Each f In q.Fields
Debug.Print "Feldname: "; f.Name, _
"Position: "; CStr(f.OrdinalPosition), _
"Typ: "; CStr(f.Type), _
"Size: "; f.Size
Next
Debug.Print
Debug.Print "Parameter-Info:"
For Each p In q.Parameters
Debug.Print "Name: "; p.Name, p.Type
Next
Im VBA-Direktfenster erscheint dann:
Abfrage-Info
Name: Q2 Typ: 0
Feld-Info:
Feldname: Nummer Position: 0 Typ: 4 Size: 4
Feldname: Datum Position: 1 Typ: 8 Size: 8
Feldname: Schadensart Position: 2 Typ: 10 Size: 35
Feldname: Beschreibung Position: 3 Typ: 10 Size: 50
Feldname: Sachbearbeiter_N Position: 4 Typ: 10 Size: 16
Feldname: Sachbearbeiter_V Position: 5 Typ: 10 Size: 16
Feldname: Telefon Position: 6 Typ: 10 Size: 12
Parameter-Info:
Name: [@bis_wann] 8
PS: Eigenschaften findet man im VBA-Objektkatalog.
Hallo,
vielen Dank für die Antwort. Das werde ich mir ansehen und versuchen zu verstehe :-\...
Allerdings möchte ich einen Schritt nach dem anderen gehen und zunächst einmal herausfinden, welches Feld in welchen Abfragen/Berichten/Formularen verwendet wird; dabei sind die Feldeigenschaften für mich zunächst nicht relevant, ich muss früher einsetzen.
Ich werde nun versuchen, den Code aus dbwiki für mich Richtung Bericht bzw. Formular umzubauen....
Da ich mich als Anwender in VBA gar nicht auskenne, wäre ich auch für Hilfe dankbar, wie der Code für "SQLDurchsuchen()" auf ein Feld in einem Formular zugreift:
Wäre das dann im Code "SQLDurchsuchen()"
statt
Public Sub SQLDurchsuchen(Suchbegriff As String)
Public Sub SQLDurchsuchen([Forms]![Formularname]![Feldname])
?
Dann müsste ich nicht jedesmal den Code bei einem neuen Suchbegriff aufrufen, sondern könnte ihn evtl. sogar aus einer Feldliste auswählen.....
Vielen Dank für die Unterstützung !
Hallo Jochen,
ZitatWäre das dann im Code "SQLDurchsuchen()"
statt
Public Sub SQLDurchsuchen(Suchbegriff As String)
Public Sub SQLDurchsuchen([Forms]![Formularname]![Feldname])
Nein, die erste Zeile ist der Prozedurkopf der Sub. "Suchbegriff" ist dabei der
Parameter, den du beim Aufruf übergibst
Call SQLDurchsuchen([Forms]![Formularname]![Feldname].Name)
Geht natürlich auch mit einer Schleife durch die Controls
Dim ctl As Access.Control
For Each ctl In Forms("DeinForm")
Call SQLDurchsuchen(ctl.Name)
Next
Das kannst du auch noch erweitern in dem du noch eine Schleife durch alle
Forms drumrum schreibst.
gruss ekkehard
Hallo ekkehard,
danke für die Antwort, habe ich jetzt verstanden. Dabei habe ich gemerkt, dass ich mich in meinem vorherigen Post falsch ausgedrückt habe, denn ich möchte nicht das auf dem Formular befindliche Textfeld (“GesuchtesFeld”) in den Abfragen suchen, sondern dessen Inhalt (=zu suchender Feldname), den ich eingebe.
Zu diesem Zweck hatte ich ein Formular mit dem Steuerelement “GesuchtesFeld” erstellt und eine Schaltfläche, die dann bei Anklicken den Befehl SQLDuchsuchen() als Ereignisprozedur ausführt. Damit soll der Inhalt des Steuerelements “GesuchtesFeld” gesucht werden. Nun jedoch sucht es den Namen des Steuerelementes.
Es kann also nur eine Kleinigkeit sein ?
Und natürlich habe ich dann die Anschlussfragen,
- wie ich diese Suchabfrage nach Feldern auf Berichte bzw. Formulare erweitern kann ? EDIT: Ich finde kein "DAO.ReportDefs" so wie "DAO.QueryDefs"....
- wie ich das Ergebnis statt einer MsgBox möglicherweise in einer anderen Form exportieren kann ?
Vielen Dank für die Hilfe !
Jochen
Objekte kann man nicht so einfach erfinden. Lerne den Objekt-Katalog kennen (siehe Bildanhang) und bedienen.
PS: ... und lerne VBA-Grundlagen z.B. anhand eines Tutorials (da gibt es Wiki-Books o.ä. im WWW) oder eines Buches (das könnte ja bald auf dem Gabentisch liegen) - das Tutorial oder Buch kann auch Excel-lastig sein; die Programmierung unterscheidet sich grundlegend nur in anderen Objekten - aber dafür gibt es ja den Objekt-Katalog (auch in Excel, Word, etc.) und selbstverständlich die OL-Hilfe.
Hallo,
schon klar, ich beschäftige mich bereits mit VBA (auch anhand von Büchern), aber das Lernen einer Programmiersprache für einzelne Spezialfragen geht für einen Anwender (im "Nebenberuf") leider auch nicht so schnell und oft sind es wertvolle einzelne Hinweise, die einem dann weiterhelfen und Hilfe zur Selbsthilfe geben.
Grüße,
Jochen
Hallo Jochen,
Das verstehe ich jetzt nicht, - was willst du denn mit dem Inhalt
eines Feldes in einer Dokumentation?
Um den Inhalt zu erhalten entferne ".Name" oder ersetze es durch
".Value" (Standardeigenschaft).
gruss ekkehard
Hallo ekkehard,
vielen Dank für den Hinweis.
Ich benötige den Inhalt, da ich in das Steuerelement meines (Hilfs-)Formulars den Feldnamen eingebe (oder über eine Liste befülle), für den mir der Code alldiejenigen Abfragen (und hoffentlich bald anderen Objekte) auflistet, in denen das Feld verwendet wird.
Das klingt sicher schräg, ich habe aber mittlerweile festgestellt, dass ich mindestens über 300 Felder (in Tabellen bzw. Abfragen) habe, was sicher nicht ungewöhnlich ist, aber ich mir eben einen Überblick verschaffen möchte, wo welches Feld verwendet (und ob es dort überhaupt noch benötigt) wird.
Ergänzend habe ich mir -mangels anderer Lösungsideen- noch eine grosse Graphik angefertigt, in der die jeweiligen Abhängigkeiten der Tabellen, Abfragen, Formulare und Berichte dargestellt werden. Am Anfang etwas aufwendig gewesen, aber mir hilft Visualisierung ungemein.
Meine Datenbank ist in den Jahren immer weiter durch "Anbauten" weiterer Objekte gewachsen, so dass ich wissen muss, was sich wie und wo auswirkt, wenn ich irgendwo etwas ändere.....
Vielen Dank für Deine bisherige Unterstützung !
Jochen