Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Eine Datenbank mit Access 2013 richtig entwickeln

Formulargrafiken immer per VBA nachladen

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Alle Bilder auf allen Formularen sollen per VBA nachgeladen werden, damit die Datenbank kleiner bleibt und eventuelle grafische Änderungen leichter durchführbar sind.

Transkript

Das funktioniert jetzt alles ganz wunderbar, das Unterformular zeigt hier die Logos, funktioniert mit draufklicken und schließt, aber so ganz allmählich würde ich mal wieder ein bisschen aufräumen. Je mehr Bilder Sie nachladen, desto größer wird die Datenbank, denn die Bilder sind darin gespeicher, und desto öfter riskieren Sie, dass Sie das gleiche Bild in mehrfachen Ausfertigung irgendwo speichern in verschiedenen Formularen. Noch ist es abgefangen im Unterformular, es wird ja nur das Unterformular mehrfach aufgerufen, aber ich garantiere Ihnen Sie werden der Versuchung erliegen. Dann baue ich hier noch mal ein Bildchen ein, irgendwo neben einer Schaltfläche noch eins. Und es wäre schlauer, rechtzeitig Mechanismen einzubauen, die dafür sorgen, dass sie nachzuladen sind. Das bedeutet, erst mal muss ich das Formular hier schließen, damit ich den Kopf im Entwurf öffnen kann. Das bedeutet, dass diese Bilder hier jetzt gelöscht werden. Das sind nur zwei, die habe ich noch im Überblick löschen heißt hier markieren. Sie haben sicherlich bemerkt ich markiere nicht hier, sondern ich klicke immer auf die Beschriftung, einmal entfernen, nachdem return müssen Sie es extra noch mal bestätigen. Die größe wissen wir ja jetzt. Und das gleiche hier! Auch dieses Bild kann man entfernen und bestätigen. Ja, das soll weg! Das hier eine Beschriftung drin steht ist im Grunde Wurst, die können wir wegnehmen, aber sie wird, wie Sie gesehen haben überschrieben. Jetzt geht es darum, per Programmierung dafür zu sorgen, dass beim öffnen des Formulares das Bild nachgeladen wird. Alle Grafiken in Formularen und später auch in Berichten, werde ich in Access nachladen. Ich muss also in die Programmierung, und zwar, muss ich mir erst mal ein paar allgemeine Prozeduren bereitstellen. Der erste Teil ist noch sehr einfach. Ich schreibe eine Prozedur, mit der ich für ein Image control, ein Bildelement, eine Grafik nachladen kann. Das ist das, was wir zu Fuß auch machen würden, also in der Picture Eigenschaft schreibe ich eine Pfard rein. Also nenne ich das mal einfach sub LadeGrafik , und zwar für ein Image. Und übergeben will ich ein Image control, also imgDieses nenne ich das as Image, dass ist auch ein Datentyp damit und strDatei as String. Ich übergebe ausdrücklich nur den Dateinamen selber, der Pfad muss sich, dann irgendwie finden. Und grundsätzlich würde ich jetzt schreiben imgDieses , das ist das Element, was ich nachher übergebe, dessen Picture Eigenschaft = strDatei. Soweit so unvollständig. Das würde funktionieren solange Sie in Datei den kompleten Pfard mitübergeben. Das will ich natürlich nicht! Im Gegenteil, ich habe mir unterhalb des Verzeichnisses, in dem die Access Datei selber die Datenbank speichert, ein Verzeichnis Grafiken angelegt. Und dort stehen alle Grafiken drin. Ich kann also sagen, wenn ich weiß wo die Accsess Datei steht, dann ist dadrunter ein Verzeichnis Grafiken. Das könnte ich jetzt natürlich hier hin schreiben, das würde, aber bedeuten, dass ich mehrfach irgendwo hinterlegen muss, wo die Access Datei steht. Also machen wir gleich Nägel mit Köpfen Es gibt zu den Mod Allgemeine Prozeduren, nur so ein bisschen, um die kleiner zu halten. In zwei aufgeteilt. Bei mir auch noch einen Mod Allgemeine Funktionen. Denn jetzt brauche ich eine Function. Eine die ein Rückgabewert liefert Zum Beispiel sub den DBPfad selber. Das wird ein Rückgabewert String, deswegen muss es natürlich eine Function sein. Ich hatte ganz am Anfang umgestellt, nur dass ich es eben noch mal erwähne. Bei Extras Optionen, dass die automatische Syntaxüberprüfung aus sein soll. Und schon dazu gesagt, die ist gar nicht aus, die erspart mir nur die Fehlermeldung, dass haben Sie gerade gesehen Die rote Zeile war der Hinweis Syntaxüberprüfung ist gescheitert, aber die Meldung ist mir erspart geblieben. Diese Function DBPfad gibt nichts anderes zurück, als zum Beispiel von Current Project das ist das Bequemste, denn das kennt direkt eine Eigenschaft Path: den Pfad. Ich kann also, wenn ich wissen will wo steht die Datenbank einfach DBPfad schreiben. Jetzt könnten Sie einwenden, warum die Mühe ich kann doch gleich CurrentProjekt.Path schreiben. Ja, aber dann müsste ich leider immer dafür sorgen, dass da der Backslash drangehängt wird, der fehlt nämlich. und jede andere Funktion erwartet den, also auch da direkt weiter programmieren, Ich erfinde jetzt eine Funktion, also funtion, die heißt ganz merkwürdig PfadMitSchraeger Meint nähmlich, Schrägstrich Backslash müsste ich eigentlich schreiben. Also, ich übergebe ein strPfad as String und kriege ein String zurück, bei dem mit Sicherheit der Backslash dranhängt. Und das geht relativ banal, PfadMitSchreager ist, dann einfach der ursprüngliche Pfad, verkettet mit dieses iif , also ein einzeiliges if , wenn ganz rechts right von dem Pfad. Und zwar das letzte Zeichen die Länge 1, wenn also im letzten Zeichen ein Backslash enthalten ist, dann Natürlich mit Komma! Dann mache ich nichts, dann hänge ich ein (Leerstring??) dran, andernfalls hänge ich ein Backslash dran. Klammer zu, wenn wir das mal eben testen wollen, erst mal speichern, dafür müssen wir es noch mal bestätigen. Und dann mit Steuerung G unten diesen Direktbereich öffnen das finden sie ansonsten ja auch im Menü Ansicht, hier unten, als Direktbereich. Dann teste ich das einfach schnell. ?PfadMitSchraeger, dann übergebe ich einen völligen beliebigen Text und Klammer zu, der kriegt jetzt ein Backslash dran. Es sei denn der hatte schon einen Backslash, ich ändere ihn mal ein bisschen und da ist jetzt ein Backslash dran, dann kriegt er natürlich nicht noch einen hinten dran, jeweils mit Return bestätigt. Klappt also wunderbar. Das bedeutet, ich kann jetzt dieses hier nutzen. Pfad, Steuerung Leertaste. Klammer auf, Klammer zu. Der Rückgabewert von dem DBPfad hat also immer einen Backslash dran. Und das kann ich jetzt entsprechend erweitern eine Function ich sortiere die so ein bisschen inhaltlich DBPfadGrafiken. Da muss ich nicht jedesmal festhalten, wie die Bezeichnung dazu ist. Also, as String und DBPfadGrafiken =PfadMitSchraeger Klammer auf, dann den DBPfad aufrufen. Ich mache es korrekterweise mit Klammern, auch wenn die Argumente leer sind. Verkettet mit Grafiken, ein Backslash hängt ja schon dran, das Verzeichnis heißt Grafiken. Klammer zu! Natürlich könnte ich in diesem Fall auch direkten einen Backslash machen, aber das ist jetzt so zu sagen der Formhalber. Und dann gucken wir doch mal mit Steuerung, gehen nach, ob das funktioniert ?DBPfad mit Grafiken Und der Rückgabewert ist korrekt, alles mit Backslash. Das heißt, wann immer ich wissen will, wo meine Dateien vor an die Grafiken stehen, habe ich jetzt einen Bündel von Funktionen, die mir das für die gesamte Datenbank immer und überall beantworten können. Und wechsel deswegen, wieder in die Prozeduren. Dort brauchte dich das nähmlich und kann jetzt hier einfach sagen DBPfadMitGrafiken, anständigerweise mit Klammern, verkettet mit dem Dateinamen und damit muss ich mich nur noch, um den Dateienamen kümmern. Und das baue ich jetzt entsprechend ein. Also, Doppelklick hier! In sfmKopf, dort rufe ich auf die Prozedur Form_Load. Die wird ein bisschen eingerückt und jetzt kann ich direkt aufrufen LadeGrafikImage und ich übergebe me.imgLogo Und auch da hätte ich gern hineingeladen die Datei, die ich die ich vorhin schon mal genannt hatte und als icn RS32.gif benannt hat. Jetzt fehlt wohl der Zweite noch, der ist aber sehr schnell herzustellen, nähmlich bei den Prozeduren nicht GrafikeImage, sondern GrafikButton. Also, da gibt es minimale Änderungen. Also, LadeGrafikButton und das ist dann ein btn das sollte man komplett umbenennen. Als CommandButton natürlich Der Rest bleibt soweit, nur das Objekt heißt, dann eben ein bisschen anders. btnDiese sollte man vielleicht auch schreiben, dann ist es sprachlich vernünftig. So, den kann ich direkt wieder aufrufen. In der zweiten Zeile LadeGraffikButton ich übergebe me.btn Schliessen. Und im zweiten Argument, das war ja eine Bitmap, die hieß icn FensterSchliessen.bmp Alles speichern! Und mit AltF11 in das richtige Fenster sozusagen. Und ich werde es jetzt mal ganz lieblos hier wechseln, deswegen gab es ja diese On Error Resume Next Anweisung, falls kein Parent da ist nur das werden wir eben mal sehen, die Bilder werden korrekt geladen. Und natürlich auch innerhalb eines Hauptformulars. Das geht so schnell, dass sind ja auch kleine Dateien, das merkt gar keiner. Hie ist wohl gerade ein Platzproblem, aber, wenn der Bildschirm breit genug ist oder ich das hiuer ein bisschen rüberziehe, dann sehen Sie ist alles korrekt da. Das Aufräumen bestand also darin, da muss ich jetzt hier aufpassen, dass ich das nicht mitspeicher, sonst wird diese Änderung gespeichert. So das Aufräumen bestand vor allem darin, dass ich die Bilder per Prozedur nachladen. Daraus folgt mit UmschaltF2 kommen Sie übrigens in den Code, in die Definition dazu. Daraus folgt, dass ich den Pfad für die Grafiken wissen muss UmschaltF2. Daraus folgt wieder,dass ich irgendwie Pfadevernünftig bearbeiten kann, also sozusagen von einem Problem zum Nächsten. Aber dafür haben wir jetzt aufgeräumt und wo immer ein Bild gebraucht wird, kann ich das mit einer einzigen Zeile, wenn es denn ein Image oder ein Button ist füllen. Und muss mich nicht mehr darum kümmern nachzuprüfen, ob es ein Pfad gibt und, wie er heißt, ob er ein Backslash dran hat und Ähnliches.

Eine Datenbank mit Access 2013 richtig entwickeln

Sehen Sie einem erfahrenen Datenbankentwickler über die Schulter und lernen Sie dabei, wie Sie in Access 2013 optimale und perfekt skalierbare Datenbank anlegen und pflegen.

5 Std. 18 min (53 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!