Access 2010 Abfrage als Kontrolle für weiteren verlauf auf dem Formular

Hallo, ich komme an dieser stelle irgendwie nicht weiter …

ich habe ein Formular wo ich Mitarbeitern eine Schulung zuweise, Beispiel:
ich gehe auf das Formular, gebe den Mitarbeiter (cbo_mitarbeiter) an, dann die Schulung und nach der Auswahl der Schulung (cbo_schulung) soll geprüft werden ob es einen Mitarbeiter gibt, der dieselbe Schulung schon absolviert hat und dabei einen Iststatus von „4“ hat (4 bedeutet das Mitarbeiter Trainererlaubnis für diese Schulung hat). Wenn es aber keine Person gibt die solch einen Iststatus für diese Schulung hat soll eine Meldung kommen,
MsgBox „Es sind keine Trainer für diese Schulung vorhanden“
Wie kann ich das jetzt realisieren? Indem ich eine Ereignisprozedur bei Fokusverlust erstelle oder kann ich das auch mittels einer weiteren Abfrage lösen?
Eine Abfrage zur Überprüfung welche Personen für die ausgewählte Schulung eine Trainererlaubnis (IstStatus = 4) haben, habe ich schon fertig, funzt auch prima an einer anderen Stelle in der DB, aber wie soll ich das dann mit der MsgBox lösen?
Wie ihr wahrscheinlich merkt bin ich nicht ganz ein Ass in Access
(noch ziemlich Neuland für mich), deshalb würde ich mich über Unterstützung oder Lösungsansätze sehr freuen. Wenn es noch Unklarheiten gibt stelle ich euch weitere Infos gern zur Verfügung.

Netten Gruß aus dem regnerischen Berlin
Fizzo361

Ohje… ich komme einfach nicht vorran, jetzt kam mir nur noch die idee das ich das auch über einen Button überprüfen kann, ob es eine Person für die ausgewählte Schulung mit IstStaus 4 gibt.

wie könnte man den das realisieren?

Mfg

Fizzo361

Ohh ich hab da nochwas :smiley: vieleicht gehts es damit noch besser bzw einfacherer?

sql= SELECT tbl_mitarbeiter.Mname, tbl_schulung.lfdnr,
tbl_conn_mitarbeiter_schulung.tbl_iststatus
FROM tbl_schulung INNER JOIN (tbl_mitarbeiter INNER JOIN
tbl_conn_mitarbeiter_schulung ON tbl_mitarbeiter.pnr =
tbl_conn_mitarbeiter_schulung.tbl_mitarbeiter) ON tbl_schulung.lfdnr =
tbl_conn_mitarbeiter_schulung.tbl_schulung
WHERE (((tbl_schulung.lfdnr)=[Forms]![frm_schulungszuweisung_zwei]!
[txt_schulung]) AND ((tbl_conn_mitarbeiter_schulung.tbl_iststatus)=4));

If IsNull (sql) Then
MsgBox „Keine Trainer für diese Schulung vorhanden“
Else

End If

Wenn ich solch einen Code auf einen Button lege, könnte es doch gehen oder?
Bin mir aber wie ihr merkt sehr unsicher :-S

Ich hoffe ihr könnt mir helfen, ich steh momentan echt auf dem Schlauch

Mfg

Fizzo361

Grüß Gott,

ja, es gibt etwas besseres: DLOOKUP

Schau dir den Syntax in der Hilfe an und nutze die Funktion für dein Zwecke.

Grüße aus München
Wolfgang
(Netwolf)

Hallo Wolfgang, vielen dank für eine antwort, ich hab mich mal dadran versucht es mit der Dlookup funktion zulösen, doch habe ich einige Probleme dabei, evtl könntest du mir da noch etwas weiter helfen?

was ich probiert habe und nicht funzt, es hat keinerlei auswirkung auf das Programm -.-* :
Dim schulung As String
Dim bla As String
schulung = Me!cbo_schulung

If IsNull(bla = DLookup(„tbl_iststatus“, „tbl_conn_mitarbeiter_schulung“, „[tbl_schulung = schulung]“)) Then
MsgBox „Kein Trainer vorhanden“
End If

Beispiel tabelle „tbl_conn_mitarbeiter_schulung“
nr ; tbl_mitarbeiter ; tbl_schulung ; … tbl_iststatus
1 ; 786615 ; EDV ; 2
2 ; 361 ; Pollieren ; 4
Formular beispiel:
cbo_mitarbeiter ; cbo_schulung ; datum ; klick auf btn checkliste
555 ; EDV ; heute ; MsgBox kein Trainer ;
666 ; Pollieren ; heute ; öffne checkliste,

Und die Dlookup funktion würde ich dann als Ereignis für einen Fokusverlust nehmen.

Aber mit der Dlookup funktion tue ich mich etwas schwer, wäre super wenn du Wolfgang mir nochmal helfen könntest bei der bildung der Dlookup anweisung.

vielen dank im vorraus und Gruß aus Berlin

Fizzo361

