Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen

Begonnen von TomH, November 18, 2019, 22:33:23

⏪ vorheriges - nächstes ⏩

TomH

Ich grüße Euch;

ich habe ein kleines Problem:
ich habe ein Formular und eine Tabelle. (Sind auch miteinander durch eine Anfügeabfrage verknüpft)
Ich möchte in einem Textfeld eine Eingabe machen (nur Zahlen). Jetzt soll wenn ich das Textfeld verlasse, die Meldung kommen, wenn die Nummer bereits vorhanden ist.
(Vielleicht auch schon die Meldung während der Eingabe)

Beispiel der Tabelle und Formular:
tbl_Dozenten
ID:
Dozenten_Nummer:

frm_Eingabe
Dozenten_Nummer


so versuche ich es im Moment:

Private Sub Dozenten_Nummer_AfterUpdate()
If DCount("*", "tbl_Dozenten", "[Dozenten_Nummer]='" & Me!Dozenten_Nummer & "'") > 0 Then
        MsgBox " Dozent schon vorhanden"
        Cancel = True
        Me!Dozenten_Nummer.Undo
    End If
End Sub


Ich muß dazu sagen, das ich ein Neuling bin und mit Hilfe des Internets es versuche.

MzKlMu

#1
Hallo,
AfterUpdate ist zu spät, da ist schon gespeichert. Außerdem hat AfterUpdat keinen Cancel Parameter. Cancel kann nur verwendet werden wenn es auch im Ereignis vorhanden ist.
Weiterhin ist die Dozenten_Nummer ja wahrscheinlich eine Zahl. Dann entfallen die Hochkomma. Während der Eingabe ist nicht möglich, denn es muss ja klar sein, wenn die Nummer vollständig ist. Also ein Abschluss (Enter) der Eingabe wird benötigt.
Und wenn das die ID sit, so sollte diese zum Primärschlüssel werden. Dann ist es technisch gar nicht mehr möglich die Nummer doppelt zu vergeben. Unabhängig davon, kannst Du trotzdem prüfen.
Private Sub Dozenten_Nummer_BeforeUpdate(Cancel As Integer)
    If DCount("*", "tbl_Dozenten", "[Dozenten_Nummer]=" & Me!Dozenten_Nummer) > 0 Then
        MsgBox " Dozent schon vorhanden"
        Cancel = True
        Me!Dozenten_Nummer.Undo
    End If
End Sub


Was willst Du hier mit einer Anfügeabfrage ?
Verwendest Du kein gebundenes Formular ?
Wenn nein, warum nicht ?
Ein ungebundenes Formular ist doch viel aufwendiger.

PS:
Verwende in jedem Modulkopf die Zeile Option Explicit.
Option Compare Database
Option Explicit

Dann würde VBA den falschen Parameter Cancel anmeckern.
Gruß Klaus

TomH

Vielen Dank für die Antwort und die Lösung. Es klappt Prima!!! :)

Ich habe eine Anfügeabfrage gemacht, weil ich die Eingaben vom Formular in eine Tabelle übergeben möchte.

Eine Frage habe ich aber noch:
Kann ich in der Message Box auch den Namen aus der Tabelle holen? Jetzt wird ja nur gesagt das der Dozent schon vorhanden ist.

Grüße TomH

MzKlMu

Hallo,
Zitat...  weil ich die Eingaben vom Formular in eine Tabelle übergeben möchte.
Dazu braucht es keine Anfügeabfrage. Wenn das Formular an die Tabelle (über eine Auswahlabfrage keine Anfügeabfrage) gebunden wird, wird automatisch in der Tabelle gespeichert. Die Anfügeabfrage ist ersatzlos überflüssig, verkompliziert nur, sonst nix.
ZitatKann ich in der Message Box auch den Namen aus der Tabelle holen?
Ja, versuche es so (ungetestet), Feldname für den Dozenten anpassen.
MsgBox "Der Dozent " & DLookup("Dozentname", "tbl_Dozenten", "[Dozenten_Nummer]=" & Me!Dozenten_Nummer) & " ist schon vorhanden"

PS:
Ich habe meine 1. Antwort noch weiter ergänzt, bitte noch mal lesen.
Gruß Klaus

TomH

Hallo Klaus,
noch einmal danke!

was aber genau meinest du damit?

Verwende in jedem Modulkopf die Zeile Option Explicit.
Code: [Auswählen]

Option Compare Database
Option Explicit

Dann würde VBA den falschen Parameter Cancel anmeckern.

MzKlMu

Hallo,
ich meine genau was ich geschrieben habe.
Jeder VBA Code steht in einem Modul.
Und sollte das gesetzt sein.

Zu den anderen Sachen hast Du nichts zu sagen?
Gruß Klaus

TomH

#6
Hallo Klaus,

Man hatte mir mal gesagt ich soll es mit einer Abfrage machen. Nicht sofort die Tabelle ansteuern. Wäre so flexibler.
Also habe ich es so gemacht. ::)

Ob gebunden oder ungebunden.
Ich müsste mich einlesen um zu wissen was gemeint ist.  ::)

Ich hoffe ich habe jetzt auf alles geantwortet. War keine Absicht wenn es untergegangen ist.

Grüsse TomH

MzKlMu

Hallo,
Abfrage ja, das habe ich ja auch geschrieben. Aber keine Anfügeabfrage.
ZitatWenn das Formular an die Tabelle (über eine Auswahlabfrage keine Anfügeabfrage) gebunden wird, wird automatisch in der Tabelle gespeichert.
Ein gebundenes Formular hat die Tabelle (bzw. die Auswahlabfrage als Datenherkunft (Datenquelle), die Felder werden dann an die Tabellenfelder gebunden.
Mehr ist nicht zu tun.
Gruß Klaus

TomH

Ja o. k. danke,
aber was hat das eine und das andere für vor beziehungsweise Nachteile?

MzKlMu

#9
Hallo,
der Aufwand mit der Anfügeabfrage (Ungebundenes Formular) ist um ein vielfaches höher als ein gebundenes Formular zu verwenden.

Wie zeigst Du in (D)einem ungebundenen Formular einen Datensatz der schon besteht an?
Schon mal versucht ?
Gruß Klaus

TomH

Hallo,

nein habe ich noch nicht versucht.
Ich dachte, das ich bei einem ungebundenen Formular mehr Kontrolle habe. Deswegen diese Entscheidung.

Gruß TomH

MzKlMu

Hallo,
Du hast gebunden die gleiche Kontrolle, nur einfacher.
Gruß Klaus

TomH

Hallo,

o. k. dann werde ich wohl vielleicht doch mal in Zukunft es überdenken und überarbeiten.

Aber ich habe jetzt noch eine Frage:
ich habe die Message Box und das DLoopUp.
Es ist doch richtig dass ich nicht zwei Ausgaben mit einer machen kann, oder?
Und desweiteren die Frage ob ich die Message Box ohne Titel oder einem anderen Titel machen kann? Im Moment steht bei der Message Box ,, Microsoft Access"

Grüße TomH

MzKlMu

Hallo,
ZitatEs ist doch richtig dass ich nicht zwei Ausgaben mit einer machen kann, oder?
Was für 2 Ausgaben ?
Zitatob ich die Message Box ohne Titel oder einem anderen Titel machen kann?
Stelle den Cursor im VBA Code auf MsgBox und drücke F1.

Du solltest Dich mit den Grundlagen zu Access beschäftigen.
https://www.access-tutorial.de/
Gruß Klaus