Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: TomH am November 18, 2019, 22:33:23

Titel: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 18, 2019, 22:33:23
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.
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 18, 2019, 23:18:03
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.
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 18, 2019, 23:30:06
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
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 18, 2019, 23:38:35
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.
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 19, 2019, 00:00:45
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.
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 19, 2019, 00:11:22
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?
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 19, 2019, 00:30:22
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
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 19, 2019, 08:48:15
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.
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 19, 2019, 18:13:42
Ja o. k. danke,
aber was hat das eine und das andere für vor beziehungsweise Nachteile?
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 19, 2019, 19:00:59
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 ?
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 19, 2019, 20:48:02
Hallo,

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

Gruß TomH
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 19, 2019, 21:53:55
Hallo,
Du hast gebunden die gleiche Kontrolle, nur einfacher.
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: TomH am November 19, 2019, 21:59:32
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
Titel: Re: Bei eingabe im Textfeld auf vorhandenen Datensatz überprüfen
Beitrag von: MzKlMu am November 19, 2019, 23:36:00
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/