Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Kombinationsfelder sperren





Frage

Hallo Zusammen Ich habe 2 Kombinationsfelder in einem Formular Bearbeiter_Prod und Bearbeiter_Wzg Ich möchte je nach dem welches Kombinationsfeld ich aufmache das andere gesperrt wird. Wenn ich z.b Bearbeiter_Prod aufmachen will muss Bearbeiter_Wzg gesperrt sein und Umgekehrt hoffe es kann mir jemand helfen bis dann

Antwort 1 von oliverV

Hallo,

die Gesperrt-Eigenschaft kannst du in VBA mit
 
Me.Formularfeldname.Locked = True
Bzw.
Me.Formularfeldname.Locked = False

ändern.

Du musst den Code nur an ein passendes Ereignis binden, genau das ist aber das Problem, denn das Feldereignis "Aufmachen" gibt es nicht.
Außerdem macht das eh keinen Sinn, denn wenn ich [Bearbeiter_Prod] mit der Maus "aufklappe" kann ich doch sowieso nicht auf [Bearbeiter_Wzg] zugreifen, erst wenn ich eine Auswahl in [Bearbeiter_Prod] getroffen habe (das Kombifeld sich also wieder schließt) kann ich eine Auswahl in [Bearbeiter_Wzg] machen.

Schreib vielleicht mal was zu Hintergrund, was willst du damit bezwecken, vielleicht hast du den falschen Ansatz.

Gruß

Oliver

Antwort 2 von Weissnix

Der Sinn dahinter ist folgender.
Ich möchte nicht dass Mitarbeiter der Produktion
Ihren Namen in Bearbeiter_Prod und danach auch noch Mitarbeiter aus Berabeiter_Wzg auswählen können. Ist eine reine Vorsichtsmassnahme.
Ich habe folgenden Code eingegeben , das Problem da ist dass nur Mitarbeiter_Prod gesperrt sind

Dim Bearbeiter_Prod as long
Dim Bearbeiter_Wzg as long
if me!Berabeiter_Prod.gotfocus=true then
Berabeiter_Prod.enabled=true
Berabeiter_Prod.enabled=false
if me!Berabeiter_Wzg.gotfocus=true then
Berabeiter_Wzg.enabled=true
Berabeiter_Prod.enabled=false
end if
end if
end sub

Antwort 3 von francie

hallo,

ich steh selber nicht all zu tief in der Materie, aber mir fällt auf, dass du in deiner ersten if-schleife, zweimal das Feld me!Bearbeiter_PROD ansprichst...ich glaube beim zweiten mal sollte stattdessen Bearbeiter_WZG auf False gestellt werden...

gruß, francie

Antwort 4 von oliverV

Hallo,

vorausgesetzt, das du eine Einzelformularansicht hast, würde ich das Formularereignis "BeimAnzeigen" nutzen.
Desweiteren würde ich mich auf den Wert der Felder beziehen, denn wenn schon eine Auswahl in einem vorhandenen Datensatz im ersten Kombifeld getätigt wurde soll doch das zweite Kombifeld "dauerhaft" bei diesem Datensatz gesperrt bleiben.

Private Sub Form_Current()
If Not IsNull(Me.Bearbeiter_Prod) Then
Me!Bearbeiter_Prod.Locked = False
Me!Bearbeiter_Wzg.Locked = True
Else
If Not IsNull(Me.Bearbeiter_Wzg) Then
Me!Bearbeiter_Prod.Locked = True
Me!Bearbeiter_Wzg.Locked = False
Else
Me!Bearbeiter_Prod.Locked = False
Me!Bearbeiter_Wzg.Locked = False
End If
End If
End Sub


Also wenn [Prod] nicht leer ist, dann
Nur in [Prod] eine Auswahl (Änderung) zulassen
Sonst
Prüfen ob [Wzg] nicht leer ist, dann
Nur in [Wzg] eine Auswahl (Änderung) zulassen
Sonst (beide Kombifelder sind also leer)
In beiden Feldern eine Auswahl zulassen

Damit hast du die bestehenden Datensätze erschlagen.


Zusätzlich müsstest du das "NachAktualisierungs"-Ereignis der beiden Kombifelder nutzen, um die Sperrung bei einer Änderung des Feldwertes zu realisieren.

Private Sub Bearbeiter_Prod_AfterUpdate()
If Not IsNull(Me.Bearbeiter_Prod) Then
Me!Bearbeiter_Wzg.Locked = True
Else
Me!Bearbeiter_Wzg.Locked = False
End If
End Sub


Analog natürlich auch bei [Bearbeiter_Wzg].

Wenn du möchtest kannst du auch die Enabled-Eigenschaft der Felder verändern, musst dann halt nur True und False umkehren; denkbar wäre auch das Feld mit der Visible-Eigenschaft komplett auszublenden.


Gruß und schöne WE

Oliver

Antwort 5 von Weissnix

Hallo vielen Dank für die Ausführliche Beschreibung meines Problems
Ich werde dies gleich mal Testen

Schönes Weekend und THx

Antwort 6 von Hinki27

Hallo zusammen,

das Ganze ist aber blöd, wenn man sich vertippt hat, dann ist eine Änderung nicht mehr möglich. So wie es aussieht, möchtest du doch, dass entweder das eine oder das andere Kombi-Feld belegt ist. Warum lässt du
denn nicht beide Kombifelder auf Locked = false und löschst im "BeforeUpdate"-Ereignis den jeweils anderen Wert. Somit kann sich der Benutzer immer noch umentscheiden.

Private Sub Bearbeiter_Prod_BeforeUpdate()

if nz(Me!Bearbeiter_Prod)<> "" then
Me!Bearbeiter_Wzg = NULL
end if

End Sub

Entsprechend umgekehrt für das andere Kombi-Feld.


Gruß
Ralf

Antwort 7 von oliverV

@Ralf
du sagst, das eine Änderung nicht mehr möglich sei; das ist nicht richtig:
Im "richtigen" Kombifeld kann man einfach einen falsch ausgewählten Mitarbeiter korrigieren (diese Feld ist ja nicht gesperrt). Wenn man das "falsche" Kombifeld ausgewählt hat, so muss man erst mit Entf den Mitarbeiter löschen, bevor man dann im anderen Kombifeld einen anderen Mitarbeiter auswählen kann.
Dies ist mir bewusst und ist auch so gedacht, der Benutzer soll bewusst löschen, bevor er die Korrektur vornimmt.
Bei deiner Variante finde ich es unglücklich, das eine bereits getätigte Auswahl einfach so gelöscht wird, denn das ist dem Benutzter mit Sicherheit nicht bewusst, wenn er eine zusätzliche Auswahl im zweiten Kombifeld getroffen hat (wahrscheinlich wird er es nicht einmal merken).
Wenn nur ich selbst mit der DB arbeiten würde könnte ich mich damit vielleicht noch anfreunden, ich gehe aber immer davon aus, das eine DB von Dritten (Unwissenden) genutzt wird.
Das Mindeste wäre IMHO eine Sicherheitsabfrage ob der "andere" Mitarbeiter wirklich gelöscht werden soll, erst nach Bestätigung sollte dies dann durchgeführt werden.

Gruß

Oliver

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: