Neuigkeiten:

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

Mobiles Hauptmenü

Neueste Beiträge

#91
Tabelle/Abfrage / Re: Eingabe einer Zahl inklusi...
Letzter Beitrag von Doming - November 26, 2025, 09:06:53
Moin Markus,

wenn Du zwischen zwei Grenzwerten prüfen willst, guck Dir mal die Hilfe zu ,,BETWEEN" an.

Gruß
 Doming
#92
Formular / Re: Formular "vergisst" Datenq...
Letzter Beitrag von Bitsqueezer - November 26, 2025, 08:21:05
Hallo René,

warum eine Extratabelle? Man kann Daten durch ein Zusatzfeld einfach typisieren. "A" für Absender, "E" für Empfänger, dann geht alles in eine Tabelle.

Davon ab, daß man die Daten grundsätzlich so organisieren sollte, daß sie nur ein Objekt beschreiben, aber nicht ihren Verwendungszweck.

Eine Person hat Name, Vorname, Geburtsdatum z.B.
Alles Attribute, die fester Bestandteil einer Person sind.
Eine Person hat eine Mailadresse. Das ist aber kein Bestandteil der Person. Sie muß keine Mailadresse haben, sie kann auch mehr als eine haben. Eine Mailadresse gehört also nicht in eine Personentabelle.

Eine Mailadresse kann zum Senden und Empfangen von Mails verwendet werden. Es gibt also keine "Empfängermailadresse" oder "Absendermailadresse". Es gibt eine Mailadresse oder eine Liste von Mailadressen, die einer Person oder einer Firma zugeordnet werden kann. Also gehört zu einer Mailadressentabelle nur die Mailadresse, ansonsten nur Attribute, die mit der Mailadresse direkt zu tun haben. Da fallen mir spontan nicht wirklich viele Attribute ein, etwa ein "Aktiv"-Ja/Nein-Feld.

Die Person/die Firma braucht nun aber immer noch eine Mailadresse, bis jetzt gibt es nur zwei Objektbeschreibungstabellen, komplett getrennt voneinander. Also brauchst Du eine Verbindungstabelle dazwischen, die Dir die Zuordnung ermöglicht. Das ist die m:n-Tabelle, die Du jetzt über mehrwertige Felder künstlich (und schwer handhabbar) eingebaut hast.
Die besteht aus der ID der Person und der ID der Mailadresse.
Damit kannst Du jede Mailadresse jeder Person zuordnen bzw. einer Person beliebig viele Mailadressen.

Hast Du eine Sammel-Mailadresse, wie in Firmen oft üblich, können viele Personen die gleiche Mailadresse erhalten.
Das ist in mehrwertigen Feldern nicht möglich: Die erlauben Dir nur, mehrere Unterdatensätze in einem Datensatz zu speichern, aber im nächsten Datensatz mußt Du die Liste erneut aufbauen.

Mit Adressen ist es ebenso: Sie beschreiben einen Ort, eine Adresse, aber sie sind neutral, keiner Person und keiner Firma zugeordnet allein durch die Adresse - eine Mietwohnung kann morgen einen anderen Mieter haben, ein Haus kann verkauft werden, eine Person kann umziehen - usw.
Die Adresse selbst ändert sich dadurch nicht.

Erst die Zuordnungstabelle m:n macht die Adresse zu einem Zeitraum zugehörig zu einer Person oder einer Firma. Den Zeitraum kann die Zuordnungstabelle verwalten. Außerhalb dieses Zeitraumes gehört die Adresse nicht zu der Person.

Wenn Du immer so vorgehst, Daten in kleinen Einheiten in einzelne Tabellen aufzuteilen, hast Du am Ende viel weniger Kopfschmerzen.

Je frühzeitiger Du das Datenmodell korrekt einrichtest, desto weniger Probleme hast Du am Ende. Wenn Deine jetzige Lösung unbedingt am Mo. laufen soll, so what. Dann ist der nächste Schritt, das Datenmodell danach zu korrigieren und dann die Daten aus der bereits verwendeten Datenbank zu übertragen, was erst einmal Arbeit machen wird.

Wenn Du das gleiche in einem Jahr probierst, in dem schon alles Mögliche "schräge" angeflanscht wurde, werden die Probleme immer größer und die Lösungsmöglichkeiten immer schwieriger.

Gruß

Christian

#93
Formular / Re: E-Mail aus Access direkt v...
Letzter Beitrag von Bitsqueezer - November 26, 2025, 08:02:57
Hallo René,

Access macht ja nichts von alleine. Wenn Du also keinen Code gebaut hast, bei dem das Formular oder z.B. der Detailbereich auf einen Klick reagieren soll, dann passiert auch keine Code-Ausführung.

