Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: nimora am Juli 24, 2015, 17:37:24

Titel: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 24, 2015, 17:37:24
Hi, folgender Code leigt vor:
Dim strMailAnrede As String
     
        If Anrede = "Herr" Then
            strMailAnrede = "Sehr geehrter Herr"
        ElseIf Anrede = "Frau" Then
            strMailAnrede = "Sehr geehrte Frau"
        ElseIf Anrede = "Mr." Then
            strMailAnrede = "Dear Mr. "
        ElseIf Anrede = "Mrs." Then
            strMailAnrede = "Dear Mrs. "
        End If
       
        MsgBox strMailAnrede


Es werden mehrere Datensätze mittels sql-abfrage und dann mittels do while schleife um dieses if-statement herum abgefragt.
Leider erhalte ich nicht bei jeden durchlauf die korrekte anrede, sondern immer wieder die, dessen if-Bedingung als erstes auftrat.

Bsp.
zwei Datensätze. erster mit Mrs. zweiter mit Mr.

Ich bekomme zwei mal einen msgbox aber es steht in beiden Mrs. drin. tausche ich das ganze in den datensätzen, kommt zwei mal Mr. raus.

ich dachte, dass die variable nach der msgbox wieder leeren kann aber das will mit Null oder Nothing nicht funzen.

Wäre für einen Tip mal wieder dankbar...

Edit:

habe mir auch mal die Werte für "Anrede" ausgeben lassen. Die sind korrekt, da wird erst das eine (Mrs.) und dann das andere (Mr.) ausgegeben. die Variable wird leider nicht angeglichen. Hat es was mit dem Ort der Variablen-Deklaration zu tun?
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 24, 2015, 18:48:07
Hallo,
wenn man für die Anrede eine extra Tabelle macht mit der Anrede und der Mailanrede in je einer Spalte und in einer weiteren Spalte eine Zahl als Primärschlüssel, braucht man in der Datentabelle nur die entsprechende Zahl für die Anrede einzutragen bzw. auszuwählen per Kombi, kann man mit einer Verknüpfung arbeiten. Dann braucht es keinen Code, keinen Buchstaben, es geht dann alles automatisch.

PS:
Code sollte man stets komplett zeigen und nicht nur Ausschnitte. Der Rest wäre hier bestimmt auch noch wichtig.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 24, 2015, 19:51:10
Hey MzKlMu,

danke für die Antwort.

eine eigene Tabelle nur für die Anrede erscheint mir da ein wenig mit Kanonen auf Spatzen geschossen, oder nicht? und das was ich da versuche ist doch nichts ungewöhnliches, oder?

Um den Code ist lediglich noch die do while schleife und dass diese funktioniert, konnte ich mit einer anderen msgbox prüfen.

letztlich geht es darum, warum die variable keinen neuen wert annimmt. hast du da ne Idee?

thx
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 24, 2015, 20:08:09
Hallo,
Zitateine eigene Tabelle nur für die Anrede erscheint mir da ein wenig mit Kanonen auf Spatzen geschossen, oder nicht? und das was ich da versuche ist doch nichts ungewöhnliches, oder?
nein, das ist nicht mit Kanonen auf Spatzen geschossen. Das ist die für eine Datenbank einzig sinnvolle Lösung. In einer Datenbank werden alle Daten in Tabellen abgelegt. Und ja Dein Vorhaben ist für eine Datenbank völlig, aber wirklich völlig ungewöhnlich. Solche If Then Konstruktionen sind so gut wie immer ein Hinweis auf ein falsches Datenmodell. Ich wage zu behaupten, dass man zu Datendarstellungen und Manipulationen in einer Datenbank niemals If ... Then benötigt. Korrektes Datenmodell vorausgesetzt. Und die langsamste aller Lösungen ist sie auch. Nimm die Tabelle und Du hast eine Datenbanklösung, alles andere ist kontraproduktiv.

Ich habe Dir ein schnelles einfaches Beispiel gemacht, siehe Anhang.
Das Beispiel besteht aus 2 Tabellen, den Beziehungen und einer Abfrage. Die Abfrage verdeutlicht die Einfachheit der Geschichte. Ohne einen Buchstaben VBA.

Da das Vorhaben falsch ist und somit der Code überflüssig kann ich zum Code nix sagen, werde auch nicht nachforschen, da ich so etwas nicht benötige. In meinen Datenbanken gibt es solche Sachen nicht, niemals nicht.  ;D
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MaggieMay am Juli 24, 2015, 20:50:10
Hi,
Zitatletztlich geht es darum, warum die variable keinen neuen wert annimmt.
genau das kann man aber doch nur an dem fehlenden Code drumherum erkennen.
Ich tippe darauf, dass "Anrede" sich gar nicht ändert. Somit kann es auch "strMailAnrede" nicht.

