Supportnet / Forum / Datenbanken
Autowert bei Abbruch
Frage
Guten Tag liebe Access Profis,
Darstellung:
Formular "Rechnung eingeben"
Bei Aufruf wird leeres Formular gezeigt
Die Rechnungsnummer = Autowert,Primärschlüssel
Erstes Datenfeld = Kombinationsfeld zur Adresseneingaben
Zweites Feld = Tagesdatum wird autom. beim Hineingen erzeugt. (Makro)
Drittes Feld = Konditionen (Kombifeld)
Viertes Feld = Unterformular
Problem:
Öffnet der Anwender diese Formular, gibt einen Teil Daten ein und Entscheidet sich dann, das Formular zu verlassen ist dies leider möglich.
Access Fehlermeldung:
Sie können den Datensatz im Moment nicht speichern...... Möchten Sie das Datenbankobjet trotzdem schließen?
Bestätige ich jetzt mit Ja, wird kein DS gespeichter, aber die Rechnungsnummer ist vergeben. Das heißt: wird eine neue Rechnung erstellt fehlt eine Rechnungsnummer.
Ziel:
Ich möchte alle benötigten Felder auf Eingabepflicht setzen.
Grund:
Das Formular kann erst gespeichert werden, wenn alle notwendigen Felder ausgefüllt sind.
Frage:
Die Einstllung in den Tabelleneigenschaften ist mir bekannt. Was aber mache ich mit den Kombinationsfeldern, die in der Tabelle nicht auftauchen?
Oder kennen Sie eine andere Möglichkeit
zu verhindern, dass beim Abbruch automatisch Rech.Nr. erzeugt werden.
Für die Hilfe herzlichen Dank im Voraus
Ingo Neuhaus
Antwort 1 von RalfH
Hallo,
Eine Plausibilitätsprüfung würde da schon helfen, das ganze in eine Abbruch- und/oder OK Button untergebracht.
Gruß Ralf
Eine Plausibilitätsprüfung würde da schon helfen, das ganze in eine Abbruch- und/oder OK Button untergebracht.
Gruß Ralf
Antwort 2 von Marie
Versuchs mal so:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Select Case MsgBox("Daten speichern?", vbYesNoCancel)
Case vbYes
'nichts tun heisst es wird gespeichert
Case vbNo
'Änderungen werden verworfen
Me.Undo
Cancel = True
Case vbCancel
'es wird nicht gespeichert, Daten bleiben aber erhalten
Cancel = True
End Select
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Select Case MsgBox("Daten speichern?", vbYesNoCancel)
Case vbYes
'nichts tun heisst es wird gespeichert
Case vbNo
'Änderungen werden verworfen
Me.Undo
Cancel = True
Case vbCancel
'es wird nicht gespeichert, Daten bleiben aber erhalten
Cancel = True
End Select
End Sub
Antwort 3 von Ingo.
Hallo liebe Marie,
herzlichen Dank für Deinen Vorschlag.
Leider kenne ich mich mit der Programmiersprache sehr wenig aus. Habe bisher mit Makro und Ereignisprozeduren gearbeitet.
Es wäre sehr nett, wenn Du mir etwas genauer erklären könntest wie ich deinen Vorschlag anwenden soll.
Gern auch per Email.
*Threadedit* 17:25:07
Admininfo: siehe FAQ 5.
Gruß
Ingo
herzlichen Dank für Deinen Vorschlag.
Leider kenne ich mich mit der Programmiersprache sehr wenig aus. Habe bisher mit Makro und Ereignisprozeduren gearbeitet.
Es wäre sehr nett, wenn Du mir etwas genauer erklären könntest wie ich deinen Vorschlag anwenden soll.
Gern auch per Email.
*Threadedit* 17:25:07
Admininfo: siehe FAQ 5.
Gruß
Ingo
Antwort 4 von Marie
Hallo Ingo,
ich beantworte keine Fragen per E-Mail, ich bitte um Verständnis.
Eine Private Sub ist eine Ereignisprozedur und Form_BeforeUpdate heisst, dass sie ausgeführt wird vor Aktualisierung des Formulars. Also mach Dein Formular auf im Entwurfsmodus, lass Dir mit Ansicht Eigenschaften das Eigenschaftsfenster anzeigen und klicke auf Ereignis vor Aktualisierung und füge da den Code ein, Achtung erste und letzte Zeile sind dann doppelt, bitte herauslöschen.
Gruß Marie
ich beantworte keine Fragen per E-Mail, ich bitte um Verständnis.
Eine Private Sub ist eine Ereignisprozedur und Form_BeforeUpdate heisst, dass sie ausgeführt wird vor Aktualisierung des Formulars. Also mach Dein Formular auf im Entwurfsmodus, lass Dir mit Ansicht Eigenschaften das Eigenschaftsfenster anzeigen und klicke auf Ereignis vor Aktualisierung und füge da den Code ein, Achtung erste und letzte Zeile sind dann doppelt, bitte herauslöschen.
Gruß Marie
Antwort 5 von Ingo.
Hallo Marie,
wie ich bemerkt habe scheint der Email- Kontakt hier nicht erwünscht. Ist kein Problem, es klappt ja auch so hervorragend.
Herzlichen Dank für Deine letzte Info. Ich habe Deine Anweisungen befolgt und der Datensatz wir jetzt erst nach Abfrage gespeichert.
Das eigentliche Problem besteht aber weiterhin.
Wird eine Rechnung teilweise geschrieben, dann aber nicht gespeichert, ist der Autowert "Rech-Nr." vergeben.
Bei der nächsten Rechnung wird damm eine "Rech-Nr." übersprungen.
Wie kann ich verhindern, dass der Autowert gesetzt wird, wenn ich die Rechnung abbreche?
Ich hoffe, Du hast eine Idee!
Gruß
Ingo
wie ich bemerkt habe scheint der Email- Kontakt hier nicht erwünscht. Ist kein Problem, es klappt ja auch so hervorragend.
Herzlichen Dank für Deine letzte Info. Ich habe Deine Anweisungen befolgt und der Datensatz wir jetzt erst nach Abfrage gespeichert.
Das eigentliche Problem besteht aber weiterhin.
Wird eine Rechnung teilweise geschrieben, dann aber nicht gespeichert, ist der Autowert "Rech-Nr." vergeben.
Bei der nächsten Rechnung wird damm eine "Rech-Nr." übersprungen.
Wie kann ich verhindern, dass der Autowert gesetzt wird, wenn ich die Rechnung abbreche?
Ich hoffe, Du hast eine Idee!
Gruß
Ingo
Antwort 6 von RalfH
Tach
Gruß Ralf
Sub Form_BeforeUpdate (cancel as integer)
cancel = true 'Datensaetze nie speichern
End SubGruß Ralf
Antwort 7 von Ingo.
Hallo Ralf,
herzlichen Dank für Deine Idee !
Leider wird auch mit dieser Prozedur der Autowert gespeichert.
Gruß
Ingo
herzlichen Dank für Deine Idee !
Leider wird auch mit dieser Prozedur der Autowert gespeichert.
Gruß
Ingo
Antwort 8 von RalfH
Hallo,
Dann hilft das gute alte VBA.
Den Autowert kann man anstatt automatisch auch über eine VBA Routine vergeben, wobei der Wert bei einem neuen Datensatz immer einen Aufgezählt wird.
Das ganze tritt man los, bei Klick auf dem Speichern Button den man erstellt, hat, oder eben halt nicht wenn man auf den Abbruch Button geht.
Gruß Ralf
Dann hilft das gute alte VBA.
Den Autowert kann man anstatt automatisch auch über eine VBA Routine vergeben, wobei der Wert bei einem neuen Datensatz immer einen Aufgezählt wird.
Das ganze tritt man los, bei Klick auf dem Speichern Button den man erstellt, hat, oder eben halt nicht wenn man auf den Abbruch Button geht.
Gruß Ralf
Antwort 9 von Marie
Also wenn trotz
gespeichert wird, dann erstellst und soeicherst Du die Autonummer schon vorher, dann shau doch bitte mal nach wo du den Datensatz anlegst.
Ich vermute mal hier liegt der Hase im Pfeffer. Wirf mal das Makro raus und probiers nochmal.
Gruß Marie
Zitat:
Me.Undo
Cancel = True
Me.Undo
Cancel = True
gespeichert wird, dann erstellst und soeicherst Du die Autonummer schon vorher, dann shau doch bitte mal nach wo du den Datensatz anlegst.
Zitat:
Zweites Feld = Tagesdatum wird autom. beim Hineingen erzeugt. (Makro)
Zweites Feld = Tagesdatum wird autom. beim Hineingen erzeugt. (Makro)
Ich vermute mal hier liegt der Hase im Pfeffer. Wirf mal das Makro raus und probiers nochmal.
Gruß Marie
Antwort 10 von RalfH
@ Marie BINGO !
Gruß Ralf
Gruß Ralf
Antwort 11 von Marie
Nun setz das Tagesdatum wenn der Datensatz gespeichert wird.
Gruß Marie
Gruß Marie
Antwort 12 von erik
Hallo alle zusammen,
ich bin nicht sicher, ob die angesprochenen Lösungen schon reichen. Wenn in ein beliebiges gebundenes Feld irgendeine Eingabe gemacht wird, dann wird sofort ein Primärschlüssel vergeben, was sich nicht so ohne Weiteres rückgängig machen lässt. Dabei spielt es dann auch keine Rolle mehr, ob der Datensatz letztendlich gespeichert wird oder nicht.
In diesem Fall muss man sich vom Autowert abkoppeln und stattdessen selbständig die nächste Rechnungsnummer ermitteln. Dazu reicht prinzipiell schon eine DMax()-Funktion aus, die die letzte Nummer ermittelt und um 1 erhöht:
Hier besteht zwar die sehr geringe Wahrscheinlichkeit, dass zwei Personen gleichzeitig dieselbe Rechnungsnummer ermitteln, aber das dürfte sich im Rahmen tiefster Promillewerte halten.
Das ist übrigens einer der Gründe, warum ich niemals einen Autowert in die Daten hineinfließen lasse, sondern ausschließlich für die Eindeutigkeit eines Datensatzes und Beziehungen zwischen den Tabellen benutze.
Gruß
erik
ich bin nicht sicher, ob die angesprochenen Lösungen schon reichen. Wenn in ein beliebiges gebundenes Feld irgendeine Eingabe gemacht wird, dann wird sofort ein Primärschlüssel vergeben, was sich nicht so ohne Weiteres rückgängig machen lässt. Dabei spielt es dann auch keine Rolle mehr, ob der Datensatz letztendlich gespeichert wird oder nicht.
In diesem Fall muss man sich vom Autowert abkoppeln und stattdessen selbständig die nächste Rechnungsnummer ermitteln. Dazu reicht prinzipiell schon eine DMax()-Funktion aus, die die letzte Nummer ermittelt und um 1 erhöht:
NächsteNummer = Nz(DMax("Feld","Tabelle"), 0) +1Hier besteht zwar die sehr geringe Wahrscheinlichkeit, dass zwei Personen gleichzeitig dieselbe Rechnungsnummer ermitteln, aber das dürfte sich im Rahmen tiefster Promillewerte halten.
Das ist übrigens einer der Gründe, warum ich niemals einen Autowert in die Daten hineinfließen lasse, sondern ausschließlich für die Eindeutigkeit eines Datensatzes und Beziehungen zwischen den Tabellen benutze.
Gruß
erik
Antwort 13 von Ingo.
Hallo Marie, Erik und Ralf,
ich habe alle vorgeschlagenen Möglichkeiten probiert. Der Vorschlag von Marie und Ralf hat mir leider nicht weitergeholfen.
Erik hat den Sachverhalt richtig erkannt. Danke!!
Bevor ich die Nachrit von Erik gelesen habe, bin ich auch auf eine Lösung gekommen.
Ich habe alle Felder auf ungebunden gesetzt. Dann habe ich mit dem Makro "SetztenWert" den Inhalt der ungebundenen Felder in den DS übertragen.
Vorteil:
der Autowert wird erst beim aktivieren den Makros erstellt.
Frage nach der Eingabe speichern
Ja = Makro Wert eingeben und speichern. (Autowert wird gesetzt)
Nein= Beenden ohne speichern (Autowert wird nicht gesetzt und Datei wird geschlossen)
Nachteil:
Drückt der Anwender versehentlich das Button speichern, obwohl der DS noch leer ist wird nach Fehlermeldung wieder ein Autowert vergeben.
Frage:
Gibt es eine Möglichkeit, mein Macro so zu gestalten, das nur gespeichert wird, wenn mindesten zwei oder drei Felder eingegeben wurden??
Vielleicht weiss jemand Rat.
Für Eure Bemühungen herzlichen DANK!!
Gruß
Ingo
ich habe alle vorgeschlagenen Möglichkeiten probiert. Der Vorschlag von Marie und Ralf hat mir leider nicht weitergeholfen.
Erik hat den Sachverhalt richtig erkannt. Danke!!
Bevor ich die Nachrit von Erik gelesen habe, bin ich auch auf eine Lösung gekommen.
Ich habe alle Felder auf ungebunden gesetzt. Dann habe ich mit dem Makro "SetztenWert" den Inhalt der ungebundenen Felder in den DS übertragen.
Vorteil:
der Autowert wird erst beim aktivieren den Makros erstellt.
Frage nach der Eingabe speichern
Ja = Makro Wert eingeben und speichern. (Autowert wird gesetzt)
Nein= Beenden ohne speichern (Autowert wird nicht gesetzt und Datei wird geschlossen)
Nachteil:
Drückt der Anwender versehentlich das Button speichern, obwohl der DS noch leer ist wird nach Fehlermeldung wieder ein Autowert vergeben.
Frage:
Gibt es eine Möglichkeit, mein Macro so zu gestalten, das nur gespeichert wird, wenn mindesten zwei oder drei Felder eingegeben wurden??
Vielleicht weiss jemand Rat.
Für Eure Bemühungen herzlichen DANK!!
Gruß
Ingo
Antwort 14 von Ingo.
Hallo Erik,
jetzt habe ich doch etwas falsch gemacht.
Wo bitte soll ich
NächsteNummer = Nz(DMax("Rech-Nr","Rechnung ändern"), 0) +1
bitte eintragen, damit es funktioniert??
jetzt habe ich doch etwas falsch gemacht.
Wo bitte soll ich
NächsteNummer = Nz(DMax("Rech-Nr","Rechnung ändern"), 0) +1
bitte eintragen, damit es funktioniert??
Antwort 15 von erik
Hallo Ingo,
ich würde hier das NachEingabe-Ereignis des Formulars verwenden. Das wird ausgeführt, nachdem der Datensatz erzeugt wurde, und zwar nur dann. Nur hier ist es sinnvoll, eine Rechnungsnummer einmalig zu generieren.
Gruß
erik
ich würde hier das NachEingabe-Ereignis des Formulars verwenden. Das wird ausgeführt, nachdem der Datensatz erzeugt wurde, und zwar nur dann. Nur hier ist es sinnvoll, eine Rechnungsnummer einmalig zu generieren.
Gruß
erik
Antwort 16 von Ingo.
Hallo Erik
Klappt leider nicht
Ich habe folgende Parameter eingegeben:
Formular NachEingabe Ereigniss
Private Sub Form_AfterInsert()
NächsteNummer = Nz(DMax("Rech-Nr", "Rechnungen"), 0) + 1
End Sub
Feld = Rech-Nr.
Tabelle = Rechnungen
Formular= Rechnung eingeben.
Bekomme Fehlermeldung
Laufzeitfehler 2001
Sie haben die vorherige Operation abgebrochen
Befor ich das Ereignis eingegeben habe, wurden alle Datensätze aus Rechnungen gelöscht und ein neuer DS mit der Rech-Nr. 1 erzeugt.
Ich hoffe, Du weisst Rat!
Klappt leider nicht
Ich habe folgende Parameter eingegeben:
Formular NachEingabe Ereigniss
Private Sub Form_AfterInsert()
NächsteNummer = Nz(DMax("Rech-Nr", "Rechnungen"), 0) + 1
End Sub
Feld = Rech-Nr.
Tabelle = Rechnungen
Formular= Rechnung eingeben.
Bekomme Fehlermeldung
Laufzeitfehler 2001
Sie haben die vorherige Operation abgebrochen
Befor ich das Ereignis eingegeben habe, wurden alle Datensätze aus Rechnungen gelöscht und ein neuer DS mit der Rech-Nr. 1 erzeugt.
Ich hoffe, Du weisst Rat!
Antwort 17 von erik
Hallo,
und warum wurden alle Datensätze gelöscht? Du musst noch irgendwo etwas ausführen lassen, denn weder NachEingabe-Ereignis noch die DMax()-Funktion löschen vorhandene Datensätze. :-)
Kommentiere versuchsweise alle anderen Ereignisse usw. aus, für die Speicherung der Rechnungsnummer wird nichts anderes benötigt.
und warum wurden alle Datensätze gelöscht? Du musst noch irgendwo etwas ausführen lassen, denn weder NachEingabe-Ereignis noch die DMax()-Funktion löschen vorhandene Datensätze. :-)
Kommentiere versuchsweise alle anderen Ereignisse usw. aus, für die Speicherung der Rechnungsnummer wird nichts anderes benötigt.
Antwort 18 von Ingo.
Hallo Erik,
Mißverständnis!!!
Ich habe die DS gelöscht und einen neuen DS mit der Rech-Nr. 1 erzeugt.
Dann habe ich das Ereignist eingegeben.
Tabelle Rechnung enthält einen DS mit der Rech-Nr. 1
Formular ist ein Eingabeformular also leer.
Wenn ich in das leere Formular (Rechnung eingeben) nun einen DS eingebe erhalte ich die beschriebene Fehlermeldung.
Gruß
Ingo
Mißverständnis!!!
Ich habe die DS gelöscht und einen neuen DS mit der Rech-Nr. 1 erzeugt.
Dann habe ich das Ereignist eingegeben.
Tabelle Rechnung enthält einen DS mit der Rech-Nr. 1
Formular ist ein Eingabeformular also leer.
Wenn ich in das leere Formular (Rechnung eingeben) nun einen DS eingebe erhalte ich die beschriebene Fehlermeldung.
Gruß
Ingo
Antwort 19 von erik
Hi,
gibt es noch andere Ereignisse, die laufen? Mit dem NachEingabe-Ereignis allein funktioniert das garantiert, also schließe ich daraus, dass du noch irgendwas anderes laufen lässt oder eingestellt hast, von dem ich nicht weiß, dass es so ist. Ich könnte mir zumindest vorstellen, dass hier Cancels oder Undos unterwegs sind, die hier immerhin im Diskussionsfaden besprochen wurden.
gibt es noch andere Ereignisse, die laufen? Mit dem NachEingabe-Ereignis allein funktioniert das garantiert, also schließe ich daraus, dass du noch irgendwas anderes laufen lässt oder eingestellt hast, von dem ich nicht weiß, dass es so ist. Ich könnte mir zumindest vorstellen, dass hier Cancels oder Undos unterwegs sind, die hier immerhin im Diskussionsfaden besprochen wurden.
Antwort 20 von RalfH
Guten Morgen,
Hast Du das Makro beim zweiten Feld beseitigt? Ansonsten wird ja ein Datensatz angelegt.
Viertes Feld, wozu ist das da ?
Gruß Ralf
Zitat:
Formular "Rechnung eingeben"
Bei Aufruf wird leeres Formular gezeigt
Die Rechnungsnummer = Autowert,Primärschlüssel
Erstes Datenfeld = Kombinationsfeld zur Adresseneingaben
Zweites Feld = Tagesdatum wird autom. beim Hineingen erzeugt. (Makro)
Drittes Feld = Konditionen (Kombifeld)
Viertes Feld = Unterformular
Formular "Rechnung eingeben"
Bei Aufruf wird leeres Formular gezeigt
Die Rechnungsnummer = Autowert,Primärschlüssel
Erstes Datenfeld = Kombinationsfeld zur Adresseneingaben
Zweites Feld = Tagesdatum wird autom. beim Hineingen erzeugt. (Makro)
Drittes Feld = Konditionen (Kombifeld)
Viertes Feld = Unterformular
Hast Du das Makro beim zweiten Feld beseitigt? Ansonsten wird ja ein Datensatz angelegt.
Viertes Feld, wozu ist das da ?
Gruß Ralf
Antwort 21 von Ingo.
Hallo und Guten Morgen meine netten Helfer!
Hallo Erik,
zum Testen Deiner Ereignisprozedur habe ich eine neue Tabelle/Formular angelegt.
Formularname = Formular1
Feldname = Fortlaufende Nr.
Ausführort Formular1 NachEreignis
Hier eine Kopie der Ereignisprozedur
Ich erhalte folgende Fehlermeldung
Leider komme ich hier nicht mehr weiter.
Vielleicht fällt Dir noch etwas ein. Wenn diese Variante funktionieren würde wäre das echt super!
Gruß
Ingo
Hallo Erik,
zum Testen Deiner Ereignisprozedur habe ich eine neue Tabelle/Formular angelegt.
Formularname = Formular1
Feldname = Fortlaufende Nr.
Ausführort Formular1 NachEreignis
Hier eine Kopie der Ereignisprozedur
Zitat:
Option Compare Database
Private Sub Form_AfterInsert()
NächsteNummer = Nz(DMax("Fortlaufende Nr", "Tabelle1"), 0) + 1
End Sub
Option Compare Database
Private Sub Form_AfterInsert()
NächsteNummer = Nz(DMax("Fortlaufende Nr", "Tabelle1"), 0) + 1
End Sub
Ich erhalte folgende Fehlermeldung
Zitat:
Laufzeitfehler '3075':
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Max(Fortlaufende Nr)'
Laufzeitfehler '3075':
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Max(Fortlaufende Nr)'
Leider komme ich hier nicht mehr weiter.
Vielleicht fällt Dir noch etwas ein. Wenn diese Variante funktionieren würde wäre das echt super!
Gruß
Ingo
Antwort 22 von Ingo.
Hallo Ralf,
gern nehme ich Stellung zu Deiner Frage:
Der Sachverhalt, den Du nachfragst, ist nicht mehr aktuell. Ich habe das Formular wie in meiner Antwort 13 beschrieben verändert.
Das viert Feld ist kein Feld sondern mein Unterformular. (habe mich da leider falsch ausgedrückt)
Das Makro ist aktiv, es spricht aber ein ungebundenes Feld an und erzeugt so keinen Autowert. Der Autowert wird erst erzeugt, wenn ich das Makro 'SetzenWert' aktiviere. Damit wird dann der Datensatz erzeugt.
Ich hoffe zur Klärung beigetragen zu haben.
Gruß
Ingo
gern nehme ich Stellung zu Deiner Frage:
Der Sachverhalt, den Du nachfragst, ist nicht mehr aktuell. Ich habe das Formular wie in meiner Antwort 13 beschrieben verändert.
Das viert Feld ist kein Feld sondern mein Unterformular. (habe mich da leider falsch ausgedrückt)
Das Makro ist aktiv, es spricht aber ein ungebundenes Feld an und erzeugt so keinen Autowert. Der Autowert wird erst erzeugt, wenn ich das Makro 'SetzenWert' aktiviere. Damit wird dann der Datensatz erzeugt.
Ich hoffe zur Klärung beigetragen zu haben.
Gruß
Ingo
Antwort 23 von Ingo.
Hallo liebe Helfer,
es gib da noch ein Problem, wo Ihr vielleicht helfen könnt.
Zustand:
Formular Rechnung mit Unterformular Rech- Positionen
Der Formulardatensatz enthält Rech Nr, Rech Datum, Knd Nr, Knd Adresse und Summe(Rechenfeld aus dem Unterformular).
Das Unterformular enthält Anzahl, Artikelbezeichnung, Einzelpreis, Rechenfeld Gesamtsumme. Weiterhin wird die Knd. Nr und die Rech. Nr. vom Rechnungsformular übernommen.
Mein Problem:
Das Formular läuft ohne Fehler, wenn die Reihenfolge eingehalten wird. Kommt aber ein Anwender auf die Idee, zuerst das Unterformular zu nutzten, wird das Macro ausgeführt, welches die Rechnungsnummer und die Kundennummer übernimmt. Da diese im Rechnungsformular aber noch nicht eingetragen sind erhalte ich eine Fehlermeldung und das Makro wird angehalten.
Frage:
Wie kann ich verhindern, dass das Unterformular benutzt wird, wenn noch kein DS im Hauptformular eingegeben wurde?
Für eine gute Idee Danke ich im Voraus!
Gruß
Ingo
es gib da noch ein Problem, wo Ihr vielleicht helfen könnt.
Zustand:
Formular Rechnung mit Unterformular Rech- Positionen
Der Formulardatensatz enthält Rech Nr, Rech Datum, Knd Nr, Knd Adresse und Summe(Rechenfeld aus dem Unterformular).
Das Unterformular enthält Anzahl, Artikelbezeichnung, Einzelpreis, Rechenfeld Gesamtsumme. Weiterhin wird die Knd. Nr und die Rech. Nr. vom Rechnungsformular übernommen.
Mein Problem:
Das Formular läuft ohne Fehler, wenn die Reihenfolge eingehalten wird. Kommt aber ein Anwender auf die Idee, zuerst das Unterformular zu nutzten, wird das Macro ausgeführt, welches die Rechnungsnummer und die Kundennummer übernimmt. Da diese im Rechnungsformular aber noch nicht eingetragen sind erhalte ich eine Fehlermeldung und das Makro wird angehalten.
Frage:
Wie kann ich verhindern, dass das Unterformular benutzt wird, wenn noch kein DS im Hauptformular eingegeben wurde?
Für eine gute Idee Danke ich im Voraus!
Gruß
Ingo
Antwort 24 von Marie
das Unterformular ausblenden (visible = false) bis
gruß marie
gruß marie
Antwort 25 von Ingo.
Guten Morgen Marie,
Danke für den Antwort.
Leider habe ich nicht verstanden, wie ich diesen Befehl anwenden soll. Bin doch ein Access Anfänger!!
Kann ich mit diesem Befehl das Unterformular ausblenden, bis z.B. die drei Notwendigen Felder ausgefüllt sind?
Wenn ja wo muss ich den Befehl eingeben?
Gruß Ingo
Danke für den Antwort.
Leider habe ich nicht verstanden, wie ich diesen Befehl anwenden soll. Bin doch ein Access Anfänger!!
Kann ich mit diesem Befehl das Unterformular ausblenden, bis z.B. die drei Notwendigen Felder ausgefüllt sind?
Wenn ja wo muss ich den Befehl eingeben?
Gruß Ingo
Antwort 26 von erik
Hallo Ingo,
in deiner DMax()-Funktion verwendest du einen Feldnamen, der ein Leerzeichen enthält. Du solltest wissen, dass man solche Leerzeichen möglichst vermeiden sollte, denn so bist du gezwungen, bei der Verwendung dieses Namens eckige Klammern zu verwenden.
Gruß
erik
in deiner DMax()-Funktion verwendest du einen Feldnamen, der ein Leerzeichen enthält. Du solltest wissen, dass man solche Leerzeichen möglichst vermeiden sollte, denn so bist du gezwungen, bei der Verwendung dieses Namens eckige Klammern zu verwenden.
Nz(DMax("[Fortlaufende Nr]", "Tabelle1"), 0) + 1Gruß
erik
Antwort 27 von Marie
Private Sub Form_Open(Cancel As Integer)
Me![DeinUFO].Visible = False
End Sub
schreibst Du in Dein Hauptformularals Code, dann wird das UFO ausgeblendet.
Nun musst Du aber selbst eintscheiden wann Du es wieder einblenden willst und dort dann reinschreiben
Me![DeinUFO].Visible = True
Gruß Marie
Me![DeinUFO].Visible = False
End Sub
schreibst Du in Dein Hauptformularals Code, dann wird das UFO ausgeblendet.
Nun musst Du aber selbst eintscheiden wann Du es wieder einblenden willst und dort dann reinschreiben
Me![DeinUFO].Visible = True
Gruß Marie
Antwort 28 von Ingo.
Hallo Marie,
herzlichen D A N K für Deinen tollen Vorschlag!
Du hast mir wieder einmal toll geholfen
Gruß
Ingo
herzlichen D A N K für Deinen tollen Vorschlag!
Du hast mir wieder einmal toll geholfen
Gruß
Ingo
Antwort 29 von Ingo.
Hallo Erik,
habe eine neue Tabelle und ein neues Formular erstellt, um Deine Ereignisprozedur zu testen.
Leider noch immer ohne Erfolg.
Tabelle = Test
Felder ID, RechNr, Adresse
Folgendes habe ich im Formular Test eingegeben.
Nun bekomme ich keine Fehlermeldung, aber der Wert im Feld RechNr (Zahl) ändert sich nichts.
Ich weiß wirklich nicht, was ich da falsch gemacht habe.
Bitte versuche es noch einmal zu erklären.
Danke
Gruß
Ingo
habe eine neue Tabelle und ein neues Formular erstellt, um Deine Ereignisprozedur zu testen.
Leider noch immer ohne Erfolg.
Tabelle = Test
Felder ID, RechNr, Adresse
Folgendes habe ich im Formular Test eingegeben.
Zitat:
Private Sub Form_AfterInsert()
NächsteNummer = Nz(DMax("[RechNr]", "Test"), 0) + 1
End Sub
Private Sub Form_AfterInsert()
NächsteNummer = Nz(DMax("[RechNr]", "Test"), 0) + 1
End Sub
Nun bekomme ich keine Fehlermeldung, aber der Wert im Feld RechNr (Zahl) ändert sich nichts.
Ich weiß wirklich nicht, was ich da falsch gemacht habe.
Bitte versuche es noch einmal zu erklären.
Danke
Gruß
Ingo
Antwort 30 von erik
Hallo Ingo,
das Eintippen einer Ereignisprozedur reicht manchmal nicht, denn es muss auch noch mit dem Formular verknüpft sein. Öffne das Eigenschaftsfenster des Formulars und suche dort unter den Ereignissen den Eintrag "Nach Eingabe". Steht dahinter als Wert "[Ereignisprozedur]" drin? Wenn nicht, dann aus der Liste auswählen.
Gruß
erik
das Eintippen einer Ereignisprozedur reicht manchmal nicht, denn es muss auch noch mit dem Formular verknüpft sein. Öffne das Eigenschaftsfenster des Formulars und suche dort unter den Ereignissen den Eintrag "Nach Eingabe". Steht dahinter als Wert "[Ereignisprozedur]" drin? Wenn nicht, dann aus der Liste auswählen.
Gruß
erik

