Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: Shayol am Januar 30, 2016, 08:57:04

Titel: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 30, 2016, 08:57:04
Hallo zusammen,
ich habe etwas gefunden , was ich gerne nach machen wollte
https://www.youtube.com/watch?v=AeKGiwcctGQ (https://www.youtube.com/watch?v=AeKGiwcctGQ)
Bei Marcotools , genauer gesagt beim Ausdruck = DB_Pfad() ,kommt die Funktion(DB_Pfad()) nicht zur Auswahl. Habe Access 2010 sowie 2013 auf dem Rechner , aber erscheinen tut es nicht. Mein Elemet & Ausdruck würden so aussehen.


Element=[imgBild].[Bild]
Ausdruck= DB_Pfad() & "Bilder\" & [ID_Bauteil] & ".jpg"


Wie würde der Code den aussehen in VBA ? Die ganzen Bilder würde ich immer mit der jeweiligen Bauteil_ID abspeichern und in den Ordner-> Bilder ablegen.
Private Sub Form_Current()

End Sub

Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: DF6GL am Januar 30, 2016, 09:31:44
Hallo,

soweit ich mich erinnere, habe ich  den passenden Code (KEIN Makro!) schon in der Beispiel-DB eingebaut...
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 30, 2016, 22:06:09
Nicht so ganz , was ich gesucht habe.

Aber kannst du mir sagen , wieso die Funktion  nicht zur Auswahl steht ?

DB_Pfad() ?!
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: DF6GL am Januar 30, 2016, 22:25:55
Hallo,


vermutlich ist das eine user definierte Public-Funktion, die den aktuellen DB-Pfad zurück liefert. Die muss von Hand in einem Standard-Modul erzeugt werden:

Public Function DB_Pfad() As String
DB_Pfad= Currentproject.Path & "\"
End Function
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 30, 2016, 22:39:20
Private Sub Form_Current()
Me!imgBild.Picture = CurrentProject.Path & "\Bilder\" & [ID_Bauteil] & ".jpg"
End Sub


So klappt es schonmal :) Aber bekomme noch eine Fehlermeldung, wenn für das endsprechende Bauteil, Kein Bild vorhanden ist.
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: DF6GL am Januar 30, 2016, 22:48:49
Hallo,

Du musst halt vorher mit z. B. Dir() prüfen, ob das Bild existiert:


Private Sub Form_Current()
Dim FName as String
FName=CurrentProject.Path & "\Bilder\" &[color=red] Me![[/color]ID_Bauteil] & ".jpg"

If Dir(FName)  "" Then
Me!imgBild.Visible =""   'manchmal auch : Me!imgBild.Visible ="(keines)"
Me!imgBild.Visible =false
Else
Me!imgBild.Visible =true
Me!imgBild.Picture = FName
End If
End Sub

Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 30, 2016, 23:05:52
Private Sub Form_Current()
Dim FName as String
FName=CurrentProject.Path & "\Bilder\" & Me![ID_Bauteil] & ".jpg"

If Dir(FName) [color=red]=[/color] "" Then
Me!imgBild.Visible = CurrentProject.Path & "\Bilder\"leer.jpg"
Me!imgBild.Visible =false
Else
Me!imgBild.Visible =true
Me!imgBild.Picture = FName
End If
End Sub


Glaube du hast oben das = vergessen . Ich farge nur nach, ob es so richtig ist. Kann ich das auch somachen , wenn kein Bild im Ordner enthalten ist, das er dafür ein festgelegtes Bild verwendet ? Hoffe der Pfad ist dann so richtig.
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: MaggieMay am Januar 30, 2016, 23:42:10
Hallo,

so sollte es richtig sein:
Me!imgBild.Picture = CurrentProject.Path & "\Bilder\leer.jpg"
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 31, 2016, 00:05:59
Erstmal danke DF6GL & MaggieMay, das ihr um diese Uhrzeit mir noch hilft. Aufjedenfall bekomme ich keine Fehlermeldung mehr.
Aber ein neues Problem ist erschienen, wenn ich ein Bauteil aussuche , was kein Bild im Ordner hat. Dann erscheind nicht das Bild leer.jpg.  Es liegt aber im Ordner drinnen.

Die Größe des Rechtecks , müsste egal sein oder ?

Private Sub Form_Current()
Dim FName As String
FName = CurrentProject.Path & "\Bilder\" & Me![ID_Bauteil] & ".jpg"

If Dir(FName) = "" Then
Me!imgBild.Visible = False
Me!imgBild.Picture = CurrentProject.Path & "\Bilder\leer.jpg"
Else
Me!imgBild.Visible = True
Me!imgBild.Picture = FName
End If
End Sub
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: MaggieMay am Januar 31, 2016, 01:56:02
Me!imgBild.Visible = False
Naja, wenn du das Bild nicht anzeigst, kannst du es auch nicht sehen...
;-)
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 31, 2016, 02:11:19
jo , habs gemerkt. :P  Vorlauter freunde , vergessen den Post anzupassen ::) Du warst schneller.