Teste im Unterbrechungsmodus, dann siehst du was passiert.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 24, 2015, 22:06:54
Hallo,
nach dem drum rum Code hatte ich in meiner Antwort in #1 auch schon gefragt, wurde aber nicht beantwortet.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 25, 2015, 20:30:42
Ich danke euch für die bemühungen :)

MzKlMu, du hast natürlich recht, im Sinne eines ordentlichen Datenbank-Designs sollte man das machen. Grundsätzlich hilft es mir in diesem Fall aber nicht - meine ich, lass mich aber gerne belehen.

An den Code komme ich jetzt am Wochenende nicht leicht ran. ich hole es so schnell es geht nach.

Grundsätzlich geht es in meinem Versuch aber nicht nur um das Anzeigen von Herr oder Frau. Es geht darum, dass mittels der if then anweisung verschiedensprachige Serien-Mails verschickt werden sollen. das ganze brauch dann noch ein bestimmtes text-format. daher leuchtet mir nicht ein, warum es mir helfen soll, die anrede in eine tabelle zu packen. es ist ja leicht diese anzulegen, aber dann würde ich aus meinem Verständnis doch wieder anfangen das if-statement zu verwenden, um die verschiedenen anreden aber auch verschiedene Sprachen in den Mails abzudecken.

wo liegt also mein denkfehler?
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 25, 2015, 22:01:35
Hallo,
Zitatum die verschiedenen anreden aber auch verschiedene Sprachen in den Mails abzudecken.
wie ist das in der Tabelle gelöste ? Bzw. wie ist die Tabelle aufgebaut ?

Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 25, 2015, 22:19:44
ich habe ein Feld, das aus outlook gefüllt wird. der Mail-Text also. den sichte ich und notiere mit die Daten daraus. Nachname, Anrede, email. wenn es eine deutsche Mail ist, wähle ich in Anrede Mann oder Frau und ist es eine englische, Mr. oder Mrs.

Danach möchte ich per Button eine immer gleiche Mail an die Person schicken, nur eben angepasst durch den Namen und die korrekte Anrede und jeweils die entsprechende sprache. das würde ich dann hardcodiert in das script setzen. daher der check, wenn ich den butto drücke, dass in jedem datensatz geprüft wird, welche Anrede es ist  und dann über das if-statement den richtigen Mailtext wählt und verschickt.

Tabelle wäre also: email-text, nachname, anrede, email (die email versuche ich per regex aus dem feld email-text zu filtern, klappt leider nicht wie gewünscht - habe ich in einem anderen threat beschrieben)
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 25, 2015, 23:15:43
Hallo,
ich bleibe da bei, die einzig für eine Datenbank sinnvolle Lösung ist die Tabelle.
Und wieso Du da immer noch ein  if-statement brauchst, verstehe ich nicht. Siehst Du in meinem Beispiel irgendwo VBA Code ?
Wie unterscheidet sich meine Beispieltabelle von Deiner Tabelle ?

Ich kann nicht verstehen, was Du gegen die Tabelle hast, das ist doch das einfachste und flexibelste. In der Tabelle kannst Du auch noch gleich die Sprache als Fremdschlüssel hinterlegen.
Die Tabelle ist doch datenbankgerecht, doch nicht der VBA Code.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 26, 2015, 00:09:13
oh sorry, ich habe den dateianhang gar nicht gesehen. jetzt klärt sich natürlich einiges und ich verstehe, wie du es meinst.

tja, sieht genial aus. verstehe zwar deine abfrage noch nicht, da es etwas anders aussieht, als in abfragen, die ich erstelle, aber das werde ich sicher noch rauskriegen.

Besten dank und sorry für das missverständnis.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 26, 2015, 01:07:42
Ich muss jetzt doch noch mal einsteigen, denn ich habe das von mir vermutete Problem, was sich aber sicher wieder aus unwissenheit ergibt.

wenn ich bei deiner BeispielDB bleibe, MzKIMu.

Im VBA verarbeite ich die tblDaten und gucke dort nach angegebenen bedingungen, die entscheiden, ob jemand eine Mail bekommt oder nicht. woher bekomme ich im code, der sich die tblDaten nimmt nun die anrede aus tblAnrede? wenn ich mich im code auf AnredeID_F bezieh, bekomme ich nur die ID ausgegeben, ist ja auch logisch. Wie komme ich also nun an das Feld MailAnrede aus tblAnrede?

