Neuigkeiten:

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

Mobiles Hauptmenü

Haken in Ja/Nein-Feld zählen

Begonnen von Ralf26, Juli 12, 2011, 18:53:54

⏪ vorheriges - nächstes ⏩

Ralf26

Hallo,

in einem Formular (form_alle) in dem Hörspieltitel mit Autor, Vorleser und Genre, allerdings ohne Inhaltsangabe tabellarisch aufgelistet sind, gibt es in der letzten Spalte die Möglichkeit bei ,,Details" – einem Ja/Nein-Feld – einen Haken zu setzen und dann auf eine Befehlsschaltfläche ,,Anzeigen" zu klicken. Dadurch wird ein Formular (form_alle_Details) angezeigt, in dem der ausgewählte Titel mit Inhaltsangabe angezeigt wird (basierend auf einer Abfrage).
Soweit habe ich das alles hingekriegt, inklusive der Löschung aller Haken wenn das Formular "form_alle" erneut aufgerufen wird, damit man wieder frisch auswählen kann.
Was mir jetzt noch fehlt, ist eine Überprüfung beim Anklicken von ,,Anzeigen" ob mindestens ein Haken bei einem Hörbuch bei Details gesetzt wurde. Falls kein Haken gesetzt wurde, soll in einer Messagebox der Text ,,Es wurde kein Titel für die Detailanzeige ausgewählt" angezeigt werden.
Ich habe bisher mehrere erfolglose Versuche mit DCount hinter mir. Kann mir jemand einen Tip geben, wie ich Argumente, also Ja-Haken beim Element ,,Details" in einem Formular zählen kann ?
Vorab schon mal vielen Dank.

Gruß,

Ralf26

MzKlMu

Hallo,
ZitatIch habe bisher mehrere erfolglose Versuche mit DCount hinter mir.
zeige mal Deine Versuche, damit man nicht bei Null anfangen muss.
Gruß Klaus

Ralf26

Hallo,

es geht ja lediglich um die Frage, wie man die Anzahl der Haken bei einem Ja/Nein-Feld zählt.
Ich habe es mittlerweile selbst herausgefunden.

Details ist das Ja/Nein-Feld in der Tabelle
tab_Hoerbuch ist die Tabelle in der mit DCount die Anzahl der Haken gezählt werden soll, bzw. in diesem Fall eine MsgBox ausgegeben werden soll, wenn kein Haken gesetzt ist.

If DCount("Details", "tab_Hoerbuch", Details = 0) Then
MsgBox "Es wurde kein Hörbuch für die Detailanzeige ausgewählt"
Exit Sub
Else
....( Folgeaktion) ....
End If


Trotzdem Danke für die Mühe.

Gruß,

Ralf26


DF6GL

Hallo,

wenn, denn so:

If DCount("Details", "tab_Hoerbuch"," Details = 0" )= 0   Then







Ralf26

Hallo Franz,

mir ist der Aufbau der DCount-Funktion immer noch nicht so ganz klar.
Die von mir beschriebene Variante

If DCount("Details", "tab_Hoerbuch", Details = 0) Then
MsgBox "Es wurde kein Hörbuch für die Detailanzeige ausgewählt"
Exit Sub
Else
....( Folgeaktion) ....
End If

macht jedenfalls genau das, was sie soll. Wenn kein Haken im Formular gesetzt wurde, was letztendlich bedeutet, dass auch in tab_Hoerbuch bei Details kein Haken in einem Ja/Nein-Feld gesetzt ist,
wird die MsgBox ausgegeben und die Routine wird verlassen.
Wenn mindestens ein Haken gesetzt ist, wird der erste Teil übersprungen und bei Else die Folgeaktion ausgefürt, also das Formular geöffnet, in dem (abfragebasiert) die Datensätze angezeigt werden, bei denen vorher ein Haken gesetzt wurde.

Verwende ich Deine Variante

If DCount("Details", "tab_Hoerbuch"," Details = 0" )= 0   Then

werden die Datensätze die vorher mit Haken ausgewählt wurden, einwandfrei angezeigt. Wurde kein Datensatz ausgewählt, wird jedoch nur der Teil nach dem Else ausgeführt, d.h. es wird keine MsgBox ausgegeben, sondern ein leeres Formular angezeigt (genau das was ich ja vermeiden wollte) da kein Datensatz vorher mit Haken selektiert wurde.

Habe ich da etwas übersehen ? Und warum funktioniert meine Variante, wenn sie eigentlich nicht korrekt ist ?

Viele Grüße,

Ralf26

DF6GL

Hallo,

Dein Code macht nicht das, was Du erwartest.... 

Details=0

