Neuigkeiten:

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

Mobiles Hauptmenü

JPG Bilddatei per VBA in OLE Feld einlesen

Begonnen von MaWi, Dezember 31, 2021, 17:32:51

⏪ vorheriges - nächstes ⏩

MaWi

Hallo alle zusammen

Habe schon ganz lange gegoogelt aber keine guten Hinweise gefudnen.

In ein OLE Feld möchte ich gerne per VBA eine JPG Bilddatei von meiner Festplatte auswählen und "importieren".
Der Aufruf des Fileselecotr kenne ich, aber wie bringe ich die Bilddatei in mein OLE Feld?

Folgendes funktioniert nicht:
Me.Pic1.SourceDoc = DateiAuswählen()

wobei Pic1 mein OLE Feld ist und die Funktion DateiAuswahl() den Pfard des Bildes zurück gibt.

Ev ist es noch wichtig zu erwähnen, dass ich die Jet Engine durch den MS SQL Server ersetzt habe.
Wenn ich das Bild mit copy Paste kopiere, dann wird das Bild angezeigt. Aber ich brauche ein vba Code welcher angeklickt werden kann und dann ein Bild ausgewählt wird.

Vielen Dank für Hinweise
Gruss Markus

andyfau

Hallo,

ich würde keine Bilddaten in der DB ablegen, da diese die DB ziemlich aufblähen und so Access (in der 32 bit Version) bei 2 GB schnell an seine Grenzen stößt. Im Formular lassen sich Bilder einfach, dynamisch über die Picture-Eigenschaft in ein Bildfeld einlesen.:

Me.Bildfeld.Picture = Pfadstring

Gruß
Andreas
Beste Grüße
Andreas

DF6GL

Hallo,


oder den Dateipfadnamen in eine Tabellenfeld ablegen und das Bild-Steuerelement an dieses Tabellenfeld binden.

markusxy

Zitat von: MaWi am Dezember 31, 2021, 17:32:51In ein OLE Feld möchte ich gerne per VBA eine JPG Bilddatei von meiner Festplatte auswählen und "importieren".

In welchem Format?
OLE-Objekt, Binärstream oder dieses seltsame interne Access Bild-Format?
Von letzterem wird ja deshalb abgeraten, weil bis zum 10-fachen Speicherplatz des Originals benötigt wird.

Vielleicht erklärst du also erstmal etwas die Zusammenhänge.

PhilS

Zitat von: markus888 am Januar 02, 2022, 16:40:30... oder dieses seltsame interne Access Bild-Format?
Diese Format nennt sich "Bitmap" und es wird auch noch an der ein oder anderen Stelle verwendet. ;-)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MaWi

Hallo alle zusammen,

vielen Dank für die Antworten zur Möglichkeit anstelle des Bildes, den Pfad zu speichern.
Das funktioniert leider nicht, weil die Datenbank in verschiedenen Firmen zum Einsatz gelangt und kein gemeinsames Dateisystem zur Verfügung steht.
Somit muss das Bild als Binärdatei auf dem MS SQL Server gespeichert werden.
Das aufblähen kann nicht das Problem sein, denn der MS SQL Server ist skalierbar auf verschiedene Systeme verteilbar.
Abgesehen davon haben Berechnungen im Vorfeld ergeben, dass die Anzahl der Bilder und die Bildgrössen vertretbar sein wird.

Somit bleibt die Ausgangslage:
Ein auf einem Lokalen Gerät vorliegendes Bild C:\Eigene Dateien\Beispiel.jpg Soll mittels der Dateiauswahlbox (objFiledialog As FileDialog und objFiledialog.Show) angeklickt werden und in ein Feld auf dem MS SQL Server gespeichert werden.

Ich vermute, dass der FeldDatentyp auf dem MS SQL Server ein Bild oder ein varbinary(max) sein sollte.

Und nun suche ich den VBA Code um dieses Bild "einzulsen".

Vielen lieben Dank für Hinweiese welche es mir ermöglichen, die Reichtige Technologie zu Googlen und umzusetzen.

Viele liebe Grüsse
Markus

MzKlMu

