Mai 20, 2022, 15:48:42

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Datensätze aus einem Listenfeld in einer Tabelle/Abfrage speichern

Begonnen von Macik, August 13, 2021, 13:08:38

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

ja,  natürlich wäre Listenfeld1 an sich richtig...

Wenn er aber 2 Listenfelder aus welchen Gründen auch immer haben will, dann eben Listenfeld2-Einträge übertragen...

derArb

Hallo,
Zitat von: undefined...Ich kann die Datenbank nicht posten, einige sensible Daten sind hier hinterlegt.
Man nehme eine Kopie oder ein Backup der DB, lösche alle Daten darin und füge ein paar anonymisierte
notwendige Daten hinein, damit die Helferchen an der Lösung mitarbeiten können.

Beaker s.a.

@franz
Na gut, der Gedanke ist nicht von der Hand zu weisen.
Kann IMO aber doch nur dazu dienen die Auswahl noch mal
visuell zu überprüfen.
Ausserdem benötigt die Liste2 ja auch eine DS-Herkunft,
am einfachsten die (temporäre?) Tabelle, die er für den
Serienbrief in Word benötigt.
Ansonsten müsste man Liste2 doch erst mit einer Werte-
liste füttern.
Oder sehe ich das falsch?

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.

DF6GL

Hallo,

nein, darum habe ich gefragt, wie er denn nun die Kombifeld-Einträge ins andere Kombifeld transportiert.

Seine Strategie, um an Serienbriefe zu kommen, ist mir nicht so recht klar. Die verschiedenen Lösungswege (einschließlich Access-Bericht) sind ja nun ausführlich erklärt worden.

Aber offensichtlich handelt es sich nur um "ein kleines Projekt woran ich arbeiten und lernen soll".


Macik

Hallo zusammen,
ich habe gar nicht gemerkt das der Verlauf auf der zweiten Seite weiterging (mein erstes Forum und erstes selbst eröffnetes Thema).Ich entschuldige mich dafür. Ich habe versucht die Db zu reduzieren und anonymisieren, aber da sind sooo viele Tabellen und Abfragen und Beziehungen (dateigröße 70MB)  deshalb  füge mal den Code zum Übertragen der Felder hinzu, vielleicht reicht es ja erstmal aus ansonsten versuche ich die db hier zu posten.

'Funktion zum Suchen der Mitglieder in Abhängigkeit des Textfeldes
Private Sub suchePerson()
    Dim sql As String, geb As String, nummern As String
    If Len(tbSucheGeb & "") = 0 Then
    geb = ""
    Else
    geb = " AND (((tbPerson.datGeb) Like '*" & tbSucheGeb & "*')) "
    End If
    nummern = Format(tbSucheNummer, "000000")
    If Len(nummern & "") = 0 Then
    nummern = "*"
    Else
    nummern = nummern
    End If
    sql = "SELECT tbPerson.IDPerson, tbPerson_Mitgliedsnummer.txtNummer, tbPerson.txtNachname, tbPerson.txtVorname, tbPerson.datGeb, tb_Person_Kontakt.lngKontakt " & _
            "FROM (tbPerson INNER JOIN tbPerson_Mitgliedsnummer ON tbPerson.IDPerson = tbPerson_Mitgliedsnummer.lngPerson) INNER JOIN tb_Person_Kontakt ON tbPerson.IDPerson = tb_Person_Kontakt.lngPerson " & _
            "WHERE (((tbPerson_Mitgliedsnummer.txtNummer) Like '" & nummern & "'))" & _
            " AND (((tbPerson.txtNachname) Like '" + tbSucheName + "*'))" & _
            " AND (((tbPerson.txtVorname) Like '" + tbSucheVorname + "*'))" & _
            geb & _
            " GROUP BY tbPerson.txtNachname, tbPerson.txtVorname, tbPerson_Mitgliedsnummer.txtNummer, tbPerson.datGeb, tbPerson.IDPerson, tb_Person_Kontakt.lngKontakt;"

    Me.lstSuche.RowSourceType = "Table/Query"
    Me.lstSuche.RowSource = sql
    Me.lstSuche.Requery
   
    If lstSuche.ListCount = 0 Then
        lblError.Visible = True
        btnNew.Visible = True
    Else