Hmm also ich komm damit irgendwie nicht klar …
jetztz habe ich eine neue Abfrage erstellt die nur daten enthält welcher auch zulässig sind d.h
schulungen wo es auch Personen zu gibt die einen Iststatus von 4 haben,
jetzt müsste man doch auch mit Dlookup funktion überprüfen können ob cbo_schulung inhalt in der abfrage vorkommt wenn ja alles schick wnen nciht dann MSgBox

Abfrage Aufbau (qry_checklisten-check):
tbl_schulung; iststatus (=4)
EDV;4
Pollieren;4

jetzt meine Dlookup dazu:
Dlookup („tbl_schulung“, „qry_checklisten-check“,"tbl_schulung= ’ " &Me!cbo_schulung " ’ ")

klappt aber nicht was ist da falsch?

vielen dank im vorraus

Mfg und einen netten Gruß

Fizzo361

Grüß Gott,

klappt aber nicht was ist da falsch?

lass uns mal analysieren was da falsch läuft…

Syntax:
Dim Ergebnis

Ergebnis = Dlookup(„Bezeichnug eines Tabellenfeldes“,„Bezeichnug der Tabelle“,„Kriterium“)

D.h. als Ergebnis erhältst du einen Wert aus „Bezeichnug eines Tabellenfeldes“ wenn das Kriterium erfüllt ist. Frage: willst du das?
oder
willst du einfach nur feststellen, ob die Anzahl der Datensätze deiner Abfrage > 0 ist?

In dem Fall musst du eine andere DOMÄNEN-Agregat -Funktion verwenden: Dcount

Deine Namensgebung verwirrt zusätzlich. TBL_XXXXX ist der Name der Tabelle. FLD_XXXX ist der Name eines Feldes. Da du nur TBL_ verwendest ist nicht ersichtlich was nun Tabelle und Feld ist.

Meine Empfehlung wäre z.B. folgender Code:

If dcount(„meinXbeliebigesFELD“,„die Tabelle“,"[prüfFeld] = 4") = 0 then msgbox „Kein Trainer“

Ja, nur eine Zeile Code reicht :smile:

Wenn du als Kriterium ein Feld auf dem Formulat (ME) nutzen willst:
If dcount(„meinXbeliebigesFELD“,„die Tabelle“,"[prüfFeld] = " & ME.FormFeld & „“) = 0 then msgbox „Kein Trainer“

Bitte bedenke, dass der Wert eine Zahl sein muss. Mit Textinformationen funktioniert die Formel nicht.

Grüße aus München
Wolfgang
(Netwolf)

1 Like

Hallo Wolfgang, riesen dank für deine Erklärung, hat mir die Access Welt etwas verständlicher gemacht :smiley:
ich habs nun seit zwei Tagen mit deinen Ansätzen probiert und probiert und bin wirklich solangsam am verzweifeln -.-* wäre dies nicht so wichtig für mein Chef würde ich die aufgabe ja gern überspringen aber fehlanzeige :smiley:

So was hab ich getan:
Ich hab mir deine vorschläge angeguckt und auch nachvollzogen allerding ließ sich es nicht direkt auf mein problem anwenden, da ich nämlich eine etwas andere überprüfung benötige, also als ich nach ein paar Tagen nicht vorran kam hab ich es mir anders überlegt anhand deiner beispiele.

Nun habe ich eine Abfrage qry_checklisten_check erstellt die wiefolgt aufgebaut ist:
tbl_schulung | tbl_iststatus |
AS008|________4____ |’ ich weiß die Felder heißen zwar tbl, das ist aber aufgrund
BE361|________4____ |’ der Beziehungen und meiner vorarbeiterin zuruckzuführen,
BC204|________4____ |’ is nicht schlimm es handelt sich hier um Felder!

Jetzt nochmal den Formular Aufbau:
cbo_mitarbeiter -> klick -> auswahl -> klick ins cbo_schulung -> auswahl ->
Klick ins nächste auswahlfeld also „lost Focus“ ->…

Lost Focus:
If DCount(„tbl_iststatus“, „qry_checklisten-check“, "[tbl_schulung] = " & Me.cbo_schulung & " ") = 0 Then
MsgBox „Kein Trainer“
End If

Ich habe es in den Unterschiedlichsten varianten probiert nichts will so recht. offt erscheinen Laufzeitfehler…

Es muss nur überprüft werden ob die auswahl in cbo_schulung auch in der qry_checklisten_check auftaucht wenn ja super es ist ein Trainer vorhanden, wenn nicht dann MSGBOX.

Wolfgang ich würde mich sehr freuen wenn du dir nochmal die zwei Minuten Zeit für mich nimmst und mir letzmalig zuhilfe kommen könntest :smiley:

Vielen dank dir/euch und bis bald

Mfg Fizzo361

Hallo, ich hab es doch noch hinbekommen :smiley:
Code:
Dim pruef As Double
Dim schulung As String
schulung = Me!cbo_schulung
pruef = DCount("*", „[qry_checklisten-check]“, „[tbl_schulung] = '“ & schulung & „’“)
If (pruef) = 0 Then
MsgBox „Es ist kein Trainer für diese Schulung vorhanden“
End If

vielen dank an Wolfgang, das du dir Zeit dafür genommen hast und vielen dank für deine Tipps und bis zum nächsten mal :smiley:

Mfg
Fizzo 361