Neuigkeiten:

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

Mobiles Hauptmenü

Nur eine chkbox darf markiert sein

Begonnen von Scoopman, Juni 11, 2010, 14:49:46

⏪ vorheriges - nächstes ⏩

Scoopman

Hallo zusammen,

ich habe in einem Formular 4 Kontrollkästchen. Jedes Kontrollkästchen gibt den Status einer Lierferung wieder. Dabei darf aber immer nur ein Kontrollkästchen aktiv (-1) sein. die restlichen sollten nicht markiert sein, also (0).
Habe es selbst versucht und komme nicht weiter. Wo ist das Problem an meinen Code?
Wäre wirklich sehr happy wenn mir jemand weiterhelfen könnte. Ich verstehe wahrscheinlich meinen eigenen Code nicht.

Private Sub chkbox_Lieferung_AfterUpdate()
'Nur eine chkbox darf markiert sein.
    If Me.chkbox_Lieferung = -1 Then
        Me.chkbox_Ersatzlieferung = 0
        Me.chkbox_Nachlieferung = 0
        Me.chkbox_Status = 0
        Me.chkbox_Lieferung = 0
        Me.chkbox_Ersatzlieferung = -1
        Me.chkbox_Nachlieferung = 0
        Me.chkbox_Status = 0
        Me.chkbox_Lieferung = 0
        Me.chkbox_Ersatzlieferung = 0
        Me.chkbox_Nachlieferung = -1
        Me.chkbox_Status = 0
        Me.chkbox_Lieferung = 0
        Me.chkbox_Ersatzlieferung = 0
        Me.chkbox_Nachlieferung = 0
        Me.chkbox_Status = -1
    End If

End Sub
Access 2003(SP3)

Wurliwurm

Nein, mit der Lösung wirst Du nicht glücklich !

Nimm dafür eine Optionsgruppe, das ist eine Gruppe von Checkboxen, wo nur immer eine auf einmal aktiv sein kann.
Eine Optionsgruppe kannst Du ganz leicht mit einem Assitenten anlegen.

Eine solche Optionsgruppe kannst Du auch leichter abfragen, indem Du Werte z.B. von 1 bis 4 für die einzelnen Boxen vergibst.



MzKlMu

#2
Hallo,
nimm statt der Kontrollkästchen eine Optionsgruppe und hinterlege in einer Spalte (Zahl) den Status. Ein Optionsgruppe kann das von Dir gewünschte automatisch. Außerdem sparst Du noch 3 Tabellenfelder.
Wenn Du dann noch für die 4 Stauswerte eine Tabelle machst mit der Zahl (der Optionsgruppe) und zu dieser Tabelle noch eine Beziehung über die gleiche Zahl in der Haupttabelle anlegst, hast Du automatisch auch den richtigen Text zur Statuszahl.

Ohne eine einige Zeile Code.
Gruß
Klaus

Scoopman

Vielen Dank euch beiden, der Vorschlag ist super. Habe das ganze auch schon umgestzt. Aber das Problem hierbei ist nun folgendes. In meinem Formular "frmNachweis" befindet sich ein Unterformular "subqryNachweis" in dem die Lieferungen des angezeigten Lieferanten stehen (Datenblattansicht). Ich möchte aber (sofern möglich) in dem "frmNachweis" die Optionsgruppe stehen haben. Wenn ich in dem Unterformular einen Datensatz anklicke, möchte ich den Status (1 bis 6) in der Optionsgruppe angezeigt bekommen.
Ist das überhaupt möglich. Hinbekommen habe ich es jedenfalls nicht.
THX for your Support.
???
Access 2003(SP3)

Wurliwurm

#4
Möglich ist das schon, und zwar indem Du eine "Schnittstelle" zwischen Formular und Unterformular bildest.

Lege im Hauptformular ein Public Sub an, das den Wert in der Optionsgruppe setzt. Wenn Du auch über die Gruppe die Daten verändern willst, brauchst Du außerdem noch im Unterformular ein Public Sub.

Ich kann es Dir nicht vorkauen, hier nur ein paar Hinweise, bei Syntaxproblemen o.ä. evtl. googeln.