Jetzt aber das letzte was mich bei diesem Thema Interessiert. Das entsprechende Bild wird angezeigt, wenn ich jetzt auf das Bild klicke , soll es sich öffnen im Orginal zustand bzw. So als ob man ein Bild auf dem Deskopt öffnet / Explorer ect.
Habe da was gefunden mit

Private Sub imgBild_Click()
On Error GoTo Fehler
    If Not Nz(Me!imgBild, "") = "" Then
       Application.FollowHyperlink "\Bilder\" & Me![ID_Bauteil] & ".jpg"
     Else
      MsgBox "kein Bildpfad vorhanden"
    End If
    Exit Sub
exit_Fehler:
Exit Sub
Fehler:
    MsgBox "Fehler...Das Bild ist nicht auffindbar. Haben Sie es umbenannt oder verschoben?."
    Resume exit_Fehler
End Sub



Der springt jedesmal zum Fehler. Egal ob ich den Link komplett ausschreibe oder ihn so lasse.

Application.FollowHyperlink "C:\Users\Patrick\Desktop\Lager\arbeit\Bilder\" & Me![ID_Bauteil] & ".jpg"


Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: DF6GL am Januar 31, 2016, 09:45:16
Hallo,


sorry für das vergessene "=", das eigentlich ein "<>" gewesen ist. 

Zitat
"Bilder" & Me![ID_Bauteil] & ".jpg"

ist ja auch kein gültiger Pfad...


Die File-Extension muss zunächst in Windows registriert und mit einem Anzeige/Bearbeitungsprogramm verknüpft sein.

Sodann sollte das Protokoll explizit erwähnt werden:


Application.FollowHyperlink "File://" & "C:\Users\Patrick\Desktop\Lager\arbeit\Bilder\" & Me![ID_Bauteil] & ".jpg"

Application.FollowHyperlink "File://" & CurrentProject.Path & "\Bilder\" & Me![ID_Bauteil] & ".jpg"


Besser wäre vielleicht die Verwendung von Shellexecute:

http://www.dbwiki.net/wiki/VBA_Tipp:_Anwendung_mit_ShellExecute_starten
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Januar 31, 2016, 09:50:44
ok , dann werde ich mir das mal genauer an schauen, das Shellexecute.

Habe ebenfalls diese Seite gefunden http://www.office-loesung.de/ftopic35417_0_0_asc.php (http://www.office-loesung.de/ftopic35417_0_0_asc.php)
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Februar 01, 2016, 11:15:42
Extra Modul erstellt mit dem Namen: mdlShellExecute
Option Compare Database
Option Explicit

Public Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hWnd As Long, _
                     ByVal lpOperation As String, _
                     ByVal lpFile As String, _
                     ByVal lpParameters As String, _
                     ByVal lpDirectory As String, _
                     ByVal nshowcmd As Long) As Long
   
Public hWnd As Long
Public Const SW_HIDE = 0          ' Versteckt öffnen
Public Const SW_MAXIMIZE = 3      ' Maximiert öffnen
Public Const SW_MINIMIZE = 6      ' Minimiert öffnen
Public Const SW_NORMAL = 1
Public Const SW_RESTORE = 9
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNOACTIVATE = 4

Public Function DateiOeffnen(Aktion As String, Pfad As String, _
                             Ansicht As Long) As Boolean
    Call ShellExecute(hWnd, Aktion, Pfad, "", "", Ansicht)
End Function



Und das Bild so verbunden.
Private Sub imgBild_Click()
Dim Pfad As String
    Pfad = "Bilder\" & Me![ID_Bauteil] & ".jpg" '< XXX = Endung mdb, jpg, doc usw.
    DateiOeffnen "open", Pfad, SW_MAXIMIZE
End Sub


Wenn ich auf das Bild klicke, öffnet sich das entsprechende Bild nicht. Der Pfad müsste doch ok sein . Ich sehe zumindest nicht, was ich jetzt falsch gemacht haben sollte.

Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: MaggieMay am Februar 01, 2016, 11:30:49
Hallo,
ZitatDer Pfad müsste doch ok sein
das glaube ich nicht, versuche es besser mal mit dem vollständigen Zugriffspfad, so wie du es in Antwort #4 geschrieben hattest.
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Februar 01, 2016, 11:59:50
PERFEKT DANKE !!! :-*

;D
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Februar 01, 2016, 23:49:00
Bin gerade auf der Arbeit und wollte den Pfad anpassen. Der zeitige Code.
Private Sub Form_Current()
Dim BName As String
BName = CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\" & Me![ID_Bauteil] & ".jpg"

If Dir(BName) = "" Then
Me!imgBild.Visible = True
Me!imgBild.Picture = CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\leer.gif"
Else
Me!imgBild.Visible = True
Me!imgBild.Picture = BName
End If
End Sub


