collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 69
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 1
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13952
  • stats Beiträge insgesamt: 66340
  • stats Themen insgesamt: 8940
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Kombinationsfeld  (Gelesen 168 mal)

Offline Icemann1970

  • Access-Profi
  • **
  • Beiträge: 178
Kombinationsfeld
« am: Mai 22, 2018, 18:13:32 »
Hallo zusammen...... da ist er wieder  ;D
Ich würde gerne nach Auswahl eines KombinationsfeldesA den ausgewählten Wert in KombinationsfeldB (Beide den selben Datenherkunft) nicht mehr anzeigen lassen bzw eine msgbox einblenden wollen. Private Sub Kombinationsfeld313_AfterUpdate()

If Me.KombinationsfeldB = "5000" Then
    MsgBox " Auswahl ist 5000, bitte neue Auswahl treffen"
Me.KombinationsfeldB = ""
If Me.KombinationsfeldB = [KombinationsfeldA] Then
    MsgBox "Die Auswahl wurde bereits verwendet."
Me.KombinationsfeldB = ""

End If
End If
End Sub

Die erste If - then funktioniert aber wie kann ich den ausgewählten Wert aus KombiA mit dem ausgewählten Wert aus KombiB vergleichen und eine Funktion laufen lassen ?

Gurß Udo