ZitatBei der Auswahl des Feldes habe ich btnSend ausgewählt und er zeigt mir auch die Handlung click daneben an.
Auch nach dem 6. Lesen kann ich mir nicht entfernt vorstellen, was dieser Satz bedeuten soll.

Ich würde generell Deine Mail-Send-Funktion verbessern, indem sie nach dem Abgreifen der Control-Inhalte prüft, ob der Inhalt valide ist. Für eine Mailadresse mal minimal das Vorhandensein auf "@" und natürlich, ob der Inhalt leer ist oder nicht. Ebenso sollte ein Betreff nie leer sein. Und ein leerer Body macht i.d.R. auch keinen Sinn.

Das sollte Deine Funktion alles prüfen und abfangen und den Benutzer darauf hinweisen, und wenn nicht alles erfüllt ist, die Mail nicht senden.

Daneben hilft dann einfach, einen Breakpoint in den Code zu setzen und zu debuggen. Dann siehst Du, was da genau passiert und wer der Verursacher ist.

Ansonsten müßte man schon den gesamten Formularcode sehen, um mehr dazu zu sagen. Wenn das schon der gesamte Code war, dann kann das, was Du sagst, nicht zutreffen, da es hier keinen anderen Eventcode als den eines Buttons gibt. Vorausgesetzt, "btnSend" ist der Name eines Button-Controls und nicht eines anderen Objektes...

Gruß

Christian
#94
Formular / E-Mail aus Access direkt verse...
Letzter Beitrag von rene.hundert - November 26, 2025, 07:21:11
Hallo in die Runde,

die Programmierung zum Senden von E-Mail direkt aus Access heraus funktioniert bei mir eigentlich ganz gut.

Private Sub btnSend_Click()
    fx_Email_Senden
End Sub


Private Sub fx_Email_Senden()
    '--- fx_EMail_Senden ()---
   
    Dim sEmail_Adress_Absender As String
    sEmail_Adress_Absender = ctlAbsenderEMail
   
    Dim sEMail_Adress_Empfaenger As String
    sEMail_Adress_Empfaenger = ctlEmpfaengerEMail
   
    Dim sTitle As String
    sTitle = ctlBetreff
   
    Dim sText As String
    sText = ctlTextEmail
   
    '--- Use Outlook App ---
    Dim app_Outlook As Outlook.Application
    Set app_Outlook = New Outlook.Application
   
    '--- Email erstellen ---
    Dim objEmail As Outlook.MailItem
    Set objEmail = app_Outlook.CreateItem(olMailItem)
    objEmail.To = sEMail_Adress_Empfaenger
    objEmail.Subject = sTitle
   
    objEmail.Body = sText
    objEmail.Display False
       
    objEmail.Send
    '--- Email erstellen---
   
    'Abschluss
    Set objEmail = Nothing
    Set app_Outlook = Nothing
    'Abschluss
   
    '--- Use Outlook App ---
    '--- fx_E-Mail_versenden ()---
End Sub

Ich habe nur das Problem, dass er mir eine leere E-Mail erstellt, sobald ich in dem Formular irgendwo hin clicke.

Sicherlich habe ich einen Fehler in meinem Code und sicherlich könnt ihr mir dabei helfen.

Bei der Auswahl des Feldes habe ich btnSend ausgewählt und er zeigt mir auch die Handlung click daneben an.

Vielen Dank und Gruß

René
#95
Formular / Re: Formular "vergisst" Datenq...
Letzter Beitrag von rene.hundert - November 26, 2025, 07:18:19
Servus in die Runde,

ich habe 100 Adressen. Da die Datenbank zu Beginn der kommenden Woche laufen muss, habe ich die Tabelle Adressen kopiert und für die Empfänger ein E angehängt (AdressenE).

Das ist zwar aus meiner Sicht nicht sauber, da ich ja dann zwei Datenbestände habe, die Mehrfachauswahl jetzt aber zurückzudrehen erscheint mir im Moment aufwendiger.

Man lernt ja dazu und ursprünglich habe ich Empfänger und Absender ja auch mit jeweils einem UFo erfasst und dann kam ich auf eine scheinbar bessere Idee.

Aber danke für eure Hilfe
#96
Tabelle/Abfrage / Re: Eingabe einer Zahl inklusi...
Letzter Beitrag von Markus R. - November 25, 2025, 19:51:45
Hallo,

danke für euere Vorschläge!
Die "> 98,6" im obigen Beispiel kann man sich als eine Art Reinheit des Stoffes vorstellen. Sie entsteht, weil man auf bestimmte Unreinheiten prüft und die gefundenen Werte von 100 abzieht. Mit Messfehlern usw. wird dann ein "> xx,x" draus.

