Hallo
Auf meinem Formular habe ich ein Listenfeld, das mir mehrere Einträge zeigt (Einträge von Angehängten Dokumenten mit dem Speicherpfad). Das Listenfeld ist ungebunden. Mit dem unten aufgeführten Code schreibe ich das ausgewählte Datei in ein Feld in der Tabelle die dem Formular hinterlegt ist. Danach wir das Dokument geöffnet und angezeigt. Funktioniert soweit. Wenn ich aber das geöffnete Formular schliesse und erneut öffnen will kommt eine Fehlermeldung (Anhang).
Code:
Private Sub lstAnhang_DblClick(Cancel As Integer)
'Abgespeichertes Dokument öffnen
Dim ctlAnhang As Control
Dim vntItem As Variant
Set ctlAnhang = Me!lstAnhang
For Each vntItem In ctlAnhang.ItemsSelected
db.Execute "Update tblMail Set mail_Anhang = '" & ctlAnhang.ItemData(vntItem) & "' WHERE mail_ID = 1"
Next vntItem
FollowHyperlink Me.mail_Anhang
Me.Refresh
End Sub
Ich habe nun ganz am Anfang vor dem Set Befehl ein Me.Refresh eingebaut und nun geht es. Ich weiss nicht ob dies eine sehr elegante Lösung ist oder ob mein Code nicht ganz das Gelbe vom Ei ist.
Hallo,
was bezweckst du mit dem Code?
Du überschreibst den (einzigen?) Datensatz in der Tabelle so oft wie eine Auswahl im Listenfeld getätigt wurde und am Ende öffnest du die zuletzt ausgewählte Datei.
Ist das Listenfeld überhaupt für die Mehrfachauswahl vorgesehen? Oder könntest du das Listenfeld nicht ebensogut an das Datenfeld "mail_Anhang" binden und dir das Update sparen?
Der parallele Zugriff auf einen Datensatz via Formular und Recordset sollte nach Möglichkeit vermieden werden.
PS:
Das Refresh wirkt vermutlich wie das Speichern des aktuellen Datensatzes, der zunächst manuell und anschließend per VBA bearbeitet wird, wodurch ein Schreibkonflikt entsteht.
Die eigentliche Aktion könnte also ebensogut mit den Befehlen "DoCmd.RunCommand acCmdSaveRecord" oder "Me.Dirty = False" bewirkt werden.
Das Feld ist ungebunden, da es als Mehrfachauswahl eingestellt ist. In einer anderen Subroutine gebe dem Benutzer die Möglichkeit mehrer Einträge (Anhänge) miteinander zu löschen.
Mit Me.Dirty = false am Anfang des Codes funktioniert es einwandfrei.
Gruss Daniel