Vorstellen kann ich es mir nur über einen weiteren recordset und eine weiter sql-abfrage. wäre das der richtige ansatz?
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 26, 2015, 07:49:57
Hallo,
ich verstehe immer noch nicht wozu Du VBA benötigst. Das geht doch mit der Abfrage im Beispiel vollkommen automatisch.
In meiner BeispielDB gibt es keinen VBA Code, oder siehst Du welchen ?

Zitatda es etwas anders aussieht, als in abfragen, die ich erstelle,
die Abfrage im Beispiel ist eine einfache Auswahlabfrage mit 2 Tabellen und der Verknüpfung über die Schlüsselfelder. Diese Abfrageart (mit mehr oder weniger Tabellen) ist die am häufig vorkommende Art von Abfragen. Jedes Formular sollte an eine solche Abfrage gebunden sein. Was hast Du für Abfragen ?

ZitatIm VBA verarbeite ich die tblDaten und gucke dort nach angegebenen bedingungen, die entscheiden, ob jemand eine Mail bekommt oder nicht.
Auch dazu wird man kein VBA verwenden, sondern die Daten über eine Abfrage filtern.

Um es noch mal deutlich zu sagen:
In einer korrekt aufgebauten DB sollte man für die Datendarstellung und Datenverarbeitung kein VBA benötigen. Und If ... Then schon mal gar nicht. Wenn doch, hat man ein falsches Datenmodell. Ganz abgesehen davon, sind VBA Lösungen zur Datenverarbeitung immer zu vermeiden, das das die langsamste Version ist.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 26, 2015, 13:04:17
vom if then habe ich mich doch nun schon getrennt, schaffe es aber nicht über die tabellenabfragen.

okay, dann sage mir doch bitte, wie ich ohne vba das versenden der mails hinbekommen soll? mit board-mitteln geht das nicht, zumindest nicht  so, wie ich es brauche. mit einer abfrage kann ich vielleicht die anrede filtern, die Mail versendet sich damit aber nicht, oder irre ich da? an der stelle kommt doch vba ins spiel, oder nicht?

ich bin wirklich dankbar für deine und eure hilfe, aber versteht doch auch mal, dass man als anfänger nicht immer alles überrblickt und versteht und man sich stück für stück annähern muss. ich habe mir die grundlagen für datenbank-design usw. angesehen, dennoch ist sowas doch nicht gleich verinnerlicht und dannoch versteht man die hinweise der profis nicht sofort. Wichtig ist es, dass ein verständnis entsteht und das nimmt manchmal verschiedene wege.

VG
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 26, 2015, 13:29:29
Hallo,
Zitatokay, dann sage mir doch bitte, wie ich ohne vba das versenden der mails hinbekommen soll?
dass das ohne VBA geht habe ich ja nie gesagt. Natürlich benötigst Du dazu VBA. Das ist aber Benutzeroberfläche und nicht Datenverarbeitung. An den eigentlichen Daten wird ja durch das Versenden der Mail nichts geändert. Datenbasis für das Versenden ist dann nicht die Tabelle, sondern die Abfrage, ähnlich aufgebaut wie die in meinem Beispiel. Und in dieser Abfrage siehst Du den Klartext der Anrede und nicht die (Schlüssel)Zahl. Schlüsselzahlen sind im Regelfall für den Anwender bedeutungslos und gar nicht sichtbar.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 26, 2015, 17:55:30
Zitatich verstehe immer noch nicht wozu Du VBA benötigst.

das habe ich dann wohl falsch verstanden.

ZitatAn den eigentlichen Daten wird ja durch das Versenden der Mail nichts geändert.

stimmt nicht ganz, es muss ein vermerk gesetzt werden, dass die Mail verschickt wurde und das Datum, sowie der benutzer, der sie ausgelöst hat eingetragen werden.

Ich versuch mal mein bestens, das in kombi mit einer Abfrage zu lösen.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 26, 2015, 18:57:27
Hallo,
Zitates muss ein vermerk gesetzt werden, dass die Mail verschickt wurde und das Datum, sowie der benutzer, der sie ausgelöst hat eingetragen werden
das macht man mit einer Aktualisierungsabfrage in SQL. Die Abfrage wird über VBA nur angestoßen.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 27, 2015, 00:06:13
:) stimmt :/

im moment hänge ich eher daran, dass ich auf den recordset der abfrage nicht richtig zugreifen kann.
habe folgendes gefunden:
Private Sub Befehl19_Click()
Dim dbs As DAO.Database
Dim rsTable As DAO.Recordset
Dim rsQuery As DAO.Recordset

Set dbs = CurrentDb

