Neuigkeiten:

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

Mobiles Hauptmenü

Mailadresse automatisch vorbereiten

Begonnen von neutrino, Juli 21, 2019, 13:00:36

⏪ vorheriges - nächstes ⏩

neutrino

Hallo Experten,
in meiner Kundendatenbank mit über 4.000 Datensätzen möchte ich folgendes automatisieren:
Darin gibt es ein Hauptformular mit der Kundenadresse und Informationen. In diesem Hauptformular gibt es ein Feld "Mailvorbereitung", in welches ich die Endung der Mailadresse eingebe, z.B. wäre dies für den Kunden mit Namen "Beispiel" die Endung @beispiel.de.
In das Hauptformular habe ich ein Unterformular (verknüpft über die Kundennummer) eingebunden, in welchem in Listenform alle Ansprechpartner dieses Kunden angezeigt werden, u.a. mit Telefonnummer, Durchwahl, Funktion und auch "Mailadresse", dies können bei manchen Kunden leicht 50 Ansprechpartner sein. Bei manchen Ansprechpartnern ist bereits eine Mailadresse eingetragen, bei manchen aber auch nicht. Wie kann ich zur Vorbereitung erreichen, dass nur in die leeren Felder "Mailadresse" automatisch die "Mailvorbereitung" aus dem Hauptformular eingetragen wird ? Und darüber hinaus dann auch bei Neuanlagen von Ansprechpartnern diese "Mailvorbereitung" aus dem Hauptformular als Standardwert vorgegeben wird ? Dann bräuchte ich nur noch davor die Namen zu ergänzen.

Gruß
neutrino

Beaker s.a.

@Neutrino
ZitatWie kann ich zur Vorbereitung erreichen, dass nur in die leeren Felder "Mailadresse"  automatisch die "Mailvorbereitung" aus dem Hauptformular eingetragen wird
Mit einer Aktualisierungsabfrage (Luftcode)
UPDATE Ansprechpartner As AP
INNER JOIN Kunden As K ON AP.KundenID_F = K.KundenID
SET AP.Mailadresse = K.Mailvorbereitung
WHERE AP.MailAdresse Is Null


ZitatUnd darüber hinaus dann auch bei Neuanlagen von Ansprechpartnern diese "Mailvorbereitung" aus dem Hauptformular als Standardwert vorgegeben wird
Code im UFo
Private Sub Form_Current()
    If Me.NewRecord Then
    'bei neuen DS
        Me.Mailadresse = Me.Parent.Mailvorbereitung
    Else
    'bei bestehenden DS
        If Left(Me.Mailadresse,1) = "@" Then
            MsgBox "Mailadresse unvollständig; - Name fehlt!"
        End If
    End If
End Sub


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)

neutrino


neutrino

Hallo Ekkehard,

habe Deinen Code getestet, klappt aber noch nicht.

Mein Hauptformular heisst: "Kundenbasis", das Feld mit der Mailadressenvorbereitung heisst "Mailvorbereitung"
Mein Unterformular heisst: "Ansprechpartner", das Feld mit der Mailadresse heisst "Mailadresse"
Verknüpft mit der Kundennummer, Name des Feldes lautet "Kdnr"

Dein Code hinter meiner Schaltfläche müsste somit lauten

Private Sub Befehl1_Click()
UPDATE Ansprechpartner As AP
INNER JOIN Kundenbasis As K ON AP.Kdnr_F = K.Kdnr
SET AP.Mailadresse = K.Mailvorbereitung
WHERE AP.MailAdresse Is Null
End Sub

Hängt mit Kompilierfehler

Gruss
neutrino

MzKlMu

#4
Hallo,
Du vermischt bzw. verwechselst hier SQL mit VBA.
Der Code ab Update bis Null ist SQL und muss auch als SQL ausgeführt werden.
Private Sub Befehl1_Click()
CurrentDB.Execute "UPDATE Ansprechpartner As AP INNER JOIN Kundenbasis As K ON AP.Kdnr_F = K.Kdnr SET AP.Mailadresse = K.Mailvorbereitung WHERE AP.MailAdresse Is Null", dbFailOnError
End Sub

Die CurrentDB Zeile in einer Zeile, ich habe mal bewusst keine Zeilenschaltung eingefügt.
Gruß Klaus

Beaker s.a.

Hallo Klaus,
Danke für deine Erläuterungen an den TS.
Da ich das als einmalige Aktion verstehe, dachte ich an ein schnelles C&P ins
SQL-Fenster und ausführen.
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)

neutrino

Hallo zusammen,
Ihr habt Recht, ich habe nicht wirklich Ahnung von SQL unf VBA... Ich reime mir das immer zusammen, bisher hat es immer geklappt..  ;)

@Klaus: Mein Debugger meckert über das "," am Ende des Codes