Bild öffnen
Private Sub imgBild_Click()
Dim Pfad As String
   
    'Einfach den Pfad ändern und das war's....
    Pfad = CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\" & [ID_Bauteil] & ".jpg" '< XXX = Endung mdb, jpg, doc usw.
    DateiOeffnen "open", Pfad, SW_MAXIMIZE
End Sub


Der Zeigt mir in VBA an , das die Variable BName den Wert "C:\Users\PPUETZ1\DesktopW:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\XXX.jpg"

Meine Bearbeitungsdatei(Lager.accdb) liegt auf dem Desktop und meine Backend auf dem Netzlaufwerk (W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager)

Ich muss auch sagen , das das Laufwerk W, ein Netzwerk Festplatte ist. proj(\\ner9010301) (W:)
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: Shayol am Februar 02, 2016, 00:39:41
Muss man jetzt das Laufwerk und den Pfad explizip vordefinieren, wenn man auf die Bilder zugreifen möchte die auf einem anderen Laufwerk befinden? Bei mir wäre das der Fall Laufwerk: W zB. mit

ChDrive
ChDir

oder alles in UNC-Pfade auslesen lassen ? Könnt ihr mir dabei helfen.
Netzwerk Festplatte ist. proj(\\ner9010301) (W:)

Option Compare Database

Private Declare Function WNetGetConnection Lib "mpr.dll" _
    Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, _
                                ByVal lpszRemoteName As String, _
                                cbRemoteName As Long) As Long

Public Function GetUNCPath(ByVal sLocalPath As String) As String
'// -----------------------------------------------------------------
'// Methode:   | Konvertiert einen Pfad in UNC-Pfad (\\SERVER\...)
'// -----------------------------------------------------------------
'// Parameter: | sLocalPath = gültiger, lokaler Pfad (X:\..)
'// -----------------------------------------------------------------
'// Rückgabe:  | bei Erfolg = UNC-Pfad
'//            | bei Fehler = sLocalPath
'// -----------------------------------------------------------------
    Const NO_ERROR  As Long = 0
    Dim sUNCPath    As String
    Dim sResult     As String
    Dim sDrive      As String
   
    GetUNCPath = sLocalPath
    If VBA.Mid$(sLocalPath, 2, 1) <> ":" Then Exit Function
'// Die API-Funktion benötigt nur das Laufwerk!
    sDrive = VBA.Left$(sLocalPath, 2)
    sUNCPath = VBA.String(260, 0)
    If WNetGetConnection(sDrive, sUNCPath, VBA.Len(sUNCPath)) = NO_ERROR Then
        sResult = VBA.Left$(sUNCPath, VBA.InStr(sUNCPath, vbNullChar) - 1)
        If VBA.Len(sResult) > 0 Then
            GetUNCPath = sResult & VBA.Mid$(sLocalPath, 3)
        End If
    End If
End Function
Titel: Re: Bilder Laden beim Anzeigen
Beitrag von: DF6GL am Februar 02, 2016, 09:25:00
Hallo,

die ganzen Verbiegungen sind überflüssig....

Das Laden des Bildes erfordert den vollständigen PfadDateiNamen der Bilddatei.
Me!imgBild.Picture = "kompletter Pfad-Datei-Name"

Insofern solltest Du bestimmen/herausfinden, wie das akt. Laufwerk, der akt. PFADname und die Bilddatei einschließlich Extension heißt.


Currentproject.Path liefert den akt. Pfad, aus dem die DB (das FE) gestartet wurde und ist in dem Fall, dass die Bilddateien nicht unterhalb des FE-Verzeichnisses (Desktop) liegen, nicht zu gebrauchen.

Dieses:
CurrentProject.Path & "W:baofn2fn2-pubInstandhaltungInstandhaltung Schicht a,b,cMateriallisten_ÜbungsraumLagerBilderleer.gif"
ist an sich unsinnig.


Dieses:
CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\leer.gif"

zeigt zumindest die Verzeichnisstruktur und den Bilddatei-Namen. Das vorangestellte Currentproject.Path ist falsch.

Genau so, wie die reinen Bilddateinamen in einer Tabellenspalte hinterlegt sind, kann für den Fall des unterschiedlichen Einsatzortes der DB der entspr. Pfad-Namen in einer Tabelle hinterlegt werden.  Falls die Bilddateien in einem Unterverzeichnis des BE-Verzeichnisses liegen, kann der Pfad auch durch Auslesen des BE-Pfades aus der Tabelle Msysobjects ermittelt werden.


von  http://dbwiki.net/wiki/VBA_Tipp:_Namen_und_Pfad_der_verkn%C3%BCpften_Datenbank_ermitteln  :

Public Function GetDBName(TblName)
  GetDBName = DLookup("Database","MSysObjects","Name='" & TblName & "'")
End Function

Mit dieser Funktion und den Bilddateinamen aus der Tabelle läßt sich dann der benötigte PfadDateiName zusammensetzen, der der Picture-Eigenschaft zugewiesen wird.