Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bild aus Tabelle (OLE-Objekt) einer Variablen zuweisen?

Begonnen von trebuh, September 03, 2015, 17:18:20

⏪ vorheriges - nächstes ⏩

trebuh

Hallo Accesgemeinde,

Bin dabei in meinem Bericht ein Wasserzeichen zu verwenden (z.B. für Demoversion)
Habe folgenden Code (aus Access für Unternehmer) in den Bericht eingefügt:
20        If Me.OpenArgs Then
30            Me.Picture = "C:\Ordnername\Wasserzeichen.bmp"
40        End If


das klappt hervorragend:

Habe nun das Bild in einer Tabelle (tblBildOLE) gespeichert.

Wie muss ich den Code in Zeile 30 ändern, um das Bild aus der Tabelle zu holen? Mit Dlookup bekomme ich eine Fehlermeldung (Error-Code 2176).

Gruß Hubert


daolix

Hallo
Wie liegt das Bild denn in der Tabelle vor?  Als OLE (samt Server), als binäres Abbild oder nur als Dateipath? Der Name  der Tabelle lässt auf erstere zwei vermuten.

trebuh

Hallo daolix,

ich habe die Tabelle "tblBildOLE" wie folgt aufgebaut:

Bild_ID --> PrimeryKey, AutoWert
Bild_Ole--> OLE-Objekt
Bild_Bemerkungen--> Text

In einem Formular kann ich die Grafik ansehen.

Ich dachte zuerst, ich kann einfach mit dem Code:
Me.Picture = DLookup("Bild_Ole", "tblBildOLE")
auf das Bild verweisen.
Das brachte den besagten Fehler (Fehlernr. 2176). Ich vermute, das dieser Befehl nicht dazu geeignet ist, was ja auch logisch ist, da es sich dabei ja um den Datentyp "String" handeln muss.
Nur habe ich in meiner Literatur den passenden Befehl noch nicht gefunden.

Gruß Hubert

MaggieMay

Hi,
ZitatHabe nun das Bild in einer Tabelle (tblBildOLE) gespeichert.
warum hast du das getan, was versprichst du dir davon?

Es gibt die Möglichkeit das Bild als Binärdatei in einem OLE-Objekt zu speichern und dies auch wieder zu extrahieren, um es schließlich als Hintergrundbild einsetzen zu können (Quelle: MS-Office-Forum, Access Code-Archiv).

Aber wozu der Umstand, warum nicht einfach das Bild (bzw. die Bilder), wenn es denn unbedingt variabel sein muss, mit der Anwendung ausliefern bzw. in einem Netzwerkordner ablegen?
Freundliche Grüße
MaggieMay

trebuh

Hallo MaggieMay,

Nun ja, wenn ich das Bild mit der Anwendung ausliefere, könnte man ja das Bild theoretisch ändern?
Falls meine Anwendung mal so weit sein sollte;-)
Nun ja, ich dachte, die Anwendung online als Demoversion anzubieten. Da kämme dann im Bericht die Grafik zum tragen.
Wenn das Bild (ist nicht groß, nur 25Kb) in der Tabelle fest hinterlegt ist, wäre es immer mit dabei uns auch vor Missbrauch geschützt. (So dachte ich mir jedenfalls).

Da ich mich mit den OLE-Objekten bislang noch nicht befasst habe, weiß ich natürlich nicht, wie groß der Aufwand ist.

Vielleicht gibt es auch noch alternativen?

Gruß Hubert

daolix

Hallo
die Frage war eher wie du das Bild in die Tabelle bringst. Wenn es sich um ein echtes OLE-Object handelt ist das Bildsteuerelemnt das falsche Ausgabecontrol.
Wenn es ein Abbild einer Bilddatei ist, must du entweder die datei bei jedem zugriff temporär auf die Festplatte auslagern oder im Speicher ein bmp erzeugen und das ausgelesene Array der Picturedata-Eigenschaft des Bildcontrols zuweisen.
Wenn du jetzt access neuergleich  2007 hast könntest du auch es mit den anlagefeldern probieren.

trebuh

Hallo daolix,

Ouh... Jetzt wird es für mich kompliziert :o
Also ich benutze Access 2010.

Habe mal in der Bildtabelle ein extra Feld angelegt, und das Bild zugewiesen. Wie muss ich da in dem Fall weiter vorgehen?


MaggieMay

Die Frage, ob das Bild dynamisch eingestellt werden muss (abhängig wovon?) hast du noch nicht beantwortet.

Warum kann es nicht fest in den Bericht integriert werden? Es ist nirgendwo zu lesen, dass es variabel sein soll.
Freundliche Grüße
MaggieMay

trebuh

Der Gedanke war, die Anwendung praktisch "freizuschalten"
Da es ja mehrere Berichte sind, bräuche ich auf diese Art und Weise nicht nochmal zusätzliche Berichte nur für die Demoversion anzulegen. Beim Aufruf der Berichte wird geprüft, ob die Anwendung freigeschaltet ist oder nicht (OpenArgs True oder False).

daolix

Hallo
dann schalte doch dementsprechend das BildControl im Bericht Sichtbar/nichtsichtbar.

MaggieMay

@daolix:
Es handelt sich nicht um ein "Bild-Control", sondern um den Berichts-Hintergrund.

Aber auch das (bzw. der) sollte sich abh. vom Freischalt-Mechanismus per VBA beeinflussen lassen.
Freundliche Grüße
MaggieMay

trebuh

Hallo MaggieMay und daolix,

@ daolix

Wenn ich Dich richtig verstehe, meinst Du praktisch ein Bild in den Bericht einfügen und dieses sichtbar schalten oder nicht?

@ MaggieMay

Ja genau. Es handelt sich um den Berichtshintergrund. Dieser hat ja den Vorteil, das dieser auf jeder Seite mitgedruckt wird.

Hät nicht gedacht, dass das so kompliziert werden kann. Die OLE-Objekte in einem Formular anzeigen ist ja einfach. Nur blöd, dass das mit dem Hintergrundbild nicht so einfach ist. Muss mal drüber schlafen. Vielleicht fällt mir da noch eine andere Möglichkeit ein.

Gruß

daolix

Hallo
wenn immer das selbe Wasserzeichen gezeigt oder nicht gezeigt werden soll, dann erstelle eine bildcontrol mit dem eingebetteten wasserzeichen, setzte visible auf false und werte openargs beim laden aus
if me.openargs =trueOderFalse then me.picruredata = me.DasNichtSichtbareBildcontrol.pictureData

trebuh

Hallo daolix und MaggieMay.

Ins Bett gehen und da richtige Buch lesen hilft anscheinend. Ich hab´s!!!!! ;)

Musste ich gleich nochmal testen und es hat auf anhieb geklappt.

Das Lösungswort heißt:
Me.PicturePages = 0
für alle Seiten bzw.
Me.PicturePages = 2
für keine Seiten im Ereignis "Beim Öffnen" des Berichts.

Hab das Bild im Bericht eingebettet und eine entsprechende If-Schleife  beim öffnen des Berichtes gesetzt.

Vielen Dank euch Zwei´n für eure Mühe.

Und jetzt Gute Nacht.

Hubert
(PS: Jetzt schläfts sich besser) :D

MaggieMay

Hi,

du hättest auch gleich von Anfang an sagen können, dass es dir lediglich darum geht, das Hintergrundbild ein- oder auszuschalten. Die Idee, das Bild in einer Tabelle zu speichern, legt nahe, dass du es variabel einstellen willst, bspw. abhängig vom Anwender.
Freundliche Grüße
MaggieMay