Ist der Code zur Änderung der Tabellen geschrieben die hinter den Formularen liegen (dann in einem Schritt über alle Kundensätze) oder zur Änderung der gerade sichtbaren Felder in dem aktuell offenen Formular und Unterformular (nur dem aktiven Kundensatz) ? Letzteres meinte ich eigentlich. Ich habe mir eine Schaltfläche in mein

Danke und Gruß
neutrino

MzKlMu

Hallo,
da habe ich vor dem Komma noch ein Az (") vergessen, bitte einfügen, habe ich oben auch noch gemacht.
Gruß Klaus

Beaker s.a.

@neutrino
Die Abfrage macht das für alle DS der Tabelle "Ansprechpartner" bei
denen das Feld "Mailadresse" komplett leer ist.
Den Rest erledigt mein Code; - bei neuen DS wird die Vorgabe direkt
übernommen (natürlich nur soweit vorhanden), bei bestehenden DS
(dem aktuellen) wird geprüft ob die Adresse komplett ist, - wird nach
der Abfrage ja vorkommen. Falls nicht kommt eine MsgBox.
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)

neutrino

Hallo zusammen,
habe den Code mehrfach gestartet, es fehlte aber immer ein Parameter. Bis ich dann aus dem Code hinter Kdnr die Zeichen "_F" gelöscht habe. Dann funktionierte der Code. War das evtl. ein Tippfehler, oder macht "_F" hier Sinn ?

Da meine Datenbank sehr groß ist (4.000 Adressen, 6.000 Ansprechpartner) fände ich es besser, wenn nicht immer die komplette Tabelle überarbeitet wird, sondern nur der gerade im Hauptformular offene Datensatz (somit nur die aktuelle Kundennummer = Kdnr). Geht das auch ?

Danke und Gruß
neutrino

Beaker s.a.

#10
@Neutrino
Na ja, die Feldnamen musst du schon anpassen. Solange wir hier kein
Beziehungsbild sehen, nehmen die meisten Standardfeldnamen. Und da
hat ein Fremdschlüsselfeld meist das Suffix "_F".
Das muss ja auch nicht jedes mal (wann ist das überhaupt?) die ganze
Tabelle aktualisiert werden. Wenn die Abfrage einmal gelaufen ist,
kannst du die wieder "wegwerfen". Dann steht in allen DS in denen
vorher nichts stand der Wert aus "Mailvorbereitung". Anschliessend wird
das Feld nur noch bei neuen DS (Anspr.Partnern) geprüft und gefüllt.
Noch mal erkläre ich das jetzt aber nicht.
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)

neutrino

OK, nochmals Danke und Gruß

neutrino

neutrino

Moin nochmal,
Bitte habt Nachsehen mit einem "Laien"..
Ich habs nochmal probiert. Wenn ich den Code übernehme ..AP.Kdnr_F = K.Kdnr SET.. dann meckert ACCESS "1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben". Nur wenn ich den Code anpasse ..AP.Kdnr = K.Kdnr SET.. läuft dieser durch. Daher war meine Frage, ob diese unterschiedliche Bezeichnung programmtechnisch gewollt war ? Die verknüpfende Kundennummer heisst bei mir "Kdnr".
Allerdings klappt dies nicht bei allen Ansprechpartnern. Es gibt Kunden, bei denen einige Ansprechpartner nach Durchlauf eine ergänzte Mailadresse haben und manche nicht. Habe überlegt, ob diese Felder vielleicht nicht leer sind, aber es sind zB keine Lehrzeichen enthalten, müssten somit "is null" entsprechen. Oder kann es daran liegen, dass der Durchlauf bei 6.000 Ansprechpartnern dauert ? Ich kann aber nirgendwo erkennen (kein Balken oder ähnliches) ob der Durchlauf abgeschlossen ist.
Gruß
neutrino

MzKlMu

Hallo,
Du musst genau die Feldnamen verwenden die Du vergeben hast.

Und bitte zeige jetzt mal das Bild des Beziehungsfensters.
Du hast ja hoffentlich Beziehungen angelegt.
Gruß Klaus

neutrino

Jetzt versteh ich glaube ich Euer Missverständnis. In beiden Tabellen heisst das Feld "Kdnr". Über diese Felder habe ich beide Tabellen verknüpft.
Ok die Abfrage läuft ja jetzt. Nur bleiben immernoch einige Ansprechpartner, bei denen sich das Feld "Mailadresse" komischerweise nicht automatisch füllt. Ich habe diese Felder auf Leerzeichen durchsucht, aber keine gefunden. Dann habe ich Testweise neue Ansprechpartner mit genau dem gleichen Inhalt angelegt und siehe da, dort wird das "Mailadresse" gefüllt. Irgendwas muß somit in diesen vermeintlich leeren Feldern sein, weshalb "is null" hier scheitert.
Kann man diese Felder irgendwie per Makro bereinigen ?

Danke und Gruß
neutrino