Set rsQuery = dbs.OpenRecordset("qrykundenmail2", dbOpenDynaset)
Debug.Print rsQuery.Fields("MailAnredeKomplett")
End Sub


bekomme aber einen Fehler, dass MailAnrede... nicht existiert. :(
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 27, 2015, 07:41:05
Hallo,
was hast Du denn mit dem gezeigten Code vor, bzw. was ist dessen Ziel ?
Auch solche Recordset Geschichten sind oftmals nicht notwendig bzw. der falsche Weg.

Ich werde den Verdacht nicht los, dass Du Sachen programmierst die man nicht benötigt.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MaggieMay am Juli 27, 2015, 09:33:20
Hi,
Zitatbekomme aber einen Fehler, dass MailAnrede... nicht existiert
dann schau dir die Abfrage "qrykundenmail2" mal ganz genau an.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 27, 2015, 21:34:08
Zitatwas hast Du denn mit dem gezeigten Code vor

hmm, ich folge deiner Empfehlung, dass ich die Anrede in der Mail nicht über das if-Statement ausführe sondern über eine Abfrage, ähnlich deiner Beispieldaten. In den Mails, möchte ich dann die Abfrageergebnisse verwenden, um die Mail mit der korrekten Anrede zu füllen. So habe ich deine Hinweise zumindest verstanden.

@Maggie

die Abfrage lautet wie folgt:
SELECT "''" & [MailAnrede] & " " & [Nachname] & "," & "''" AS MailAnredeKomplett
FROM tblAnreden INNER JOIN KundenImport2 ON tblAnreden.AnredeID = KundenImport2.AnredeRID
WHERE (((KundenImport2.FKAntwort)="absagen") AND ((BewerberImport2.abgesagt)=False));


Wahrscheinlich kann man dieses SQL-Statement wahrscheinlich direkt im vba nutzen, aber wenn ich MzKIMu richtig verstanden habe, soll man möglichst wenig im vba machen und z.b. mehr Abfragen nutzen.

aber da ich die Emails nur über vba auslösen kann, bauche ich dort die Infos aus der Abfrage und da fehlt mir der Bezug bzw. wie ich den rs anspreche.
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 27, 2015, 22:44:09
Hallo,
ZitatIn den Mails, möchte ich dann die Abfrageergebnisse verwenden, um die Mail mit der korrekten Anrede zu füllen. So habe ich deine Hinweise zumindest verstanden.
nein, das hast Du falsch verstanden, bzw. so nicht.
Versendest Du die Mails über Outlook ?

Die Abfrage ist falsch, so ist die auch nicht in meinem Beispiel. Da sieht es so aus:
SELECT [MailAnrede] & " " & [Nachname] AS MailAnredeKomplett
Mit Komma so:
SELECT [MailAnrede] & " " & [Nachname] & "," AS MailAnredeKomplett
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 27, 2015, 22:55:14
ja, werden über Outlook versendet. das funzt auch, nur der inhalt muss noch gestaltet werden mit umbrüchen, betreff, anrede und text.

den recordset habe ich auch hinbekommen. ich habe es noch mal neu geschrieben und warum auch immer, dann ging es. Jetzt würde ich mir den inhalt der Felder so setzen und die abfrage so gestalten, dass der text der mail in den vba-code gesetzt wird.

so z.b.
"Sehr geehrter Herr Müller,'' & vbCrLf & "Sie sind ein Herr"
"Sehr geehrte Frau Dr. Schulze,'' & vbCrLf & "Sie sind eine Frau Dr."
"Dear Mr. Jacobs,'' & vbCrLf & "You´r a Man"
"Dear Mrs. Brown,'' & vbCrLf & "You´r a Women"


aber, du sagst, ich habe das wieder falsch verstanden? :(
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: MzKlMu am Juli 27, 2015, 23:37:03
Hallo,
das sind alles nur Bruchstücke. Zeige bitte mal den kompletten Code zum Versenden der Mail per Outlook.

Verschickst Du Standardtexte, also jeder kriegt den gleichen Text nur in verschiedenen Sprachen ?
Titel: Re: Variable mittels Schleife mehrfach beschreiben - will aber nicht :)
Beitrag von: nimora am Juli 28, 2015, 15:31:44
Hallo lieber Helfer,

ich habe es jetzt hinbekommen und es läuft, wie gewünscht. Bedingungen werden über eine Abfrage gestellt auf die mit einem RecordSet zugegriffen wird und die einzelnen Elemente (Betreffe, Anrede, Text) werden angesprochen und in eine Mail eingebaut.

Ich danke euch, für die Hartnäckigkeit.