Mfg. Udo
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7268
Re: Kombinationsfeld
« Antwort #1 am: Mai 22, 2018, 18:44:06 »
Hallo,
was hat es mit dem festen Wert "5000" auf sich ?
Das ist doch eine Zahl, warum nimmst Du da Az (") ?

Wie hängt das mit dem Kombinationsfeld313 zusammen ?

Außerdem ist das Ereignis "Vor Aktualisierung" wahrscheinlich besser geeignet, denn Nach Aktualisierung ist zu spät, da ist der Wert bereits gespeichert und müsste ggf. wieder gelöscht werden.

Bitte erkläre das Vorhaben mal im Gesamtzusammenhang.
Gruß
Klaus
 
Folgende Mitglieder bedankten sich: Icemann1970

Offline Icemann1970

  • Access-Profi
  • **
  • Beiträge: 178
Re: Kombinationsfeld
« Antwort #2 am: Mai 22, 2018, 19:12:50 »
Hallo Klaus.
Die Schnipsel die ich aufgeführt hatte sind nur als Beispiel gedacht.
Hintergrund der Aktion ist folgendes:
Über die Kombinationsfelder kann ich Mitarbeiternamen (aus einer Tabelle) auswählen.
Jeder Tätigkeitsschritt wird von den Arbeitern mit seinem Namen ausgewählt. Es gibt Felder, die zwingend durch zwei Unabhänige Arbeiter geprüft werden müssen, deshalb möchte ich wenn in diesem Feldabschnitt der Arbeiter Meier als erster Prüfer ausgewählt ist dieser nicht nochmal als zweiter Prüfer ausgewählt werden kann.
Mfg. Udo
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7268
Re: Kombinationsfeld
« Antwort #3 am: Mai 22, 2018, 19:26:05 »
Hallo,
Du kannst zunächst mal über die beiden Felder einen eindeutigen zusammengesetzten Index legen. Damit ist es dann technisch gar nicht mehr möglich den gleichen Mitarbeiter noch mal zu speichern, das wird von Access aktiv verhindert und kann nicht überlistet werden.
Zusätzlich kannst Du in der Datenherkunft des 2. Kombis den bereits im 1. Kombi vergebenen Namen nicht mehr anzeigen und damit dessen Auswahl verhindern. Das KombiB braucht dann als Kriterium für die MitarbeiterID <>KombifeldA Dein VBA reduziert sich dann auf eine Zeile:
Me.KombifeldB.RequeryIm Ereignis "Bei Fokuserhalt" von KombiB.
Wie sehen denn die beiden Datenherkünfte (SQL) der jetzigen Kombis aus ?
« Letzte Änderung: Mai 22, 2018, 19:31:00 von MzKlMu »
Gruß
Klaus
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23314
Re: Kombinationsfeld
« Antwort #4 am: Mai 22, 2018, 19:27:36 »
Hallo,


dies  http://www.donkarl.com/?FAQ3.16   sollte helfen...

Offline Icemann1970

  • Access-Profi
  • **
  • Beiträge: 178
Re: Kombinationsfeld
« Antwort #5 am: Mai 22, 2018, 20:10:48 »
Ich habe eine Tabelle mit den Mitarbeiternamen (MitarbieterID, Vorname und Nachname) Angezeigt werden über Berechnete Felder aus (Vor und Zuname). Nach Auswahl wird das Gebunden Kombifeld gespeichert.
@Klaus: Die Richtung vor Aktualisierung war richtig, msgbox meldet aber das Feld wird nicht leer.Private Sub Kombinationsfeld313_BeforeUpdate()

If Me.KombinationsfeldB = [KombinationsfeldA] Then
    MsgBox "Die Auswahl wurde bereits verwendet."
End If

End Sub

Wenn ich nun Private Sub Kombinationsfeld313_BeforeUpdate()

If Me.KombinationsfeldB = [KombinationsfeldA] Then
    MsgBox "Die Auswahl wurde bereits verwendet."
    Me.KombinationsfeldB =""
End If

End Sub
Meldung von Access kommt " ...... vor Aktualisierung oder Gültigkeitsregel festgelegt ist, hindert MS Access daran, die Daten im Feld zu speichern" ... Soll es ja auch nicht, stattdessen entweder das Kombifeld wieder aufklappen oder auf ein anderes Feld ein Focus setzen wenn es nicht anders geht.
P.s.: Meldung kommt auch wenn ich direkt versuche den Focus auf ein anders Feld zu setzen
.......
@ Franz... Hallo, danke für den Tip von Donkarls aber ich habe ja nur eine Tabelle mit den Mitarbeiternamen.
Mfg. Udo
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1226
Re: Kombinationsfeld
« Antwort #6 am: Mai 22, 2018, 20:39:13 »
Wenn das in einem Datensatz stattfindet, kann weder ein eindeutiger Mehrfachindex, noch die FAQ 3.16 helfen, denn der Index könnte nur unterbinden, dass eine Prüferkombination in mehreren Datensätzen die gleiche ist, was vermutlich nicht der Anforderung entspricht.

Und mit der FAQ 3.16 lässt sich nur etwas prüfen, was auch bereits gespeichert ist.
Eine Gültigkeitsregel in der Tabelleneigenschaft [FeldA] <> [FeldB] sollte bei zwei Pflichtfeldern zumindest schon einmal das Speichern verhindern. Sind beide Felder nicht obligatorisch, so ist die Prüfung zu erweitern: ([FeldA] <> [FeldB]) Or [FeldA] Is Null Or [FeldB] Is Null

Angenommen, es gibt die Tabelle
Mitarbeiter
MitarbeiterIdVornameNachname
1HansWurst
2RainerZufall
3ErikaSchmalz
4KlausKluge
und eine Tabelle mit den Feldern: id, a und b. Die letzten beiden Felder stellen jeweils einen Fremdschlüssel zur erstgenannten Tabelle dar und werden in einem Formular durch gleichnamige Kombifelder angezeigt. Folgender Code im Formular-Klassenmodul könnte dann der Anforderung genüge leisten.
Option Compare Database
Option Explicit

Private Const Q1 As String = "SELECT MitarbeiterId, Nachname FROM Mitarbeiter;"
Private Const Q2 As String = "SELECT MitarbeiterId, Nachname FROM Mitarbeiter" & vbLf & _
                             "WHERE  MitarbeiterId <> [@AndereMitarbeiterId];"

Private Sub SetzeMitarbeiterKombi(AktuellerKombiName As String, AndererKombiName As String)
   With DBEngine(0)(0).CreateQueryDef(vbNullString)
      If IsNull(Me(AndererKombiName)) Then
         .SQL = Q1
         Set Me(AktuellerKombiName).Recordset = .OpenRecordset(dbOpenSnapshot)
      Else
         .SQL = Q2
         .Parameters(0) = Me(AndererKombiName)
         Set Me(AktuellerKombiName).Recordset = .OpenRecordset(dbOpenSnapshot)
      End If
   End With
End Sub

Private Sub a_GotFocus()
   SetzeMitarbeiterKombi "a", "b"
End Sub

Private Sub b_GotFocus()
   SetzeMitarbeiterKombi "b", "a"
End Sub

Private Sub Form_Current()
   Dim rs As DAO.Recordset

   Set rs = DBEngine(0)(0).OpenRecordset(Q1, dbOpenSnapshot)
   Set Me.a.Recordset = rs
   Set Me.b.Recordset = rs
End Sub
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: PhilS, Icemann1970

Offline Icemann1970

  • Access-Profi
  • **
  • Beiträge: 178
Re: Kombinationsfeld
« Antwort #7 am: Mai 22, 2018, 22:49:51 »
Auch Dir Lachtaube guten Abend und Danke für die Tips. Aber ich habe es doch mit Private Sub KombinationsfeldA_AfterUpdate()


If Me.KombinationsfeldA = Me.KombinationsfeldB Then

    MsgBox "Das Gerät MUSS mit einem anderen Kollegen geprüft werden."
    Me.KombinationsfeldA = ""

End If

If Me.KombinationsfeldA = "50000" Then

    MsgBox "Bitte den richtigen Namen eingeben"
    Me.KombinationsfeldA = ""

End If

End Sub
hinbekommen.

"5000" ist ein erfundener Name
geschafft. Habe alles vor und zurück getestet und es funktioniert so.

Aber danke nochmal an alle !
Mfg. Udo