#6
Hallo,
Zitat von: undefinedund kein gemeinsames Dateisystem zur Verfügung steht.
Das spielt doch keine Rolle, Du musst ja nur in einer Tabelle zu jeder Firma deren Pfad zu den
Bildern speichern.
Das lässt sich auch so einrichten, dass jede(r) Firma/User seinen Bildpfad wählt und speichert.
Gruß Klaus

PhilS

Zitat von: MzKlMu am Januar 02, 2022, 19:40:04Das lässt sich auch so einrichten, dass jede(r) Firma/User seinen Bildpfad wählt und speichert.
Aber das hilft doch nicht weiter, wenn es kein gemeinsames Dateisystem gibt.

Zitat von: MaWi am Januar 02, 2022, 19:19:29Ich vermute, dass der FeldDatentyp auf dem MS SQL Server ein Bild oder ein varbinary(max) sein sollte.

Und nun suche ich den VBA Code um dieses Bild "einzulsen".
Nimm Varbinary(max) als Datentyp. Image ist "veraltet".

Wenn du mit eingebundenen ODBC Tabellen arbeitest, nimm mal als "DAO Field AppendChunk" als Suchbegriffe. (Das Beispiel in der verlinkten Doku-Seite ist leider nicht hilfreich.)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

markusxy

Zitat von: PhilS am Januar 02, 2022, 18:50:07
Zitat von: markus888 am Januar 02, 2022, 16:40:30... oder dieses seltsame interne Access Bild-Format?
Diese Format nennt sich "Bitmap" und es wird auch noch an der ein oder anderen Stelle verwendet. ;-)

Mein Status war, es handle sich um ein Bitmap "ähnliches" Format.
Aber habe mich da nie vertieft, da ich das nicht verwenden würde.

MaWi

Hallo alle zusammen,

vielen Dank für die vielen Hinweise. Ich werde diese alle abarbeiten. Danke Euch.

@MzKlMu
Das geht aus zwei gründen nicht. Wenn Mitarbeiter A in Firma A den Pfad auf N:\Bilder hat und Mitarbeiter B in Firma B den Pfad x:\Pictures hat, dann können die sich gegenseitig die Daten im Feld "Meine Beurteilung" nicht austauschen. Denn es sieht dann ja jeder nur sein eigenes Bild, nicht aber das des anderen.

Kommt noch die Problematik dazu, wenn das Bild umbenennt wird...

Lieber in der Datenbank speichern. Wir haben genug Ressourcen.

@PhilS Danke, ich probiere Varbinary(max) und suche mir Code zur Methode AppendChunk um das Bild rauf zu laden.

Wäre das u.U. auch für ein PDF Dokument geeignet? Es ist ein neuer Imput gekommen, dass man ev anstelle eines Bildes auch ein PDF anzeigen möchte.


Viele liebe Grüsse an Euch alle
Markus
 

PhilS

Zitat von: MaWi am Januar 04, 2022, 22:41:08Wäre das u.U. auch für ein PDF Dokument geeignet?
Ja, absolut. Der Ansatz besteht darin die binäre Datei, genauso wie sie im Dateisystem vorliegt, auch in die Datenbank zu schreiben. Der Dateityp spielt dabei überhaupt keine Rolle.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MaWi

Guten Abend PhilS,

bin gerade dabei meine DB Lösung fertig zu programmieren. Aber mir fehlt ein Code Beispiel.

Ich habe als das von Dir empfohlene Varbinary(Max) Feld in der MS SQL Datenbank und ein Access Formular als Frontend. Mit einem Button möchte ich eine FileSelector bekommen, mit welchem ich die Datei auswählen kann die dann in das Varbinary(Max) File geladen wird. Sobald der Upload fertig ist, möchte ich gerne, die Datei im Access Frontend sehen können.

Will ich zuviel?
Viele Grüsse
Markus

markusxy

Zitat von: MaWi am Januar 19, 2022, 18:20:55Will ich zuviel?

Auf keinen Fall.
Die meisten durchdenken halt zuerst was sie umsetzen wollen und fangen dann an.
Umgekehrt kann man das natürlich auch machen.