Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: PeteTheBeat am Juni 23, 2026, 08:10:04

Titel: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: PeteTheBeat am Juni 23, 2026, 08:10:04
Moin ,

Ich möchte gerne ein Formular, zur Auftragsannahme, erstellen, indem eine Laufende generiert wird.
Ich habe folgendes Video gefunden.
https://www.youtube.com/watch?v=2ARUBZxtMcE

Ich möchte aber aus einem Menü "Auftragsannahme" anklicken und ein Formular öffnen und nicht in einem bestehenden Formular einen neuen Datensatz anfügen.

Ich hoffe es wird deutlich was ich möchte   :-[
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: Knobbi38 am Juni 23, 2026, 09:40:55
Zitat von: PeteTheBeat am Juni 23, 2026, 08:10:04Ich möchte aber aus einem Menü "Auftragsannahme" anklicken und ein Formular öffnen und nicht in einem bestehenden Formular einen neuen Datensatz anfügen.
Hört sich ein bißchen widersprüchlich an. Was soll denn mit dem geöffneten Formular passieren, wenn kein neuer DS angefügt werden soll?

Für eine lfd. Nummern kannst du ein Feld in einer Tabelle heranziehen, welches dann ausgelesen, geändert und wieder zurückgeschrieben wird.

Knobbi38
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: Bitsqueezer am Juni 23, 2026, 09:47:52
Hallo,

Du kannst ein Formular so aufrufen:
docmd.OpenForm "frmAuftrag",DataMode:=acFormAdd
Das Formular setzt Du auf die Datenquelle, wie üblich. Mit "acFormAdd" wird das Formular zur Eingabe eines neuen Datensatzes geöffnet.

Die laufende Nummer solltest Du erst beim Speichern vergeben, also in Form_BeforeUpdate, weil das unmittelbar vor dem Speichern aufgerufen wird. Wenn Du die Nummer schon beim Öffnen des Formulares generierst, könnte ein 2. User die gleiche Nummer bekommen, wenn er das macht, bevor Du Deinen Datensatz gespeichert hast.

Gruß

Christian
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: PeteTheBeat am Juni 23, 2026, 11:48:41
Zitat von: Bitsqueezer am Juni 23, 2026, 09:47:52Hallo,

Du kannst ein Formular so aufrufen:
docmd.OpenForm "frmAuftrag",DataMode:=acFormAdd
Das Formular setzt Du auf die Datenquelle, wie üblich. Mit "acFormAdd" wird das Formular zur Eingabe eines neuen Datensatzes geöffnet.

Die laufende Nummer solltest Du erst beim Speichern vergeben, also in Form_BeforeUpdate, weil das unmittelbar vor dem Speichern aufgerufen wird. Wenn Du die Nummer schon beim Öffnen des Formulares generierst, könnte ein 2. User die gleiche Nummer bekommen, wenn er das macht, bevor Du Deinen Datensatz gespeichert hast.

Gruß

Christian


Vielen Dank für deine ausführliche Antwort.
Wo setze ich "acFormAdd" ein ?

Dein Tipp des mit der Vergabe beim Speichern ist einleuchtend.
Sicherlich muss ich alles in VBA lösen oder?
Wie generiere ich denn das Hochzählen der Auftragsnummer ?

Späten möchten wir, optional, die Möglichkeit haben, mit dem Speichern des Austrags diesen Auszudrucken. 
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: Beaker s.a. am Juni 23, 2026, 12:14:43
ZitatWie generiere ich denn das Hochzählen der Auftragsnummer ?
DMax("AuftragsNr", "Auftragstabelle") + 1
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: Bitsqueezer am Juni 23, 2026, 13:31:44
Hallo,

Du hast doch von "Aufruf über ein Menü" gesprochen. Da gehe ich davon aus, daß Du weißt, wie man ein Menü programmiert und wie man eine Aktion bei Auswahl eines Menüeintrags ausführt.

Und dann gibt es nur die oben gezeigte Codezeile zu verwenden. Und ja, wenn unsereiner von "Programmieren" spricht, geht es immer um VBA.

Wie öffnest Du denn sonst Formulare über Menüs?

Gruß

Christian
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: PeteTheBeat am Juni 24, 2026, 13:35:40
Zitat von: Beaker s.a. am Juni 23, 2026, 12:14:43
ZitatWie generiere ich denn das Hochzählen der Auftragsnummer ?
DMax("AuftragsNr", "Auftragstabelle") + 1

Ich habe es folgendermaßen angelegt.
DMax "Laufendenr", "tbl_Abholungen_Main" = "Laufendenr", "tbl_Abholungen_Main" + 1
Leider bekomme ich einen Fehler
Laufzeitfehler 13
Typen unverträglich

Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: PeteTheBeat am Juni 24, 2026, 13:51:01
Zitat von: Bitsqueezer am Juni 23, 2026, 13:31:44Hallo,

Du hast doch von "Aufruf über ein Menü" gesprochen. Da gehe ich davon aus, daß Du weißt, wie man ein Menü programmiert und wie man eine Aktion bei Auswahl eines Menüeintrags ausführt.

Und dann gibt es nur die oben gezeigte Codezeile zu verwenden. Und ja, wenn unsereiner von "Programmieren" spricht, geht es immer um VBA.





Wie öffnest Du denn sonst Formulare über Menüs?

Gruß

Christian


Ich habe jetzt ein Schaltfläche angelegt, die das Formular öffnet.
Klappt .

Private Sub Befehl0_Click()

DoCmd.OpenForm "frm_Auftragserfassung", DataMode:=acFormAdd

DMax "Laufendenr", "tbl_Abholungen_Main" = "Laufendenr", "tbl_Abholungen_Main" + 1
End Sub

Leider bekomme ich einen Fehler
Laufzeitfehler 13, Typen unverträglich

Wie ist der Schritt die "neue" Laufendenr im Formular anzeigen zu lassen und dann beim Speichern erst zu vergeben, um das von dir angesprochenen Problem der 2 User zu vermeiden.
Titel: Re: Formular öffnen und dabei Laufende-Nummer generieren
Beitrag von: Bitsqueezer am Juni 24, 2026, 16:59:02
Hallo,

DMax ist keine Anweisung, sondern eine Funktion, die Dir einen Wert zurückliefert.
Beaker hat Dir oben ja bereits die korrekte Syntax gezeigt (wobei dann noch die Zuweisung des Ergebnisses an das betreffende Feld fehlt).

Das wäre dann:
Me.LaufendeNr = DMax("LaufendeNr", "tbl_Abholungen_Main") + 1
Wobei "LaufendeNr" das Control (z.B. Textbox) ist, die i.d.R. anders heißen sollte als das Feld, also etwa "ctl_LaufendeNr" und entsprechend beim "Me." anzupassen.

Angezeigt wird die Nummer nicht, wenn Du das, wie beschrieben, in Form_BeforeUpdate so zuweist.
Erst, wenn der Datensatz gespeichert wird, aber nicht zum Zeitpunkt, wo der User das Formular aufruft und befüllt.
Aber genau so soll es ja auch sein und für den User ist die laufende Nummer zum Ausfüllen des Formulares ohnehin bedeutungslos.

Die Zuweisung mit DMax erfolgt also im aufgerufenen Formular "frm_Auftragserfassung" in Form_BeforeUpdate, im Button-Click hat sie nichts zu suchen.

Gruß

Christian