Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: dolpho am August 13, 2020, 10:46:10

Titel: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 10:46:10
Hallo zusammen,
heute habe ich mal ein optisches Problem, dem ich nicht gewachsen bin.
Ein Formular habe ich in Listenansicht erstellt und ein Optionsfeld eingefügt. Die VBA Programmierung dahinter klappt im Moment gut, nur ist der Fehler, dass in allen dargestellten Zeilen gleichzeitig der Haken gewählt oder abgewählt wird, obwohl der VBA Befehl nur auf die jeweilige Zeile wirkt.
Was habe ich falsch gemacht?

LG Dolpho
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 11:29:39
Hallo,
Zitatobwohl der VBA Befehl nur auf die jeweilige Zeile wirkt.
Nein, der VBA Code wirkt auf alle Optionsfelder. Das Optionsfeld muss an ein Datenfeld gebunden sein, sonst geht das nicht.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: DF6GL am August 13, 2020, 11:30:20
Hallo,


da ist nichts falsch, dies ist normal.  Das Optionsfeld ist nicht an ein Tabellenfeld gebunden und existiert demzufolge nur ein Mal, auch wenn es bei jedem Datensatz angezeigt wird.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 11:49:07
?? Binde ich es aber an ein Datenfeld, kann ich es nicht mehr auswählen! ??
Im Hintergrund möchte ich für den angeklickten Datensatz den Status von "2" auf "3" ändern.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 11:51:15
Hallo,
dann ist die Abfrage nicht aktualisierbar.
Zeige die Abfrage des Formulars.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 11:55:30
SELECT tblExlager.ExlagerID, tblExlager.ExLagerStatus, tblExlager.PackmittelID_f, tblExlager.MatID_f, tblMaterial.mat_Nr, tblMaterial.mat_Name, tblExlager.ErstDatumWE, tblExlager.ExlagerMenge, tblExlager.Lief_id_f, tblExlager.ExLagerDatOut, tblExlager.ExlagerDatIn, tblExlager.ExlagerGewicht, tblExlager.Gase_id_f, tblFlaschGase.Gase_UN, tblPackmittel.PackmittelID, tblPackmittel.PackmittelName, tblPackmittel.Packmittelkurz, tblExlager.ExLagerBemerkung, tblExlager.LagerID_f, tblLager.LagerFa, tblLager.LagerAdresse, tblLager.LagerPLZ, tblLager.LagerOrt
FROM tblPackmittel RIGHT JOIN (tblMaterial INNER JOIN (tblLager INNER JOIN (tblFlaschGase RIGHT JOIN tblExlager ON tblFlaschGase.Gase_id = tblExlager.Gase_id_f) ON tblLager.LagerID = tblExlager.LagerID_f) ON tblMaterial.mat_id = tblExlager.MatID_f) ON tblPackmittel.PackmittelID = tblExlager.PackmittelID_f
WHERE (((tblExlager.ExLagerStatus)=1));


Kannst du so damit etwas anfangen?
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 12:15:50
Hallo,
in der Abfrage dürfte es nicht möglich sein Daten zu ändern.
Öffne mal die Abfarge direkt und versuche Daten zu ändern.

