Neuigkeiten:

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

Mobiles Hauptmenü

Bilder Laden beim Anzeigen

Begonnen von Shayol, Januar 30, 2016, 08:57:04

⏪ vorheriges - nächstes ⏩

Shayol


Shayol

#16
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:)

Shayol

#17
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

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access