ohne Gänsefüße drumherum macht einen Vergleich mit dem Formular-Textfeld(!)  "Datum", dessen Ergebnis (True oder False) der Dcount-Funktion als "Kriterium" übergeben wird . D. H. je nach angezeigtem DS liefert DCount 0 oder die Gesamt-Anzahl der DS in der Tabelle, sprich der entspr. IF-Zweig wird durchlaufen.

Du solltest aber einen Vergleich mit den TABELLENFELD "Details" durchführen, das nur dann passiert, wenn der Ausdruck Details=0 in Gänsefüßen steht und als Where-Condition von SQL ausgewertet  und nicht wie ansonsten von VBA berechnet wird.


Poste mal den gesamten Code dieser Prozedur.


Ralf26

Hallo Franz,

ich widerspreche ja ungern, aber mein Code macht exakt das was ich erwarte, auch wenn er zugegebenermaßen mehr durch Probieren und weniger durch fundiertes Wissen über die Syntax der DCount-Funktion zustande gekommen ist.
Wird im Formular (das Daten in die Tabelle "tab_Hoerbuch" schreibt) bei Details ein Haken gesetzt, wird der Else-Zweig ausgeführt und das Formular geöffnet, das den/die gewählten Datensatz/Datensätze mit den Inhaltsangaben anzeigt. Wird kein Haken gesetzt, wird der If-Zweig ausgeführt, die MsgBox wird angezeigt, die Prozedur wird verlassen und man ist wieder in dem Formular in dem man Haken für die Detailansicht setzen kann.

Hier der komplette Code der Prozedur :

---------------------------------------------------

Private Sub Befehl16_Click()
On Error GoTo Err_Befehl16_Click


DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

If DCount("Details", "tab_Hoerbuch", Details = 0) Then
MsgBox "Es wurde kein Hörbuch für die Detailanzeige ausgewählt"
Exit Sub
Else
Call chform("form_alle_Details", "form_alle")
End If

Exit_Befehl16_Click:
    Exit Sub

Err_Befehl16_Click:
    MsgBox Err.Description
    Resume Exit_Befehl16_Click
   
End Sub

---------------------------------------------------

chform ist eine Prozedur, die lediglich das erst Formular in der Klammer öffnet und das zweite (aktuelle Formular) schließt.

Ändere ich den Code auf Deine Variante ab, wird - falls kein Haken gesetzt wird - der komplette If-Zweig übersprungen und der Else-Zweig ausgeführt, was dazu führt, dass das leere Formular "form_alle_Details" angezeigt wird, da ja kein Datensatz für die Abfrage auf die das Formular beruht, ausgewählt wurde.

Viele Grüße,

Ralf26



DF6GL

Hallo,

naja, exakt bezweifle ich .. ;)

Solange Du auf einem DS stehst und den Haken setzt, läuft der Code schon in Bezug auf diesen DS.. Das Ding läuft aber nicht, wenn Du an anderen DS als dem angezeigten auch einen Haken gesetzt hast und den oder diese auch mit prüfen willst.


Wenn ein Haken gesetzt wird, berechnet sich (Me!)Details=0 zu False, was DCount als "Nicht zutreffendes Kriterium" für jeden DS wertet, d. H. Dcount liefert den Wert 0 zurück.


Wird kein Haken gesetzt, wird (Me!)Details=0 zu True, was Dcount veranlasst, alle DS als "gültig" anzusehen und liefert die komplette Anzahl der DS in der TAbelle zurück. Diese Anzahl ist nicht gleich 0, so dass die IF-Bedingung das als True ansieht und der True-Zweig wird durchlaufen.


Dieses Verhalten kann auch so dargestellt werden:


If Me!Details=0 Then
.
else
.
End If



Klar läuft das dann (zufällig) exakt, wenn Du solche Logik brauchst/willst.


Ralf26

Hallo Franz,

ich habe ausprobiert was Du meinst, und jetzt verstehe ich es auch.
Da das Formular aber sowieso nur zur Anzeige dient (Schreiben, Anfügen und Verändern ist mit Ausnahme des Feldes "Details" nicht erlaubt), besteht keine Notwendigkeit auf einen anderen Datensatz zu klicken, als den, bei dem ich bei Details einen Haken gesetzt habe (oder auch keinen).
Sagen wir mal so : für mich ist's o.k. - auch wenn es nicht ganz sauber ist.
Ich habe auf jeden Fall wieder viel gelernt.
Vor allem die von Dir beschriebene Alternative

If Me!Details=0 Then
.
else
.
End If

ist eigentlich noch einfacher.

Wie schon gesagt. Ich bin mit meiner Lösung ganz zufrieden und bedanke mich (mal wieder) bei Dir für die ausführlichen Erklärungen.

Viele Grüße,

Ralf26