-Lege im Hauptformular etwa an:

Public Sub setOptionsgruppe(ByVal intValue)

    meineOptionsgruppe.Value =   intValue

End Sub

-Wenn im Unterformular der Datensatz gewechselt wird (beim Blättern etc. pp), dann mußt Du das dazugehörige Ereignis nehmen und hier die Routine im Hauptformulart aufrufen.

'Den Wert durch Fallunterscheidung ermitteln (falls nicht eh der Wert 1:1 zur Optionsgruppe passt)
Dim intWert as integer
select case Me!Status
  case "A"
     intWert = 1
  case "B"
     intWert = 2
  case else
    intWert = 3
end select

'Optionsgruppe im Hauptformular belegen
Parent.setOptionsgruppe intWert

Andersrum kannst Du im Hauptformular das Ereignis meineOptionsgruppe.change füllen mit einem Code, der eine im Unterformular liegende Routine aufruft.

'Aufruf einer Routine im Kindformular vom Hauptformular aus
Call Me.subqryNachweis.Form.changeStatus inWert

Du mußt auch auf Anschlag testen, sprich, daß Du keinen häßlichen Laufzeitfehler bekommst, wenn der Wert in der Optionsgruppe geändert wird und im UFo kein aktueller Datensatz ist.

Hoffe, das hilft Dir weiter. Gegebenfalls können Dir die Götter und Gurus und sonstige Alphatiere hier auch noch weiterhelfen.

DF6GL

Hallo,

warum nicht so:

Optionsgruppe im Hauptform anlegen.
Optionswerte entspr. einstellen.  (1-6)

Im Steuerelementinhalt der Optionsgruppe (Rahmen):

=subqryNachweis.Form!Status

(falls "subqryNachweis"  der Name des UFO-Steuerelementes ist.)

database

Hallo,

