Neuigkeiten:

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

Mobiles Hauptmenü

Kontrollkästchen programieren

Begonnen von AvalonStealth, März 14, 2010, 22:06:20

⏪ vorheriges - nächstes ⏩

AvalonStealth

Hallo,  ???
ich habe ein Hauptformular mit zwei Unterformularen. Personen -> Bestellungen -> Bestelldetails. Nun habe ich in dem UFO Bestelldetails ein Kontrollkästchen, Artikel ausgegeben. Wenn alle Artikel abgehakt, sprich ausgegeben wurden, dann soll im UFO Bestellungen ein Kontrollkästchen Bestellung erledigt WAHR werden, sprich sich selbstständig abhaken, WAHR werden. Hat jemand eine Idee.
Meine Versuche schlugen bis jetzt leider fehl: z.B.
Formular beim Anzeigen: If Personen!Bestellungen!Bestelldetails.ausgegeben= true then
Personen!Bestellungen.erledigt=true
else
Personen!Bestellungen.erledigt=false
end if
???
Powered by AvalonStealth

AvalonStealth

Also,
habe folgende Variante ausprobiert und sie Funktioniert.

Private Sub Form_Current()
If Me.Bestelldetails!Ausgegeben = True Then
Me.Bestellungen!Erledigt = True
Else
Me.Bestellungen!Erledigt = False
End If
End Sub

Das Problem ist aber, dass die Bestelldetails mehrere Artikel enthält. Das Kontrollfeld Me.Bestellungen!Erledigt soll aber nur
TRUE werden wenn alle Bestelldetails!Ausgegeben True sind. Nicht wenn noch eines False ist.
Wie kann ich das realisieren? Vielleicht mit einer FOR Next Schleife?
Wer hat einen Tip für mich?
Gruß
Powered by AvalonStealth

DF6GL

Hallo,



per Durchlauf des Form-Recordsets:



Private Sub Form_Current()

Dim RSC as Dao.Recordset, erl as Boolean
Set RSC =Me!Bestelldetails.Form.Recordsetclone
erl=True
If RSC.Recordcount >0 then
Rsc.Movefirst
  Do until RSC.EOF
    If not RSC!Ausgegeben then
    erl=false
    exit Do
    End if
  RSC.Movenext
  Loop
End  if

Me!Bestellungen!Erledigt =erl

set RSC=Nothing
End Sub


Ob aber das Form_Current-Ereignis an dieser Stelle das geeignete ist, dazu habe ich leichte Bedenken.

Alternativ könnte man auch die DCount-Funktion auf die Tabelle ansetzen und die Anzahl der "fehlenden Haken"  zählen.

AvalonStealth

Hallo DF6GL,

danke für den Tip  :D. Funktioniert einwandfrei.
Wie kann ich es erreichen, dass sich das Formular nach jedem Häckchen setzten aktualisiert?
Mit Me.Requery bekomme ich einen Fehler: Nicht genügend Speicherplatz im Stapel!
Und mit Me.Refresh aktualisiert sich dass Feld erledigt nicht! ???
Powered by AvalonStealth

DF6GL

Hallo,

mhm,, ja, anders als in meiner PN vermutet, dürften sich meine Bedenken hinsichtlich des Ereignisses bestätigen.


Benutz mal das BeforeUpdate_Ereignis des "Hakens", um den Code auszuführen.


Ansonsten wirklich die Dcount-Funktion einsetzen...

AvalonStealth

Also,
Ich habe ein Hauptformular  [Hauptformular Personen],
darin enthalten ist ein UFO [Bestellungen],
darin enthalten ist ein UFO [Bestelldetails]
In jedem Datensatz von Bestellungen, können zig Datensätze Bestelldetails enthalten sein.
Jeder datensatz Bestelldetails enthält ein Kontrollkästchen (Ware ausgegeben).
Jeder Datensatz Bestellungen enthält ein Kontrollkästchen Erledigt (Bestellung abgeschlossen).
Dieses Kontrollkästchen "Erledigt" soll aktiv sein, wenn alle Bestelldetails aktiv sind.
Ansonsten soll es inaktiv bleiben.
Folgender Code funktioniert:

Private Sub Form_Current()
Dim RS As Object, erl As Boolean
Set RS = Me.Bestelldetails.Form.RecordsetClone
erl = True
If RS.RecordCount > 0 Then
RS.MoveFirst
   Do Until RS.EOF
       If Not RS.Ausgegeben Then
       erl = False
       Exit Do
       End If
   RS.MoveNext
   Loop
End If
Me.Bestellungen!Erledigt = erl
Set RS = Nothing
End Sub

Dass heißt, wenn ich alle Detailshäkchen aktiviere, sollte sich das Häckchen Erledigt, in UFO Bestellungen auch aktivieren. Tut es aber nicht. Klicke ich einen datensatz vor und zurück, ist es sofort aktiv. Also Funktioniert das setzen der Häkchen, nur die Anzeige ist nicht aktuell.
Nun habe ich im UFO Bestelldetails folgende Lösung versucht:

Private Sub Form_AfterUpdate()
Me.Parent!Bestellungen.Form.Requery
End Sub
Leider auch ohne Erfolg
Was an diese Stelle funktioniert ist ein Requery auf das Hauptformular. Allerdings springt die Anzeige dann zum ersten Datensatz. Sie sollte aber schon im aktuellen Datensatz bleiben.
Der Fehler liegt meiner Meinung nach in der richtigen Aktualisierung. Was muss wie aktualisiert werden, damit die UFOs korrekt angezeigt werden.

Ich danke schon mal im voraus allen die einen Tip für mich haben.
Gruß
Powered by AvalonStealth

DF6GL

Hallo,

setz mal ein runcommand accmdsaverecord  zusätzlich an den Anfang des Code und das Requery beibehalten.


(und nochmal: Such ein anderes Ereignis...)

AvalonStealth

Hallo DF6GL,

du hattest natürlich recht. Das Ereignis war sehr schlecht.
Mittlerweile funktioniert alles korrekt.
Der Code funktioniert, wenn er aus dem Hauptformular aufgerufen wird. Dazu habe ich eine
unsichtbare Befehlschaltfläche erstellt und darin das Form-Recordset durchlaufen lassen.
Der Aufruf erfolgt nach Aktualisierung des Ja/Nein-Häckchens im Ufo2.
Wird der gleiche Code aus dem Ufo aufgerufen, funktioniert es nicht. Da muss man erst mal drauf kommen.
Vielen dank für die Hilfe!!! ;D
Powered by AvalonStealth