Hallo,
ich möchte gern in Formularen einen Hyperlink zu einem Bild hinterlegen. Der Link ala http://adresse.de/bild.png soll in ein Textfeld eingefügt werden und das Bild dann in einem Bild-Steuerelement erscheinen. Via VBA lege ich me.Bild.picture = me.txtFeld fest.
Leider erhalte ich Laufzeitfehler 2220: Access kann die Datei 'http://......' nicht öffnen. Ich hatte es auch mal mit dem Webbrowser Steuerelement probiert. Dieses öffnet mir zwar problemlos Webseiten, jedoch auch nicht Direktlinks auf Bilder.
If Me.TxtBildLink > 0 Then
Dim objWebbrowser As Webbrowser
Set objWebbrowser = Me.Webbrowser.Object
objWebbrowser.Object.Navigate2 Me.TxtBildLink
End If
Was mache ich falsch?
LG
Hallo dattek,
probier doch mal, das Bild in einen mini-HTML-Rahmen zu packen, etwa so
<html><a href="<bild>"</html>
lg
crystal
Also...
If Me.TxtBildLink > 0 Then
Dim objWebbrowser As Webbrowser
Set objWebbrowser = Me.Webbrowser.Object
objWebbrowser.Object.Navigate2 "<html><a href=" & me.txtbildlink & "</html>"
End If
... funktioniert nicht. Wie soll ich das "in einen mini-HTML-Rahmen" packen?
Hallo,
was passiert, wenn die URL (!, nicht Link) direkt in das Adressfeld eines Browsers eingegeben wird?
Weiß es nicht genau was Du meinst mit URL, nicht Link.....
Ihr könnt es ja damit mal ausprobieren: http://www.access-o-mania.de/forum/images/aomlogo.jpg
Hallo,
naja, eine URL ist nun mal kein Link und auch kein HTML....
Und dies funktioniert nicht?:
objWebbrowser.Object.Navigate2 "http://www.access-o-mania.de/forum/images/aomlogo.jpg"
Hallo Franz,
wenn ich es so eingebe wie Du es geschrieben hast, funktioniert es tadellos.... Nur wenn ich anstatt der URL den Inhalt des Textfeldes oder den Inhalt einer Variablen ausgebe, erhalte ich den Fehler, obwohl z.B. der Inhalt der Variablen der gleiche ist wie die URL...
Wie kann ich also die oben genannte URL gegen eine Variable tauschen?
Hallo,
das Textfeld (und das entspr. Tabellenfeld ) darf nicht als Hyperlink definiert sein....
... ist es auch nicht.. Es sind ganz normale Textfelder....
Hallo,
Dim strURL as String
strURL = "http://www.access-o-mania.de/forum/images/aomlogo.jpg"
.
.
objWebbrowser.Object.Navigate2 strURL
.
.Es könnte aber auch sein, dass der WB nicht mit Variant zurecht kommt:
Zitat.
.
If not IsNull(Me!TxtBildLink) Then
Dim objWebbrowser As Webbrowser
Set objWebbrowser = Me.Webbrowser.Object
objWebbrowser.Object.Navigate2 cStr(Me!TxtBildLink)
End If
Hallo,
also bei mir klappt es mit
dim WB As WebBrowser
WB.Navigate2 "http://www.access-o-mania.de/forum/images/aomlogo.jpg"
lg
crystal
Lieber Franz, es geht leider immer noch nicht... Das Webbrowser Steuerelement zeigt immer an "Die Adresse ist ungültig.".
@crystal: Wenn ich Die Adresse so eingebe wie Du, dann läuft es bei mir auch. Ich muss aber die Adresse aus einem Textfeld oder einer Variablen übergeben. Leider schlagen alle Versuche damit leider fehl.
Noch eine Idee?
Hallo,
schreib mal die Variable oder das Textfeld mit Debug.print in den Direktbereich und kopier das hierher.
Debug.Print Me!txtBildLink
Hier das Ergebnis von debug.print:
http://www.access-im-unternehmen.de/fileadmin/images/accessbasics.gif
Hallo,
jetzt klappt's. Sorry - ich hatte die Codeschnipsel aus einer Applikation kopiert, aber nicht vollständig.
Ich habe eine Tabelle1 angelegt, die nur eine Id und ein Textfeld "url" enthält.
In dieses Feld habe ich dann die Werte
http://www.access-o-mania.de/forum/images/aomlogo.jpg
und im 2. DS
http://www.access-im-unternehmen.de/fileadmin/images/accessbasics.gif
eingetragen.
Dann habe ich Formular1 angelegt mit
zwei Textfeldern
Id und url und
einem Webbrowser-Element mit Namen WB1.
In WB1.Steuerelement-Inhalt habe ich eingetragen "fgfg", also irgendeinen Quatsch.
Im Code steht
Option Compare Database
Option Explicit
Public WithEvents WB2 As WebBrowser
'
Private Sub Form_Current()
WB2.Navigate url
End Sub
Private Sub Form_Load()
Set WB2 = WB1.Object
End Sub
Private Sub url_AfterUpdate()
WB2.Navigate url
End Sub
Im ursprünglichen Code hatte ich noch
Public WithEvents HDoc As HTMLDocument
Private Sub WB2_DocumentComplete(ByVal pDisp As Object, URL As Variant)
If WB2.ReadyState = READYSTATE_COMPLETE Then
Set HDoc = WB2.Document
End If
End Sub
weil ich später mit HDoc gearbeitet habe (HDoc enthält den Quelltext).
Etwas seltsam ist:
1. wenn im WB1 als Inhalt nix steht, kommt die Fehlermeldung "Ungültige Adresse..." (wohlgemerkt im Browser-Fenster).
2. wenn in WB1 als Inhalt "fgfg" steht, klappt es.
(WB2 und HDoc habe ich public deklariert, weil ich in verschiedenen Subs darauf zugreife. WithEvents ist nötig, um den ReadyState abfangen zu können. Ist bei dir vermutlich entbehrlich.)
Interessant ist noch, dass die Navigation in WB2 erfolgt, aber in WB1 angezeigt wird.
Egal, Hauptsache es klappt und hilft dir weiter.
lg
crystal
Das ist seltsam.. Sobald im Steuerelementinhalt tatsächlich irgendwas steht, funktioniert es. Danke Crystal.
Leider ist jedoch das Webbrowser Steuerelement nicht so geeignet um nur Bilder anzuzeigen. Es fehlen wie bei einem Bild Steuerelement Funktionen wie "dehnen" oder "zoomen". Weiterhin will ich mich mit dieser Lösung noch nicht so ganz abfinden.
Es muss doch unter Access möglich sein, Bilder aus einer URL anzuzeigen - und zwar als Bilder in einem Bild-Steuerelement....
Hallo,
benutze die folgende Funktion (Public in einem Standardmodul), um ein Bild an einer URL in eine Datei herunterzuladen. Die Datei kann dem Steuerelementinhalt des Bild-Steuerelementes anschließend zugewiesen werden.
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Function fktDlPic2File(URL As String, Filename As String)
fktDlPic2File = URLDownloadToFile(0, URL, Filename, 0, 0)
End Function
Hallo,
nach meiner Kenntnis ist es durchaus möglich, mit HTML-Anweisungen ein Bild in dessen Größe anzupassen und z.B. in einem genau bemessenen Rahmen darzustellen. Das ist dann aber HTML-Programmierung und die URL des Bildes müsste dazu in entsprechende HTM-Statements geschachtelt werden.
Der Ansatz, das Bild einfach herunterzuladen und dann in einem Bild-Steuerelement darzustellen, ist zunächst natürlich einfacher. Aber man muss dann auch noch etwas "Verwaltung" betreiben, um das (bereits gespeichrte) Bild beim nächsten Aufruf des Datensatzes wieder zu finden und darzustellen - oder man müsste es jedesmal als temporäre Datei speichern und anzeigen.
Das muss alles abgewogen werden...
lg
crystal
Ich werde es nach Franz seinem Code von der URL runterladen und die Datei dann in eine FileStream Spalte Streamen und es so in der Datenbank speichern. Also lieben Dank an Euch beide.
Hi datekk,
es ist mir (inzwischen) durchaus klar, dass du eher dazu neigst, Bilder in die Datenbank zu speichern.
Ich persönlich tendiere eher dazu, sie im Filesystem abzulegen und in der Datenbank nur einen Verweis (also Pfad und Namen) zu speichern.
Aber jeder ist seines eigenen Glückes Schmied...
lg
crystal
Hi Crystal,
das würde ich auch so machen, allerdings wird die DB von Mitarbeitern an verschiedenen Standorten genutzt und läuft im Backend nicht mit Access Tabellen sondern mit SQL. SQL bietet sog. FileTables. Diese agieren wie ein extra Verzeichnis, bzw. werden die Dateien tatsächlich in ein extra Verzeichnis, halt auf dem SQL Server abgelegt. Die Filetable speichert Filename, Art, Größe, Speicherort und vergibt noch eine ID pro File. Diese ID lässt sich dann mit einem Datensatz verbinden. Es ist also irgendwie das beste aus allem :)
Bei dem Bildprojekt geht es um kleine Logos von Firmen. Diese Logos sollen im Fenster der Firma mit angezeigt werden. Es sind also keine riesengroßen Datenmengen.
Hi datekk,
lieben Dank für diese Zusatzinfo!
Gruß
crystal
Ich muss das Thema nochmal aufgreifen.
Wenn ich ein Formular erstelle und dort ein Bild Steuerelement zufüge, erscheint ein Explorer-Fenster in dem ich meine Bilddatei zum anzeigen auswählen soll.
Gebe ich dort aber eine URL ein.. z.B. https://www.access-o-mania.de/forum/images/aomlogo.jpg so wird das Bild auch im Steuerelement angezeigt. In den Eigenschaften steht bei Bild dann aber statt aomlogo.jpg aomlogo[1].jpg
Ich bin alle auffindbaren Eigenschaften dieses Steuerelements durchgegangen, nirgends finde ich die anderen Teile der URL...
Wie kann es sein, dass ich beim Einfügen des Steuerelements eine URL angeben kann, später aber nicht mehr. Oder muss man das irgendwie als Array irgendwo übergeben oder als Collection?
Hallo!
Stehen die von dir gesuchten Bilder in der Tabelle MSysResources?
... dann hast du das Steuerelement vermutlich die Bildtyp-Eigenschaft auf "Freigegeben" eingestellt.
mfg
Josef
Kannst Du etwas näher erklären, was das mit der Problemstellung zu tun hat und ggf. aufzeigen, wie man Bilder aus URL-Quellen anzeigen kann?