Neuigkeiten:

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

Mobiles Hauptmenü

Werte aus Listenfeld für Mailanhänge in Tabelle speichern

Begonnen von MaxP, Juni 20, 2018, 18:55:38

⏪ vorheriges - nächstes ⏩

MaxP

Hallo Experten,

ich möchte über A03 Mails versenden und habe dazu aus der angehängten Datenbank tk_send_Mail00 aus dem Netz das Formular angepasst, in dem ich die ungebundenen Felder an eine Tabelle tbl_Mails gebunden habe. Somit habe ich eine Historie der versandten Mails. Leider funktioniert das nicht mit dem Listenfeld lst_File. Diese nimmt die Pfade der Mailanhänge auf.

Der Code zum Hinzufügen der Anhänge lautet:
Private Sub cmd_add_Attachment_Click()
On Error GoTo Err_cmdGetFile_Click

    Dim DefaultPath As String, strFile As String
    DefaultPath = DLookup("[Anlagen_Pfad]", "[tbl_Mailvorgaben]")
   
    ' Datei öffen Dialog anzeigen
    Dim fd As New FileDialog
   
    With fd
      .DialogTitle = "Wählen Sie die Datei aus"               ' Dialogtitel
      .InitDir = DefaultPath                                  ' Vorgabeordner
      .Filter1Text = "Alle Dateien(*.*)"                      ' Dateitypen-Text
      .Filter1Suffix = "*.*"                                  ' Dateitypen-Endung
      .Filter2Text = "Text-Dateien (*.txt)"                   ' Dateitypen-Text
      .Filter2Suffix = "*.txt"                                ' Dateitypen-Endung
      .ShowOpen
    End With
   
    ' Bei "ABBRECHEN" im Dialog Function verlassen ansonsten
    ' die gewählte Datei der Variablen "Pfad" zuweisen
    If fd.Filename = "" Then
       Exit Sub
    Else
       strFile = fd.Filename
    End If
   
    If Me.lst_File.RowSource = "" Then
        Me.lst_File.RowSource = strFile
    Else
        Me.lst_File.RowSource = Me.lst_File.RowSource & ";" & strFile
    End If
    Me.lst_File.Requery
   
   
Exit_cmdGetFile_Click:
    Exit Sub

Err_cmdGetFile_Click:
    MsgBox Err.Description
    Resume Exit_cmdGetFile_Click
End Sub

Meine VBA-Kenntnisse sind leider als rudimentär zu bezeichnen.

Wie schaffe ich es, die Werte in einer Tabelle tbl_MAnhänge zu speichern?

Wünschenswert wäre auch, wenn ich nur den Dateinamen also ohne Pfad speichern könnte.

Vorab Danke für eure Hilfe!

Gruß
Max


Win 10 pro 64 bit, Access 2003

Beaker s.a.

Hallo Max,
Me.lst_File.RowSource & ";" & strFile
Hast du dir diesen String Mal mit Debug.Print im Direktfenster
angeschaut? Wie sieht der aus?
Und versucht den in der RowSource der Liste fest zu verdrahten?
Ergebnis?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaxP

Hallo Ekkehard,

danke für deine schnelle Antwort!

Der Code: Debug.Print Me.lst_File.RowSource & ";" & strFile
liefert im Direktfenster die kompletten Pfade der 2 eingefügten Dateien jeweils mit ; getrennt, wobei die letzte Datei doppelt aufgeführt wird. Wird nur eine Anlagendatei ausgewählt, erscheint nichts (warum auch immer).

Gruß
Max
Win 10 pro 64 bit, Access 2003

Lachtaube

Me.lst_File.AddItem strFile genügt übrigens. Auch ist kein Requery nöltig.

Um alle Items in einer Tabelle abzuspeichern, benötigst Du auch eine entsprechende Tabelle.Private Sub EinKnopf_Click()
   Dim rs As DAO.Recordset
   Dim i As Long

   With Me.lst_File
      If .ListCount = 0 Then Exit Sub 'Listenfeld ist leer
      Set rs = CurrentDb.OpenRecordset("DeineTabelleOderAbfrage", dbOpenDynaset, dbAppendOnly)
      For i = 0 To .ListCount - 1
         rs.AddNew
         rs("MailId") = Me.MailId
         rs("Attachment") = .ItemData(i)
         rs.Update
      Next
      rs.Close
   End With
End Sub
Grüße von der (⌒▽⌒)

MaxP

Hallo Lachtaube,

ich gehe mal davon aus, dass der Code ausschließlich dazu da ist, die Werte aus der Attachment-Liste in eine Tabelle zu schreiben, oder?

Nachdem ich den Tabellennamen an entsprechender Stelle ergänzt habe, funktionierte der Code so nicht. Fehlermeldung: Methode oder Datentyp nicht gefunden

Danach habe ich MailID und Attachment gegen meine Feldnamen ausgetauscht. Auch da weigerte sich das Programm und meldete dieselbe Fehlermeldung.

Wo könnte der Fehler stecken?

ZitatMe.lst_File.AddItem strFile genügt übrigens.

An welcher Stelle von cmd_add_Attachment muss da was ausgetauscht werden?
Ist der Austausch für deinen Code zwingend erforderlich?

Gruß
Max
Win 10 pro 64 bit, Access 2003

Beaker s.a.

Hallo,
Asche auf mein Haupt. Wenn ich mir deine DB angeschaut hätte, hätte
ich gewusst, das die RowSource eine Werteliste ist.
Eine Werteliste habe ich lange nicht gebraucht, aber ich glaube, dass um
die Werte immer " drum herum gehören
Me.lst_File.RowSource = Me.lst_File.RowSource & ";" & """ & strFile & """
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaxP

Hallo,

ZitatMe.lst_File.RowSource = Me.lst_File.RowSource & ";" & """ & strFile & """

leider weiß ich mit dieser Anweisung nichts anzufangen.
Wo muss das geändert werden und was bewirkt es?

Gruß
Max
Win 10 pro 64 bit, Access 2003

Beaker s.a.

Hallo Max,
Statt
"alteRowsource";Pfad
steht da dann
"alteRowsource";"Pfad"
Ich würde aber eh eher darauf setzen
ZitatMe.lst_File.AddItem strFile genügt übrigens. Auch ist kein Requery nötig.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaxP

Hallo Ekkehard,
vielleicht habe ich mein Problem nicht korrekt umschrieben.

Der Code aus meinem 1. Post funktioniert einwandfrei. Auch das Anfügen von Anlagen und das Versenden der Mails funktioniert. In der Anlage das fertige Mailformular.

Ich möchte (lediglich), dass auch die Werte der Liste lst_file, also die angegebenen Pfade der Anlagen, in die Tabelle tbl_MAnlagen eingefügt werden. Ob nun einzeln oder bereits mit ; verkettet ist egal.

Evtl. kann man den vorh. Code ergänzen oder einen neuen Code, wie es Lachtaube geschrieben hat, benutzen. Leider funktioniert der Code von Lachtaube nicht.

Gruß
Max
Win 10 pro 64 bit, Access 2003

DF6GL

Hallo,

z. B. quick & dirty und ohne Kenntnis Deiner Tabellen:


Zitat.
.
.
        If s_Attachment <> "" Then
            'Überprüfen, ob es mehrere Anlagen gibt (separiert durch ein Semikolon)
            If InStr(1, s_Attachment, ";") > 0 Then
                'Zerlegen der Dateinamen in ein Array
                s_attachment_array = Split(s_Attachment, ";")
                'Durchlaufe das array...
                For i = LBound(s_attachment_array) To UBound(s_attachment_array)
                    '...und wenn die Datei existiert
                    If Len(Dir(Trim(s_attachment_array(i)))) > 0 Then
                        'Füge sie als Anlage bei
                        .AddAttachment Trim(s_attachment_array(i))
                       
           CurrentDb.Execute " Insert into tbl_MAnhänge (MailID,AttachmentFile) Values(" & Me!MailID & ",'" & Trim(s_attachment_array(i)) & "')", dbFailOnError
                       
                       
                       
                    End If
                    'und zum nächsten Element in dem Array...
                Next i
            Else
                'Nur eine Anlage vorhanden
                .AddAttachment s_Attachment
           CurrentDb.Execute " Insert into tbl_MAnhänge (MailID,AttachmentFile) Values(" & Me!MailID & ",'" & s_Attachment & "')", dbFailOnError
           End If
        End If
.
.
.
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

MaxP

Hallo Franz,

danke für den Code, jedoch bekomme ich eine Fehlermeldung (s. Anlage).

Den Code von Lachtaube habe ich noch einmal mit veränderter Datensatzherkunft getestet. Nun schreibt Access die Pfade der Anlagen zwar in das entsprechende Tabellenfeld, solange das Feld der MailID (bei mir heißt das Feld MA_ID) nicht als AutoWert definiert ist, sondern als Zahl mit Duplikate möglich. Dann fügt Access bei jedem DS immer nur die 0 ein.

Gruss
Max
Win 10 pro 64 bit, Access 2003

DF6GL

Hallo,

der Code gehört auch nicht in eine Ereignisprozedur...

Dort wird nur die (Original-) Public-Funktion aufgerufen mit Übergabe der erforderlichen Parameter.
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

MaxP

Hallo zusammen,

ich muss noch einmal deutlich bekennen, dass ich praktisch kein VBA beherrsche. Leider. Ich bin somit auf die unzähligen Beispielcodes im Netz und natürlich auf Euch VBA-Experten angewiesen.

Ich bastele mitunter Stunden an einem Code herum, den ich nur ansatzweise verstehe, der für Euch vermutlich in wenigen Minuten debuggt wäre.

Sorry Franz, aber für deine Anweisung fehlt mir einfach der VBA-Background.

Ich habe nun die DB mail.mdb mit den wichtigsten Objekten zusammengestellt und angefügt.

Wäre echt sehr hilfreich, wenn sich noch mal jemand meines Problems annehmen könnte.
Danke Euch.

Gruß
Max
Win 10 pro 64 bit, Access 2003

DF6GL

Hallo,


ZitatIch habe nun die DB mail.mdb mit den wichtigsten Objekten zusammengestellt und angefügt


Es ist beschwerlich, eine DB zum Laufen zu bringen, wenn die Hälfte (Tabellen und Modul-Funktionen)fehlt..


Die DB muss vollständig sein und in sich funktionieren.

Deshalb nur die Änderungen für die Speicherung der Anlagen... jedoch ungetestet.
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

MaxP

Hallo Franz,

durch deine Änderungen hast du mich auf den richtigen Weg gebracht! Ich habe den Code noch ein wenig angepasst und nun funkt es. Vielen, vielen Dank! Wieder viel gelernt.

PS.: Die komplette DB wäre definitiv zu groß gewesen, da die Mail-Geschichte nur ein kleiner, aber wichtiger Teil ist.

Gruß
Max
Win 10 pro 64 bit, Access 2003