abgesehen davon, dass das ziemlich umständlich erscheint, wird nicht so einfach zu lösen sein, wenn die Optionsgruppe an ein Feld des Masterdatensatzes gebunden ist! (siehe #2 von MzKlMu)

Meint ein sonstiges Alphatier

Peter
:D

Scoopman

@Wurliwurm: Vielen Dank, aber das bekomme ich nicht hin. Mein Status (Ich übe noch).
@DF6GL: Super Idee, dachte ich auch am Anfang. Dumm nur das die Optionsgruppe ans Hauptformular gebunden ist. Ich kann versuchen was immer ich möchte, aber der Inhalt der Statusspalte im Unterformular "subqryNachweis" (heisst wirklich so) lässt sich nicht an die Optionsgruppe binden. Vom zurückschreiben mal ganz abgesehen.
Scheinbar hatte ich eine nette Idee die sich nicht umsetzen lässt. Schade. :'(

Access 2003(SP3)

database

#8
Sag ich ja:
Zitatwird nicht so einfach zu lösen sein, wenn die Optionsgruppe an ein Feld des Masterdatensatzes gebunden ist

Eine MÖGLICHE  Lösung für deine Vorstellung kann sein, ein UNGEBUNDENES Feld ins Hauptformular einzubauen, dass dann beim Klicken ins Unterformular eingeblendet wird und den Status des angeklickten Datensatzes zeigt. Beim Wechsel des Datensatzes im Hauptform (Ereignis Beim Anzeigen) wird das Ungebundene Feld wieder versteckt.

oder...

EDIT:

Beim Klicken ins Unterformular erzeugst du eine MsgBox, die den Status anzeigt - damit hast du das ganze Gewürge über die Formulare umgangen, was letztendlich eh nur zu Verwirrung führt wenn eine gebundene Status-Box im HAFo existiert.


Wurliwurm

Die Optionsgruppe muß ungebunden sein und nur über Public Sub setOptionsgruppe(byval intWert as integer) beschrieben und evtl. auch durch Public Function getOptionsgruppe() as Integer gelesen werden.

Sowas habe ich schon etliche Male gemacht, daß ist wirklich nicht schwer! Laß Dich nicht abschrecken durch ein paar Zeilen Code.





database

Hi

@Wurliwurm
ZitatDie Optionsgruppe muß ungebunden sein

...ist sie aber, da sie den Status bei der Dateneingabe an den Masterdatensatz liefert und zu dem Zweck im HAFo existiert!

Dein Vorschlag führt zwangsweise zu einer 2. Optionsgruppe, einer ungebundenen - ein bisschen verwirrend für den Benutzer - wie ich meine

DF6GL

Hallo,

versteh die Situation nicht mehr...


" Dumm nur das die Optionsgruppe ans Hauptformular gebunden ist."

was heißt das?

Lt.  Deiner Frage hast Du im Unterform ein Feld mit dem Status(wert) für die jeweilige Lieferung des im HF angezeigten Lieferanten.  Diesen Status willst Du in einer Optionsgruppe im HF anzeigen (wobei die eigentlich im UFO sein sollte.)

Warum sollte also die Optionsgruppe im HF an ein Feld in der Lieferanten-Tabelle gebunden sein?  (so interpretiere ich jetzt obige Aussage).


Nimm halt den Eintrag im Steuerelementinhalt der Optionsgruppe heraus und ersetz ihn durch meinen geposteten Ausdruck...




Wurliwurm

Tach Peter,

Ich dachte, die Optionsgruppe steht im HF und die Bwegungsdaten, worauf sich die Optionsgruppe bezieht im UF. Das Hauptformular hat als Datenherkunft die Stammdaten und nicht die Bewegungsdaten. Sprich es gibt nur die eine Gruppe und die kann und soll ungebunden sein.

Ich würde dem Frager empfehlen, einmal seinen Entwurf als mdb zu laden. Ich bin kein Fußballfan und habe morgen etwas Zeit, aber habe hier allerdings nur Office 2003.

database

Hallo,

@Franz
Wobei sich unsere Antworten #5 und #6 wieder mal um ein paar Sekunden überschnitten haben ..   :D

Ich ging davon aus, dass der Vorschlag von Klaus (#2) umgesetzt wurde und somit die Optionsgruppe das Status-Feld im Hauptdatensatz (HAFo) beschreibt - als gebundenes Steuerelement obwohl ich den Werten nach auch auf die Detaildatensätze tippen hätte sollen/können
Aber:
ZitatIch möchte aber (sofern möglich) in dem "frmNachweis" die Optionsgruppe stehen haben
ließ mich obige Annahme annehmen ... :-\

@Wurliwurm
Meiner ganz persönlichen Meinung nach sollte in einem Formular - in dem Fall das Hauptformular - nur ein Wert angezeigt werden, der der Datenherkunft entspringt, daher ...

Scoopman

WOW was für ein Interesse! Wahnsinn.
Vielen Dank für die vielen Anregungen.
Aber alles in allem stehe ich mit meinem Problem immer noch am Anfang.
@DF6GL: Deinen Vorschlag verstehe ich und es klingt auch vollkommen logisch. Aber wahrscheinlich habe ich mich falsch ausgedrückt.
Die Optionsgruppe steht im Hauptformular. Der Status ist in einer Abfrage die wiederum im Unterformular ihren Ursprung hat. Wenn ich die Optionsgruppe anlege, verknüpft sie sich automatisch mit dem Hauptformular. Nachträglich kann ich zwar deinen Vorschlag einbauen, aber Resultat ist das gleich.
Ich wollte das die Optionsgruppe jeden Status eines DS aus dem Unterformular beim klick auf den DS anzeigt. Selbstverständlich muss der Wert auch zurückschreibbar sein.
Ich habe zwar die Db von 16 MB auf 544KB verkleinert um sie hier hochzuladen, aber die Beschränkung lässt nur 200 KB zu (verständlich).
Noch kleiner bekomme ich die DB nicht.
Somit muss ich leider die Lösungen eurer Phantasie überlassen.
Werde mal versuchen ob ich den Lösungsvorschlag von database hinbekomme.
Nichts desto trotz, vielen vielen Dank für eure zahlreichen Ideen.

Access 2003(SP3)