'        lblError.Visible = False
 '       btnNew.Visible = False
    End If
End Sub

'fügt gewählten Datensatz der IstEmpfaenger Liste zu
Private Sub lstSuche_DblClick(Cancel As Integer)
    Dim i As Long
    Dim s As String
    For i = 0 To Me.lstSuche.ColumnCount - 2
        s = s & Me.lstSuche.Column(i) & ";"
    Next
    s = s & Me.lstSuche.Column(i)
    Me.lstEmpfaenger.AddItem (s)
 
End Sub


vielen Dank nochmals für eure Unterstützung

Beste Grüße
Micha

DF6GL

Hallo,

der Code ist etwas optimierungsfähig....


Ich versteh weiterhin nicht, warum ein ausgewählter Eintrag im Listenfeld "lstSuche" (auch mehrmals möglich) in ein anderes Listenfeld "lstEmpfaenger" (Wertliste,  Felder :  IDPerson, txtNummer, txtNachname, txtVorname) bei jedem Klick auf "lstSuche" übertragen werden soll, um zu einem Serienbrief zu kommen.



Zudem: Was genau funktioniert denn nicht mit dem Code (wenn man von der o. g. Optimierung, bzw. Korrekturen mal absieht).





Macik

Der Code funktioniert bisher,
die zweite liste dient dazu nochmal nachzusehen ob die Auswahl stimmt. Jetzt muss ich die Werte von lstEmpfaenger irgendwie in eine Tabelle ablegen damit ich diese Tabelle an Word senden kann.

was noch angepasst werden muss ist die Adresse mit zu übergeben und keine doppelwerte.

Beste Grüße
Micha

DF6GL

Hallo,

das ist doch alles viel zu umständlich.

Stelle das erste Listenfeld auf Mehrfachauswahl ein, markiere mit der Maus die gewünschten Einträge (die kannst Du doch auch hier gleich überprüfen) und erzeuge beim Klick-Event eines Buttons ("Generiere Steuerdatei")  eine mit den IDs der ausgewählten Listenfeldeinträge filternde gespeicherte Abfrage, die mit Outputto in eine rtf-Datei (oder wegen mir auch eine csv-Datei) exportiert wird. Mit dieser Steuerdatei kann dann in Word der Serienbrief erzeugt werden.


Macik

Danke das hört sich vielversprechend an, ich versuch es umzusetzen.

Beste grüße
Micha

derArb

Hallo,
ist ein Serienbrief über Word überhaupt noch sinnvoll bei der Digitalisierungswelle?
Das ergibt doch nach wie vor einen großen Kostenfaktor bezgl. Papier-/Druck- und Brief-Versandkosten.
Dazu kommt der Personaleinsatz... und...und beim Versendenden.
Hier ein grober Alternativansatz
DIE SERIEN-EMail:
1. Viel einfacher und kostengünstiger wäre doch die Verwaltung von diversen Reports, welche jederzeit
   erweitert werden können.
2. Die Möglichkeit, diese Reports als *.pdf in einem sinnvoll gestalteten Windows Explorer Ordnersystem   
   abzuspeichern.
3. In einer SerienEmail diese pdf-Dateien beliebig zusammengesuchten Kunden zu senden und diese Sendung
   dabei zusätzlich in zwei 1:n Kontrolltabellen festzuhalten mit Datum, Sendungszweck, *.pdf-Name,
   *.pdf-Dateiordner in Kontrolltabelle(A) auf Seite 1 und Kunden in Kontrolltabelle(B) auf Seite n der 1:n Beziehung 
Wie gesagt, ein grober Alternativansatz, der jedenfalls überlegenswert ist.

DF6GL

Hallo,


@derArb:  korrekt..

aber angesichts dieser  Vorgabe/Situation:
ZitatEs sollen die Mitgliederadressen an Word übergeben werden zur Erstellung der Serienbriefe.

