collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 84
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13972
  • stats Beiträge insgesamt: 66528
  • stats Themen insgesamt: 8970
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Werte aus Listenfeld für Mailanhänge in Tabelle speichern  (Gelesen 245 mal)

Offline MaxP

  • Newbie
  • Beiträge: 33
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


 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1788
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #1 am: Juni 20, 2018, 21:53:18 »
Hallo Max,
Me.lst_File.RowSource & ";" & strFileHast 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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #2 am: Juni 21, 2018, 10:12:54 »
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
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #3 am: Juni 21, 2018, 11:08:42 »
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 (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: MaxP

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #4 am: Juni 21, 2018, 15:04:01 »
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?

Zitat
Me.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
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1788
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #5 am: Juni 21, 2018, 16:12:31 »
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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #6 am: Juni 21, 2018, 18:15:48 »
Hallo,

Zitat
Me.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
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1788
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #7 am: Juni 21, 2018, 22:40:00 »
Hallo Max,
Statt
"alteRowsource";Pfad
steht da dann
"alteRowsource";"Pfad"
Ich würde aber eh eher darauf setzen
Zitat
Me.lst_File.AddItem strFile genügt übrigens. Auch ist kein Requery nötig.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #8 am: Juni 22, 2018, 10:21:08 »
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
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #9 am: Juni 22, 2018, 11:01:38 »
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
.
.
.

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #10 am: Juni 22, 2018, 12:30:38 »
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
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #11 am: Juni 22, 2018, 12:53:22 »
Hallo,

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

Dort wird nur die (Original-) Public-Funktion aufgerufen mit Übergabe der erforderlichen Parameter.

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #12 am: Juni 22, 2018, 13:32:05 »
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
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #13 am: Juni 22, 2018, 14:29:28 »
Hallo,


Zitat
Ich 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.

Offline MaxP

  • Newbie
  • Beiträge: 33
Re: Werte aus Listenfeld für Mailanhänge in Tabelle speichern
« Antwort #14 am: Juni 22, 2018, 16:16:38 »
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