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 :-[
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
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
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.
ZitatWie generiere ich denn das Hochzählen der Auftragsnummer ?
DMax("AuftragsNr", "Auftragstabelle") + 1
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
Zitat von: Beaker s.a. am Juni 23, 2026, 12:14:43ZitatWie 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" + 1Leider bekomme ich einen Fehler
Laufzeitfehler 13
Typen unverträglich
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.
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