Da in der Tabelle auch Messwerte aus anderen Analysen ohne Vergleichszeichen eingetragen werden sollen, gefällt mir die Version mit einer zusätzlichen Spalte für das Vergleichszeichen gerade sehr gut. Mit Lookup-Tabelle dahinter stelle ich mir auch die Dateneingabe "einfach" vor.

Die vorgeschlagenen Datentypen für Werte schaue ich mir jetzt mal genauer an.

In der Tabelle für die Sollwerte könnte das Vergleichszeichen ersetzt werden durch eine Spalte ObereGrenze und eine Spalte UntereGrenze, gegen die man den Messwert prüfen kann. Im Beispiel von oben würde der Sollwert "98,0" in der Spalte UntereGrenze stehen.

Wie könnte dann eine Abfrage aussehen?

Viele Grüße
Markus
#97
Tabelle/Abfrage / Re: Bedingte Formartierung im ...
Letzter Beitrag von Bitsqueezer - November 25, 2025, 12:47:12
Hallo Frank,

das ist richtig, nur vergißt man das bei der Eingabe schon mal und wundert sich dann, wenn es nicht funktioniert, obwohl man glaubt, alles richtig eingegeben zu haben.

Gruß

Christian
#98
Tabelle/Abfrage / Re: Bedingte Formartierung im ...
Letzter Beitrag von Frank200 - November 25, 2025, 11:44:03
Zitat von: Bitsqueezer am November 25, 2025, 09:18:18hat Access aus einem Feldnamen einen String gemacht
Das kann man vermeiden, indem jeder Feldname im Ausdruck in eckigen Klammern geschrieben wird. Unabhängig davon, ob dieser Sonderzeichen oder Leerzeichen enthält.
Das Gleiche gilt für Controlnamen.
#99
Tabelle/Abfrage / Re: Bedingte Formartierung im ...
Letzter Beitrag von Bitsqueezer - November 25, 2025, 09:18:18
Hallo,

außerdem muß man beachten, daß der CF-Editor von Access bisweilen sehr zickig ist. Man hat etwas eingegeben und gespeichert, und wenn man dann wieder den CF-Editor öffnet, hat Access aus einem Feldnamen einen String gemacht. Automatismen sind nicht immer ein Segen...

AfterUpdate würde auch nicht genügen, weil dann eine Farbänderung nur nach Änderung des Feldes eintritt. Rufst Du den Datensatz wieder auf, bleibt der Hintergrund, wie er gerade ist.

In einem Endlosformular ginge das ohnehin nicht. Also: CF ist der richtige Weg und die Kombobox kann das.
Beachte, daß der Wert der Wert der gebundenen Spalte sein muß. Wenn Deine Kombobox also aus ID und Text besteht, kannst Du nicht in der CF-Formel den Text abfragen, Du mußt dann den ID-Wert angeben.

Am einfachsten ist es zu testen, wenn Du die Formel, die Du für CF verwendest, mit in die Abfrage einbaust, dann siehst Du gleich, welche Zeile welches Ergebnis ergibt.

Bei komplexen Formeln ist das ohnehin eine gute Idee, denn dann kannst Du die CF-Formel stark vereinfachen, indem Du nach dem Ergebnis dieser zusätzlichen Spalte fragst. Die Abfrage berechnet das bedeutend schneller und die CF-Formel kann einfach auf True/False testen. Das beschleunigt auch die CF-Anzeige in einem Endlosformular.

Gruß

Christian

#100
Tabelle/Abfrage / Re: Eingabe einer Zahl inklusi...
Letzter Beitrag von Bitsqueezer - November 25, 2025, 09:11:38
Hallo,

würde ich auch so machen, wie von Klaus und Doming vorgeschlagen.
Vorteil ist, daß Du das auch in SQL abfragen kannst, mit IIf oder Switch.
Für die Vergleichsarten kannst Du eine Lookup-Tabelle anlegen, die vom Aufbau so ist, wie von Doming vorgeschlagen.

Ich würde bei Genauigkeit zum Datentyp "Decimal" raten, den es auch in Access gibt, wenn auch etwas versteckt.
Beachte aber, daß es kein VBA-Variablen-Pendant zu Decimal gibt, wenn Du in VBA damit rechnen willst, mußt Du die betreffende Variable als Variant deklarieren, die kann mit Decimal umgehen.

Double ist schon recht genau, aber je nach Anzahl Nachkommastellen, die Du vielleicht brauchst, nicht genau genug, wenn es um Messwerte geht. Es ist halt eine berechnete Fließkommazahl, während Decimal exakt die Ziffern speichert, die Du speichern willst. Dafür aber eben auch nur für die angegebene Anzahl Stellen (Gesamtanzahl, Nachkommastellen davon).

Gruß

Christian