Die Abfrage sollte nur die Tabellen enthalten die im Unterformular auch benötigt werden.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 12:55:21
Hallo Klaus,
eine Abfrage nur mit den benötigten Daten führt auch nicht zum Erfolg  :(
Sobald ich das optFELD von der Abfrage entoppele habe ich das richtige Ergebnis, von VBA produziert wobei die Änderungen immer in der richtige Zeile stattfinde aber die Haken in allen Zeilen an- und ausgehen.
Ich weiß also immernoch nicht, wie ich dem begegnen könnte
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 12:56:44
Nachtrag Klaus,

in der Abfrage kann man die Daten ändern!
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 13:29:37
Hallo,
zeige den VBA Code.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 13:30:46
Private Sub optJaNein_AfterUpdate()
    If optJaNein.Value = True Then
        ExLagerStatus = 2
    Else
        ExLagerStatus = 1
    End If
End Sub
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 14:06:02
Hallo,
der gezeigte Code kann nicht zu einer Änderung führen, wenn die Optionsgruppe nicht gebunden ist.

Du machst hier irgendwo grundsätzliche Fehler.
Erstelle ein Minimalbeispiel, das den Fehler zeigt und lade das Beispeil hier hoch.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 14:51:12
sorry, stehe grad auf dem Schlauch

wie kann man eine DB hochladen?
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: crystal am August 13, 2020, 14:54:15
Hallo dolpho,

gestatte mir folgende Hinweise.
Statt den Status über ein J/N-Feld zu setzen, könntest du ihn auch direkt als Optionsfeld-Gruppe gestalten, denn du kannst jedem einzelnen Optionsfeld der Optionsgruppe einen eigenen Wert (z. B. 2, 3, 4) zuweisen und die Optionsgruppe an das betreffende Tabellenfeld binden.
Auch könntest du das Statusfeld per Combobox mit Werteliste gestalten. Optionsbuttons sind aber wohl eher einleuchtend und sparen einen Klick auf die Combobox, wenn sie auch mehr Platz benötigen.

Es ist bekannt, dass sich Zuweisungen per VBA bei Endlosformularen meist auf alle (angezeigten) Datensätze auswirken, was m. E. ein dicker Bug in Access ist, weil hier der DS-Bezug nicht berücksichtigt wird. Deshalb sollte man in Endlosformularen möglichst auf VBA-Zuweisungen und -Berechnungen verzichten... (Oh je - ich fürchte, dass diese Aussage auf Kritik stoßen wird.)

Gruß,
crystal
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 15:00:19
hallo chrystal,

das Handicap ist ja, dass der VBA-Befehl einwandfrei funktioniert nur der Haken des Optionsfeldes stimmt ja nicht.:
Ich klicke z.B.Zeile 3 und der Staus ändert sich nur in Zeile drei jedoch zeigt es den Haken in allen Zeilen an und das ist alles andere als benutzerfreundlich :-(

Gruß dolpho
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 15:04:12
Hallo,
Zitat von: undefined(Oh je - ich fürchte, dass diese Aussage auf Kritik stoßen wird.)
natürlich stößt diese Aussage auf Kritik. Mir jedenfalls ist ein solcher Bug nicht bekannt.
Wenn der VBA Code in einem Endlosformular das richtige Feld referenziert und im VBA Code auch auf den richtigen Datensatz verwiesen wird, wird auch nur der richtige Datensatz geändert. Es gibt nicht den geringsten Grund in Endlosformularen auf VBA Zuweisungen und Berechnungen zu verzichten.

@dolpho
Das Feld muss zwingend gebunden sein, sonst funktioniert das nicht.
Es wäre also erst mal zu prüfen, warum sich der Haken nicht setzen lässt, wenn das Feld gebunden wird.

Eine Datenbank kannst Du über den Button "Attachments and other options" ganz unten hochladen.
Die Datenbank sollte vorher komprimiert/repariert (Access Dienstprogramm) werden und dann muss diese noch gezippt werden.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 13, 2020, 15:15:19
DBopt.zip
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: crystal am August 13, 2020, 15:18:07
Hallo dolpho,
genau das ist ja das Problem.
der Status wird zwar für den einen DS geändert (weil der Status gebunden ist), aber die ungebundenen Optionsfelder ändern sich "überall", weil sie eben nicht gebunden sind.
Quasi nach dem Schema
- wenn gebunden: mach was im aktuellen Datensatz
- wenn nicht gebunden: mach was in allen Instanzen des Formulars (also eigentlich nur optisch).

Bitte probiere, den Status im Endlos-Formular bzw. in der Listen-Darstellung direkt zu binden (s. vorige Antwort) und auf eine "Berechnung" bzw. Zuweisung per VBA zu verzichten.

Ich habe dieses Problem selbst schon oft gehabt und bin manchmal schier verzweifelt. Ich hatte nie vernünftigen Erfolg, es sei denn, ich habe die zu "berechnenden" Felder gebunden und eine möglicht einfache/direkte Darstellung gewählt.

Gruß nochmal,
crystal
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: DF6GL am August 13, 2020, 15:26:53
Hallo,

-- das Kontrollkästchen im Formular muss an das Tabellenfeld "Teststaus" gebunden werden. (Leider wiederholt ignoriert)

-- Der Datentyp des Tabellenfeldes "Teststatus" muss in "Ja/Nein" geändert werden. (KKs sind nun mal vom Datentyp "Boolean")

-- Die filternde Datenherkunft des Formulars ist kontraproduktiv.  Datenherkunft auf Tabellenamen einstellen.



Wenn

ZitatIm Hintergrund möchte ich für den angeklickten Datensatz den Status von "2" auf "3" ändern.

der Status mehr als zwei Zustände hat, so ist dies mit einer zusätzlichen "Nachschlage"-Tabelle (tbl_Status) und einem (gebundenen) Kombifeld in Formular zu realisieren, das seine Listenfeld-Daten aus der tbl_Status bezieht.


Alternativ kann auch eine Optionsgruppe  mit entspr. vielen Optionsfeldern (hier 4 ,  0 bis 3) eingesetzt werden, wobei auch die Optionsgruppe an das Statusfeld (in diesem Fall Datentyp Long) gebunden und die einzelnen Optionsfelder auf den Statuswert gesetzt werden müssen.

Und was heißt "Im Hintergrund"?
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 15:38:03
Hallo,
Dein Vorhaben ist in dieser Form schlichtweg unmöglich. Mit dem Klick in das Ja/Nein Feld setzt Du ja direkt das Feld "Teststatus" des Datensatzes der den Fokus hat.
Das Ja/Nein Feld gibt es aber nicht in der Tabelle also muss es ungebunden bleiben, was dann in allen Datensätzen angezeigt wird.

Du musst Dir eine andere Vorgehensweise überlegen, so geht es definitiv nicht.

Du kannst eine Optiongruppe verwenden wie von crystal vorgeschlagen oder Du verwendest ein Kombinationsfeld für den Status. Mit dem Ja/Nein Feld geht es jedenfall nicht.
Ich habe Dein Beispiel mal mit der Optionsgruppe erweitert und angehängt.

Ist der Status eigenlich nur die Zahl, oder gibt es auch einen Text zum Status ?
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: crystal am August 13, 2020, 15:46:23
@MzKlMu
Ja genau: WENN das Feld gebunden ist...

Ungebundene Felder werden in Access leider (nach Änderung) in allen DS des Endlos- oder Listen-Formulars dargestellt.
Das betrachte ich weiterhin als Bug in Access (oder zumindest als nicht durchdachte/inkonsequente Implementierung), zumal es keine Möglichkeit gibt, explizit nur den einen (von mehreren) dargestellten Datensätzen zu referenzieren (z. B. durch Me oder ActualRecord oder sowas. Access trennt hier m. E. nicht sauber und wendet Änderungen, die in einer einzelnen Instanz eines Endlos-Formulars gemacht werden, ungewollt und unerwartet auf alle Instanzen an. Wenn das kein Bug ist...

Gruß,
crystal
Gruß,
crystal
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: MzKlMu am August 13, 2020, 15:59:48
Hallo,
@crystal
In einem Endlosformular gibt es die Steuerelelement nur 1x, die werden nur entsprechend der Datensatzzahl mehrfach dargestellt. Wenn nun ein ungebundenes Feld eingefügt wird, so hat das ja keinen Bezug zu einem Datensatz und muss demzufolge in allen Zeilen den gleichen Inhalt zeige. Das ist völlig logisch und ist mit Sicherheit kein Bug.
Wenn Du in einem ungebunden Feld Änderungen machts, werden diese niemals auf Datensätze angewendet, das ist einfach unmöglich.
dolpho setzt ja mit dem ungebunden Hakenfeld ein ganz anderes gebundenes Feld des Datensatzes der den Fokus hat, also dort wo der Haken geklickt wird. Das Verhalten des Ja/Nein Feldes ist völlig logisch und richtig und kein Bug. Der vorgesehene Ablauf ist falsch und muss angepasst werden.
Du hast ja mit dem Hinweis auf die Optionsgruppe schon einen Weg aufgezeigt.
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: DF6GL am August 13, 2020, 16:08:10
Hallo,

ich will nicht auch noch ellenlange Blogs hier animieren, aber:

Zitat von: undefinedUngebundene Felder werden in Access leider (nach Änderung) in allen DS des Endlos- oder Listen-Formulars dargestellt.

Ungebundene Steuerelemente zeigen das an, mit dem sie initialisiert werden/wurden. Anzeige-Änderungen können nicht passieren, weil niemand "da" ist, der die Anzeigewerte beeinflusst.  Und das ist kein Fehler, sondern logische Konsequenz des Entwicklungskonzepts.  Wenn in einem Endlosform ein ungebundenes Steuerelement im Detailbereich (!) steht, dann existiert dieses Steuerelement insgesamt nur einmal, obwohl es bei/mit jedem DS angezeigt wird, also lediglich Klone seiner selbst darstellt.


Zitat von: undefinedDas betrachte ich weiterhin als Bug in Access

Das kannst Du schon so betrachten, ist aber eher die Ignoranz der Access-Funktionalität, bzw. Spezifikationen.


Zitat von: undefinedAccess trennt hier m. E. nicht sauber und wendet Änderungen, die in einer einzelnen Instanz eines Endlos-Formulars gemacht werden, ungewollt und unerwartet auf alle Instanzen an

Quatsch. 

Zitat von: undefinedDatensätzen zu referenzieren

Derjenige Datensatz ist referenziert, der den Fokus besitzt. Wenn ein anderer DS im Formular angesprochen werden soll, muss der Focus auf den entspr. gesetzt werden oder man bemüht das Form-Recodset(clone), um Datenänderungen an bestimmter Stelle zu erreichen.



Das soll jetzt aber jetzt reichen..

Ich empfehle eh, solche Grundsatzdiskussionen in Zukunft in der Rubrik "Smalltalk" zu führen...
Titel: Re: Optionsfeld in Listenansicht des Formulares
Beitrag von: dolpho am August 14, 2020, 07:22:20
Guten Morgen zusammen,
vielen Dank für die eifrige Diskussion, die ich hier entfacht habe.
Das Steuerelement Optionsgruppe war mir bisher nicht geläufig, dazu arbeite ich einfach zu wenig an der Erstellung von Datenbanken.
Dieses genügt aber meinen Ansprüchen und ich werde das Beispiel von Klaus (Vielen Dank dafür!) für meine Zwecke einsetzen.
Viele Grüße aus Mittelfranken
Dolpho