Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Francz am Januar 27, 2022, 11:10:28

Titel: Dateneingabe prüfen
Beitrag von: Francz am Januar 27, 2022, 11:10:28
Hallo Forum,

Ich stehe mit der Prüfung einer Dateneingabe auf dem Schlauch. Hier die Ausgangslage meiner Schlüsselverwaltung:

In einer Tabelle "Plomben" werden die Schlüsselplomben mit allen Details und einer Plombennummer gespeichert. Ein Teil der Schlüssel befindet sich in einem Schlüsselkasten, andere wiederum in Servicefahrzeugen. Für die Servicefahrzeuge muss ich jede Woche eine Inventur erstellen. Ich habe dies folgendermassen lösen.

Die Plomben des entsprechenden Fahrzeuges liste ich mit einer Abfrage und Unterformular auf. Die Plomben werden physisch mit Handscanner gescannt. Hierfür habe ich eine Tabelle erstellt, wo der Scann eingelesen wird. Die Daten (temporär) werden nach der Inventur jeweils wieder gelöscht. Die Tabelle der gescannten Plombe gebe ich ebenfalls in einem Unterformular aus. Der Vergleich der Eingabe mit dem Bestand funktioniert mit einer "formatierten Bedingung" bestens (grün wenn gescannte Nummer gefunden).

Obwohl es nicht vorkommen sollte, könnte ein Schlüssel in ein Fahrzeug gegeben worden sein, aber in der Datenbank nicht entsprechend zugeordnet worden ist. Ich möchte also prüfen, ob die gescannte Plombe in der ausgegebenen Liste des entsprechenden Fahrzeuges vorhanden ist und wenn nicht vorhanden, dann eine Message "Plombe nicht vorhanden" ausgegeben wird.

If PlombenNo (Abfrage X) <> Plombennummer (Abfrage Y) then
MsgBox("Plombe nicht vorhanden")
Else
??? requery?

Ist es möglich, das wenn ich in einem Feld die Plombennummer eingegeben habe, die Nummer mit den Nummern in der Abfrage verglichen wird, bevor diese in die Tabelle geschrieben wird?

Ich habe Ähnliches im Forum nachgelesen, komme aber mit dem Code nicht weiter.

Vielen Dank für die Hilfe.
Titel: Re: Dateneingabe prüfen
Beitrag von: ebs17 am Januar 27, 2022, 11:24:47
Deine Inventurliste ist eine Tabelle.
Die Informationen, ob die Schlüssel am Fahrzeug oder im Schlüsselkasten liegen, liegen ebenfalls in einer Tabelle/Abfrage.

Tabellen kann man leicht gegeneinander vergleichen und dabei Inkonsistenzen herausfinden, und zwar gleich über alles:
Datensätze aus A, die nicht in B sind (https://www.donkarl.com?FAQ3.16)
Das Ergebnis könnte man dann unmittelbar in einem (Unter)Formular oder Listenfeld anzeigen.
Titel: Re: Dateneingabe prüfen
Beitrag von: Francz am Januar 27, 2022, 12:05:43
Vielen Dank Ebs17!

Habe mit einer Inkonsistenz-Abfrage die Tabelle der gescannten Plomben mit der Abfrage der Plomben des Fahrzeugs verglichen und konnte so die nicht vorhandenen Plombennummern rausfiltern. Da hätte ich ja selbst draufkommen sollen :-)

Jetzt muss ich nur noch ein VBA zusammenbauen, welches mir eine Mitteilung ausgibt, dass die erfasste Plombennummer in der Liste des Fahrzeug nicht vorhanden ist. VBA ist leider "noch nicht" meine Stärke.

Ich habe nun den Wert der gescannten und nicht vorhandenen Probenmnummer in der Inkonsistenz-Abfrage. Wie gebe ich nun jetzt die Meldung aus, dass dass dieser Wert nicht vorhanden ist? Hättest Du da einen Tipp?
Titel: Re: Dateneingabe prüfen
Beitrag von: ebs17 am Januar 27, 2022, 12:37:23
Wertausgabe in Meldung:
Dim sValue As String
sValue = Nz(DLookup("Wertfeld", "NameAbfrage"), "")
If Len(sValue) > 0 Then
   MsgBox "Wert " & sValue & " fehlt."
Else
   ' Meldung ok
End If
Dlookup gibt aber nur einen Wert zurück, auch wenn in der Abfrage mehrere vorhanden sind.

Sinnvoller würde man das gesamte Ergebnis einer Anzeige zuweisen (den Zustand, wenn nichts fehlt, erkennt man am leeren Recordset auch sehr gut) und damit gleich einer Folgeverarbeitung anzubieten, z.B.
FormObject.RecordSource = "NameAbfrage"
Titel: Re: Dateneingabe prüfen
Beitrag von: Francz am Januar 27, 2022, 16:59:38
Hallo Eberhard,

Der Code funktioniert - teilweise. Ich erhalte jedoch nach jeder Eingabe die Meldung mit der eingegebenen Plombenummer zurück, auch wenn diese effektiv vorhanden ist. Nach Bestätigung der Mitteilung wird die Eingabe dann aber richtig in die Tabelle geschrieben und beide Felder sind dann wie gewünscht grün unterlegt.

Fei falscher Eingabe erhalte ich die Meldung ebenfalls, aber die Eingabe wird nur in meiner "temporären" Tabelle geschrieben (welche ich ja später wieder lösche). Das Feld ist dann für eine neue Eingabe wieder leer.

In der Abfrage, auf welche sich mein Vergleich bezieht, werden die falschen Werte richtigerweise nicht angezeigt.

Ich habe den Code in einem Feld nach der Aktualisierung eingebunden. Richtig?

Wie kann ich diesen anpassen, dass wenn die richtige Plombennummer eingeben wird, keine Messagebox erscheint, also nur dann, wenn die Eingabe eine Nummer enthält, welche nicht vorhanden ist?

Vielen Dank!!!

Titel: Re: Dateneingabe prüfen
Beitrag von: ebs17 am Januar 27, 2022, 17:19:16
Bezugnehmend auf Deine Prosa erwartest Du jetzt einen konkreten Hinweis, so wie scharfe Schüsse in den Nebel?
Titel: Re: Dateneingabe prüfen
Beitrag von: Francz am Januar 31, 2022, 17:24:51
Ja Eberhard, mit Prosa kommen wir nicht weiter. Sorry!

Hier mein Code. Funktioniert wie ich es eigentlich wollte.

Private Sub PlombenNo_AfterUpdate()
If DCount("Plombennummer", "Abfrage Vergleich Plombennummern", "Plombennummer = '" & Me!PlombenNo.Text & "'") > 0 Then
DoCmd.GoToRecord , , acNewRec
Forms![Inventar FZ Plomben]![Unterformular FZ Inventar].Form.Requery
Else
MsgBox "Plombe in der Vorgabe nicht vorhanden. Bitte kontrollieren!"
End If
End Sub

Vielen Dank. Problem soweit gelöst. Vielleicht gibt es einen einfacheren Weg?

Grüsse aus der Schweiz.