Discussion:
Long binary-Daten Pfad auslesen
(zu alt für eine Antwort)
Hubert Holler
2010-10-16 07:56:22 UTC
Permalink
Ich habe in einer MS-Access Tabelle ein OLE Datenfeld, wo ich Long
binary-Daten abgelegt habe.

Ich möchte nun über eine Funktion den Pfad dieses long binary
Objektes, dass in diesem Feld gespeichert ist auslesen.

Ich habe die Funktion von http://support.microsoft.com/kb/q170531/
ausprobiert. Bekomme aber da nur lauter binäre Zeichen mit der
Funktion GetLinkedPath.

Hoffe da kann mir jemand weiterhelfen.
Vielen Dank für jede Antwort
Wolfgang Badura
2010-10-17 11:30:44 UTC
Permalink
Hallo Hubert!
Post by Hubert Holler
Ich habe die Funktion von http://support.microsoft.com/kb/q170531/
ausprobiert.
Einleitend steht dort:
"Microsoft Access bietet keine Möglichkeit festzustellen, den Pfad für ein
verknüpftes OLE-Objekt in einer Tabelle gespeichert. Daher ist die
empfohlene Vorgehensweise erstellen Sie ein zusätzlicher Text-Feld in der
Tabelle und den Pfad zum verknüpften OLE-Objekt in das Feld speichern.

Dieser Artikel beschreibt wie Sie eine Visual Basic für
Applikationen-Prozedur, um den Pfad für ein verknüpftes OLE-Objekt aus
OLE-Header das Objekt abzurufen. Allerdings ist es möglich, dass dieses
Verfahren in einigen Fällen möglicherweise nicht funktioniert. Den Pfad in
ein separates Textfeld speichern, wenn Sie das Objekt verknüpfen ist am
besten um sicherzustellen, dass Sie den Pfad später abrufen werden."

Ich kann OLE-Objekte einer Tabelle zwar exportieren, aber auch in diesen
Daten ist kein Pfad zum Objekt gespeichert.
Also speichere den Pfad des Objektes in einem eigenem Textfeld.

Wolfgang
Wolfgang Badura
2010-10-17 12:52:08 UTC
Permalink
Hallo Hubert!
Post by Hubert Holler
Ich habe in einer MS-Access Tabelle ein OLE Datenfeld, wo ich Long
binary-Daten abgelegt habe.
Noch etwas:
Um welche Objekte handelt es sich? Nur um Bilder desselben Typs, oder
verschiedenste Dateien, die mit jeweils eigenen Programmen geöffnet werden?
Ich frage deshalb, da OLE-Objekte immer die gesamte Datei im OLE-Datenfelder
speichern, egal ob Du im Form verknüpft oder eingebettet einstellst.
Wenn Du also das Bild auf deinem Rechner hast, ist es damit ein zweites Mal
gespeichert.
Deshalb würde ich grundsätzlich auf OLE-Datenfelder verzichten und nur
Dateinamen speichern,
wobei mit Doppelklick die zugehörige Anwendung gestartet wird.
Weiters ist mir aufgefallen, daß in dem MS-Beipiel unter
http://support.microsoft.com/kb/q170531/
nicht der Header der OLE-Daten untersucht wird, sondern gehofft wird, daß
irgendwo in den Felddaten
":/" oder ein UNC-Pfad enthalten ist. Das ist nicht sehr effizient, deshalb
auch die Anmerkung,
daß der Code nicht immer funktioniert.
Speichere also besser den Dateinamen.

Anbei noch der Code zum Öffnen der mit einer Dateispezifikation verknüpften
Anwendung:

Private 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

' Fenster-Handle des Desktops (für ShellExecute)
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function GetSystemDirectory Lib "kernel32" _
Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) _
As Long

' Dokument öffnen
Private Const SE_ERR_NOASSOC = 31
Private Const SE_ERR_NOTFOUND = 2

' Dokument öffnen und ggf. autom. den "Öffnen mit..." - Dialog anzeigen
Sub DocumentOpen(sFilename As String)
Dim sDirectory As String
Dim lRet As Long
Dim DeskWin As Long

DeskWin = GetDesktopWindow()
lRet = ShellExecute(DeskWin, "open", sFilename, _
vbNullString, vbNullString, vbNormalNoFocus)

If lRet = SE_ERR_NOTFOUND Then
'Datei nicht gefunden

ElseIf lRet = SE_ERR_NOASSOC Then
'Wenn die Dateierweiterung noch nicht bekannt ist...
'wird der "Öffnen mit..."-Dialog angezeigt.
sDirectory = Space(260)
lRet = GetSystemDirectory(sDirectory, Len(sDirectory))
sDirectory = Left(sDirectory, lRet)
Call ShellExecute(DeskWin, vbNullString, _
"RUNDLL32.EXE", "shell32.dll,OpenAs_RunDLL " & _
sFilename, sDirectory, vbNormalFocus)
End If
End Sub
Sascha Trowitzsch
2010-10-20 09:46:58 UTC
Permalink
Hi Haiflosse,

Wenn du schon crosspostest, dann erwartet man bitte wenigstens Rückmeldungen
auf die vorgefundenen Antworten.
Entscheide dich, wo du weitermachen willst.

Ciao, Sascha
Post by Hubert Holler
Ich habe in einer MS-Access Tabelle ein OLE Datenfeld, wo ich Long
binary-Daten abgelegt habe.
Ich möchte nun über eine Funktion den Pfad dieses long binary
Objektes, dass in diesem Feld gespeichert ist auslesen.
Ich habe die Funktion von http://support.microsoft.com/kb/q170531/
ausprobiert. Bekomme aber da nur lauter binäre Zeichen mit der
Funktion GetLinkedPath.
Hoffe da kann mir jemand weiterhelfen.
Vielen Dank für jede Antwort
Loading...