ich habe das Problem, dass sich bei mir die Datenbank aufbläht, weil ich in
einem Bericht per Code die Bilder tausche. Ich hatte da beim Bild die
Eigenschaft "Freigeben" ausgewählt statt verknüpft.
Jetzt sind in meiner Datenbank hunderte Bilder gespeichert (inlusive vielen
Duplikaten) und ich bringe sie nicht mehr wirklich weg.
Ich sehe die Bilder wenn ich bei einem Formular im Entwurfsmodus auf "Bild
einfügen" klicke und kann sie dort auch löschen - aber nur einzeln. Kann man
das auch irgendwie rationeller machen?
Beste Grüße
Elisabeth
Gruß Andreas
Elisabeth Reuter wrote:
Willst Du die Bilder komplett loswerden, also auch die Information, welches
Bild da drin ist? In diesem Fall kannst Du mit einem Statement der folgenden
Art arbeiten:
UPDATE DeineTabelle SET DeinBildFeld = NULL
Das löscht dann den kompletten Inhalt des Bild Feldes. Das solltest Du aber
nur tun, wenn Du vorher eine Sicherung der Datenbank gemacht hast. Könnte ja
sein, dass es nicht ganz das ist, was Du möchtest.
Gruss
Henry
Das Löschen hat eh Henry schon beantwortet.
Wie du dann besser mit Bildern umgehen solltest, steht in
Bilder speichernhttp://www.donkarl.com?FAQ2.2
--
Servus
Karl
*********
Access-FAQ: http://www.donkarl.com
(Mir ist vorhin ein Beitrag zu früh entfleucht. Man sollte nicht x Dinge
gleichzeitig tun. Falls ihn noch jmd. sieht, dann bitte ignorieren.)
Da du etwas von "Bilder per Code tauschen" schreibst, hast
du die Bilder vielleicht gar nicht in einer Tabelle, wie die anderen
annahmen, sondern "nur" in Bild-Steuerelementen in Berichten
und/oder (?) Formularen - du führst beides an.
Falls dem so ist und du z.B. alle Bilder in allen Bildsteuerelementen
von Formularen loswerden willst, kannst du diesen Code versuchen:
Dim frm As Object
Dim ctl As Control
For Each frm In CurrentProject.AllForms
DoCmd.OpenForm frm.Name, acDesign
For Each ctl In Forms(frm.Name).Controls
If ctl.ControlType = acImage Then
ctl.Picture = ""
'DeleteControl frm.Name, ctl.Name
End If
Next ctl
DoCmd.Close acForm, frm.Name, acSaveYes
Next frm
Mit Berichten geht das analog.
Ob du ctl.Picture = "" verwenden willst oder stattdessen
mit DeleteControl das ganze Steuerelement löscht,
musst du entscheiden.
Exakt. Ich habe ein Bildelement in einem Formular und in einem Bericht wo
ich das Bild für einen Artikel folgendermaßen austausche (in der Beim
Anzeigen Eigenschaft des jeweiligen Artikels):
Bildvorschau.Picture = CurrentProject.path & "\Fotos\" & id & ".jpg"
Dummerweise hatte ich bei Bildtyp "Freigegeben" ausgewählt. Das passiert
ganz leicht indem man bei Access 2010 das im Entwurfsmodus prominent
platzierte "Bild einfügen" verwendet und dann den Bildtyp eben nicht auf
"Verknüpft" abändert.
Klickt also vom ersten Datensatz in den zweiten und wieder zurück hat man
dann in der Bildergalerie die Access 2010 unter "Bild einfügen" anzeigt
bereits drei Bilder gespeichert. Beim nochmaligen Wechsel hin und her zwei
weitere. Es sind zwar immer die gleichen Bilder, aber das macht es nicht
weniger lästig. Und die Datenbankgröße wächst dabei immer weiter an.
Wenn also irgend jemand ein stetiges Anwachsen der Datenbank feststellt,
obwohl es sich um das Frontend handelt, und ein Komprimieren und Reparieren
absolut nichts bringt - vielleicht liegt es ja daran.
Abhilfe schafft das Ändern des Bildtyps auf "Verknüpft" oder zur Not auch
auf "Eingebettet"
> Falls dem so ist und du z.B. alle Bilder in allen Bildsteuerelementen
> von Formularen loswerden willst, kannst du diesen Code versuchen:
>
> Dim frm As Object
> Dim ctl As Control
>
> For Each frm In CurrentProject.AllForms
> DoCmd.OpenForm frm.Name, acDesign
> For Each ctl In Forms(frm.Name).Controls
> If ctl.ControlType = acImage Then
> ctl.Picture = ""
> 'DeleteControl frm.Name, ctl.Name
> End If
> Next ctl
> DoCmd.Close acForm, frm.Name, acSaveYes
> Next frm
So wie ich das verstehe, löscht der Code nur das, was im Bildsteuerelement
gespeichert ist oder sehe ich das falsch? Wenn man bei Access 2010 jedoch
wie oben beschrieben auch nur ein einziges Bildsteuerelement mit der
Eigenschaft "Freigegeben" einfügt, dann wird bei jedem Ändern des Bildes ein
neuer Eintrag in der Galerie angelegt.
Grundsätzlich ist diese Eigenschaft ja nicht schlecht, man kann damit in der
Datenbank zB. ein Foto oder Logo ein mal Speichern und in beliebig vielen
Steuerelementen verwenden. Tauscht man dann in der Galerie das Logo ein mal
aus, ist es überall geändert. Das spart Zeit und Speicherplatz.
Man muss sich eben nur davor hüten, in einem solchen Bildsteuerelement den
Inhalt häufig per Code zu ändern. Dann kann es einem nämlich passieren, dass
man eine Stunde damit verbringt immer und immer wieder folgendes zu machen
Klick auf "Bild einfügen"
Rechtsklick auf ein Bild
Klick auf "Löschen"
Beste Grüße
Elisabeth
Ok, jetzt habe ich verstanden, was gemeint ist.
> Man muss sich eben nur davor hüten, in einem solchen
> Bildsteuerelement den Inhalt häufig per Code zu ändern. Dann kann
> es einem nämlich passieren, dass man eine Stunde damit verbringt
> immer und immer wieder folgendes zu machen
>
> Klick auf "Bild einfügen"
> Rechtsklick auf ein Bild
> Klick auf "Löschen"
Ich habe gerade kein A10 hier, aber was passiert denn beim
Import aller DB-Objekte in eine neue accdb? Gehen die Bilder
dabei verloren, wenn sie aktuell nicht verwendet werden?
Falls ja, wäre das schneller als 1 Stunde zu klicken.
Falls nein, hätte MS mal mitgedacht ;-) ... oder gar die
Importoptionen erweitert?
Ich schätze, dass es so funktionieren müsste. Ich habe es aber trotzdem
händisch gemacht, weil ich mir nicht sicher war ob ich nicht vergesse, etwas
mitzukopieren, was mir nachher Probleme bereiten könnte, wenn ich nicht mehr
daran denke (zB. irgendwelche Import/Export-Optionen).
Beste Grüße
Elisabeth