Ich befinde mich in einem Ausbildungspraktikum und das ist ein kleines Projekt woran ich arbeiten und lernen soll.


und der evtl. im Hintergrund angedachten Möglichkeit zur Serienbrief-Nachbearbeitung (das machen manche halt auch ;-) ) oder der situationsbedingten manuellen Erstellung der Word-Templates macht hier Word schon etwas Sinn.


Die Frage nach "Warum Word" wurde ja nicht so richtig beantwortet....  Auf alle Fälle wäre eine konzeptionelle Überarbeitung der Arbeitsabläufe, bzw. Vorgehensweise durchaus sinnvoll. Das geht aber über den reinen Access-Bereich etwas hinaus.

Macik

Guten Morgen,

zur Frage "warum Word".
Es werden immer wieder neue Serienbriefe erstellt, andere Formate, Bilder usw. Und die User sind nicht vertraut mit Access. Von daher sollen die nur eine Benutzeroberfläche bedienen. Ich weiß nicht ob es möglich ist ohne viel Programmierung Berichte erstellen und vernünftig gestalten zu können - wie mit Word.

Beste grüße
Micha

Macik

Zitat von: DF6GL am August 30, 2021, 15:03:21erzeuge beim Klick-Event eines Buttons ("Generiere Steuerdatei")  eine mit den IDs der ausgewählten Listenfeldeinträge filternde gespeicherte Abfrage

das funktioniert so weit allerdings kann ich der qrySteuerdatei keine weiteren Datensätze zufügen. Die werden immer wieder überschrieben. Also ich suche nach einen Namen wähle die gewünschten Datensätze aus der Liste und übertrage die mithilfe des Buttons an die Abfrage(qrySteuerdatei). Jetzt suche ich den nächsten Namen und will dort einige Datensätze ebenfalls der Abfrage qrySteuerdatei hinzufügen um dann einem Zug die Abfrage(qrySteuerdatei) zu exportieren. leider werden die Daten immer wieder überschrieben.
Hier der Code:

Private Sub btnSteuerdatei_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim str As String
Dim strSql As String
Set db = CurrentDb()
Set qdf = db.QueryDefs("qrySteuerdatei")


For Each varItem In Me!lstSuche.ItemsSelected

str = str & "," & Me!lstSuche.ItemData(varItem)

Next

If Len(str) = 0 Then
    MsgBox "Sie haben keine Einträge aus der Liste gewählt" _
          , vbExclamation, "Nichts gefunden!"
          Exit Sub
End If

str = Right(str, Len(str) - 1)
strSql = "SELECT * FROM tbPerson" & _
         " WHERE tbPerson.IDPerson IN(" & str & ");"
qdf.sql = strSql
DoCmd.OpenQuery "qrySteuerdatei"
Set db = Nothing
Set qdf = Nothing


End Sub


Beste Grüße
Micha

derArb

Hallo,
@DF6GL: Du hast recht. Es bleibt als letztes Argument gegen Serienbriefe die Porto-Gebühr.
@Macik: Ich hab Dir mal ein Beispiel einer funktionierenden DB erstellt, aus welcher heraus man
Serienbriefe erstellen kann. Es wird ein Endlosformular verwendet mit diversen Markierungsmöglichkeiten
über Kontrollkästchen und nicht Listenfeldern.
Beigefügt sind 2 Wordvorlagen, mit welchen Du die Funktionalität testen kannst. Sie müssen im Verzeichnis
der DB sein, was in der Funktion aktVerz() festgelegt und natürlich auch änderbar ist.
Ausserdem hab ich eine kurze Erklärung als Wordfile beigefügt.Sie dürfen in diesem Board keine Dateianhänge sehen.

Macik

Wowwww Mega. Vielen lieben Dank derArb

ich versuche mal alles nachzuvollziehen und in meiner Db einzubringen, echt klasse. Sieht super Hammer aus.
Danke für die mühe :-)

Liebe Grüße
Micha