Office: (Office 2003) Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht

Helfe beim Thema Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich schreibe ein kleines Zusatzmodul für Angebote, Rechnungen, etc. Das Grundkonzept steht jetzt soweit. Jetzt geht es darum die... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von NorbertK, 30. Juli 2015.

  1. Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht


    Hallo zusammen,

    ich schreibe ein kleines Zusatzmodul für Angebote, Rechnungen, etc.

    Das Grundkonzept steht jetzt soweit. Jetzt geht es darum die Eingabeformulare für die Benutzer komfortabel zu gestalten.

    Dazu möchte ich beim Öffnen des Formulars zunächst auf Werte prüfen um dann entweder zum noch offenen Angebot zu wechseln oder wenn es noch kein Angebot gibt (oder es kein offenes Angebot mehr gibt) einen neuen Datensatz anlegen.

    Als Kriterien zur Prüfung habe ich zwei Felder:
    AngebotNr (wenn dies leer ist, gibt es noch kein Angebot)
    und erledigtA (Ja-/Nein-Feld das wenn Ja ebenfalls ein neues Angebot erfordert).

    Hier mein Code:
    Code:
    Aber irgendwie prüfe ich wohl nicht richtig und Access meckert auch die unzulässige Verwendung von Klammern an.

    Ich steh mal wieder auf dem Schlauch!

    Code:
    prüft doch auf fehlenden Inhalt (also Null)
    und
    Code:
    prüft doch auf vorhanden Inhalt in AngebotNr UND auf das zweite Kriterium (das Ja-/Nein-Feld erledigtA) auf Ja (-1).

    Wo liegt mein Denkfehler?

    :)
     
    NorbertK, 30. Juli 2015
    #1
  2. Von Formular-Öffnen ist nichts zu sehen. Form_Current ist da eher das Datensatzwechsel-Ereignis.

    Sowie: Ehe man auf Felder des ersten Datensatzes prüft, müsste man sich vergegenwärtigen, unter welchen Bedingungen das Formular geöffnet wird.

    Code:
    Das Trim verstehe ich nicht. Gibt es Angebotsnummern mit umgebenden Leerzeichen?
    Das Nz kann nur wirken, wenn es einen Datensatz, aber die Angebotsnummer mit Wert Null gibt. Bei einem nicht vorhandenen Datensatz kann man nur diesen Zustand an sich prüfen (EOF, RecordsetCount=0), aber keine Felder.
     
  3. Aua, die vielen Gotos tun ja richtig weh.
    Bitte verzichte darauf und verwende diese nur in der Fehlerbehandlung, sonst kommst du schnell in Spaghetti-Code hinein der nicht mehr leserlich wird.

    Ich seh mehrere Fehler/Irtümer:
    - bei der Funktion UniCounter_New fehlt die Klammer am Ende
    - Beim Öffnen ist das Event Form_Open und nicht Current. Current löst bei jedem Datensatzwechsel aus.
    - Prüfen auf leeren Inhalt geht am besten so: if len(nz(Variable,"")) = 0 then...
    - Trim um das NZ herum macht keinen Sinn, verwende es innerhalb wenn du denkst dass du es benötigst.
    - Me.erledigtA ist eine CheckBox? diese kann beim Formstart unbestimmt sein. Schreibe in der Abfrage: .... And nz(Me.erledigtA, 0) = -1 then

    Gruß Andreas
     
    avogt_at_home, 1. August 2015
    #3
  4. Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht

    Hallo Eberhard, hallo Andreas,

    sorry, ich habe mich falsch ausgedrückt: Beim Anzeigen des Formulars soll geprüft bzw. entschieden werden, da die Bedingungen ja in Feldern des Formulars formAngebot stehen.

    Aufgerufen wird das Formular aus dem Hauptformular (als ungebundenes neues Formular); die Datenquelle (ein SQL-Statement) hat als einzige Bedingung Firma_ID = Hauptformular!Firma_ID.

    Inzwischen sieht der Code so aus:
    Code:
    (funktioniert aber dennoch nicht *entsetzt )

    Das passiert bei einem Kunden, für den es noch kein Angebot gibt:
    Code:
    Beim Klick auf den Öffnen-Button erscheint:
    Dann öffnet sich das Formular mit einem neuen Datensatz in der Tabelle (Rechnungswesen01); jedoch wird keine AngebotNr generiert, lediglich die Firma_ID wurde angelegt.
    In der Tabelle für die Angebots-Positionen (Rechnungswesen02) werden gleich 2 leer Datensätze angelegt.
    Das passiert bei einem Kunden mit einem bereits auf erledigt gesetztem Angebot:
    Passt also!
    Passt auch!
    Den Fehler kann ich nicht erkennen!
    Danach öffnet sich ein neues Angebot, in der Tabelle Rechnungswesen01 passt alles (AngebotNr wurde angelegt, die Firma_ID übergeben), in der Tabelle Rechnungswesen02 (die für die Positionen) gibt es 2 neue Datensätze:
    Einen ganz leeren und einen zuordenbaren mit AngebotNr und Firma_ID.
    (Der leere Datensatz könnte ein Problem mit dem Angebots-Formular und dem Unterformular sein. Bzw. vermutlich entsteht der leere Datensatz, weil ich die Aktion form_current gewählt habe und das Formular bereits den DS beim Öffnen anlegt.

    Wie kann ich also die Prüfung auf das Ereignis form_open verlagern (die Felder des Formulars habe ich dabei ja noch gar nicht zur Verfügung) und warum scheitert die Prüfung wenn es noch gar kein Angebot gibt?
     
    NorbertK, 1. August 2015
    #4
  5. Hallo,
    habe den Code eben mit Checkbox, Textbox und einer Hilfsfunktion UniCounter_New - die 4711 zurück gibt - getestet.
    Ohne Fehler

    Setze doch mal auf Form_Current einen Breakpunkt und takte mit F8 dich durch den Code und sieh mal was passiert.
    Was hast du für Verweise gesetzt? Hab hier nur noch Access 2010 im Einsatz, aber der Code läuft auch unter 2003 sicherlich fehlerfrei.

    Andreas

    PS:
    Problem wird wohl das Me.AngebotNr sein, schreib hier einfach mal Me!AngebotNr.
    Siehe auch donkarls Access-Seiten
    Vorallem der vorletzte Satz.
     
    avogt_at_home, 1. August 2015
    #5
  6. Hallo Norbert,

    In dem Fall ist es ein gebundenes Formular. Ein ungebundenes Formular hat keine Datenquelle.
    Ist das Angebots-Formular das Hauptformular oder das von diesem Aufgerufene?
    Welche Rolle und wo ist ein Unterformular mit welcher Verknüpfung vorhanden?

    Deine Beschreibung ist fast so chaotisch, wie der Code in #1, der gut als abschreckendes Schulungsbeispiel dienen könnte. *wink.gif* SCNR

    Das Form-Open-Ereignis bringt dich nicht weiter, weil hier noch keine Daten vorhanden sind. Benutze wenn, dann die Form-Load-Ereignisbehandlung.

    @andreas
    IMHO sollte der in meinen Augen falsche Beitrag der FAQ6.3 längst überarbeitet/gelöscht worden sein.
    Zur Begründung siehe: http://www.office+loesung.de/ftopic334143_0_0_asc.php (Im Link + durch - ersetzen!)
     
    Marsu65, 1. August 2015
    #6
  7. Zur Wiederholung: Heißt "kein Angebot", dass es trotzdem einen oder mehrere Datensätze gemäß Filterung gibt (vor dem Eigen-Neuanlegen)? Denn in einem NULL-Datensatz (leeres Recordset) würde ich nicht Einzelfelder prüfen.

    Bei mehreren Datensätzen: Der Datenzeiger liegt beim Öffnen des Formulars auf dem ersten Datensatz und nur auf diesem. Wäre das auch der richtige zum Prüfen?

    Die Charakterisierung der Beschreibung durch Marsu würde ich an der Stelle unterstreichen.
     
  8. Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht

    Hallo,
    Marsu, ich sehe den Zusammenhang nicht mit der aktuellen Fehlermeldung.
    Und die Diskussion Punkt/Ausrufezeichen sollte doch inzwischen längst zugunsten des Punktes entschieden sein.

    Gruß Andreas
     
    avogt_at_home, 1. August 2015
    #8
  9. Hallo Norbert und guten Morgen @

    für welchen Zweck gibt es…
    Dim AngebotNr As String, mit dem gleichen Namen wie das Feld im Formular?
    Aufruf des Formulars:
    du rufst das Formular mit der Where-Bedingung… Firma_ID = Hauptformular!Firma_ID auf, so habe ich es verstanden?!
    Wenn ja, öffnet sich das Formular und der 1.DS wird angezeigt, auch wenn er ein Neuer ist.
    1. jetzt prüfst du den ersten DS... gibt es eine AngebotNr oder nicht, wenn nein, bleibt er auf dem 1. DS fertig.
    Diese Prüfung ist mM unnötig.
    2. wenn es eine AngebotNr gibt und die Checkbox True eingestellt ist wird der Code ausgeführt, was immer der auch erstellt.
    3. wenn jetzt ein AngegbotNr gibt und die Checkbox False eingestellt ist… was dann?
    4. das alles ist gültig für keine, oder eine AngebotNr. Was ist, wenn es mehrere Angebote zu einem Kunden gibt?

    Man sollte ev. nicht einzeln, sondern alle DS prüfen und darauf reagieren?
    Am besten über einen Button und nicht automatisch [Beim Anzeigen]
    Oder, klapperst du alle DS über einen Button ab?
    Für mich ist der Code so etwas sinnvoller, wobei ich den Sinn wie beschrieben nicht wirklich verstehe.
    Code:
    Sorry, falls ich mit meiner Antwort komplett daneben liege *Smilie
     
    Kyron9000, 1. August 2015
    #9
  10. Hallo zusammen,

    zunächst einmal herzlichen Dank für Eure Unterstützng!

    Hallo Alfred,

    Du hast mein Vorhaben schon recht gut erfasst.

    Ich habe derzeit diesen Code (auf Deiner Basis) im Einsatz:
    Code:
    Ich denke, die Kommentare von mir bzw. die Message-Boxen verdeutlichen, was ich gerne erreichen möchte.

    Mit dem gelisteten Code passiert nun Folgendes:

    1. Fall: Kunde hat noch keine Angebote erhalten, ich klicke auf Angebot, es erscheint:
    Das Angebots-Formular öffnet sich, das Datum-Feld bleibt leer und keine AngebotNr wurde generiert, in der Tabelle Rechnungswesen01 gibt es einen neuen DS mit der Firma_ID, aber ohne AngebotNr.
    In der Tabelle Rechnungswesen02 gibt es 2 neue DS mit Firma_ID, aber ohne weitere Daten.

    2. Fall: Kunde hat schon ein Angebot erhalten, es ist aber bereits erledigt, ich klicke auf Angebot, es erscheint:
    dann
    und nochmal
    Das Angebots-Formular öffnet sich, das Datum-Feld wurde ausgefüllt und eine AngebotNr wurde generiert, in der Tabelle Rechnungswesen01 gibt es einen neuen DS mit der Firma_ID, dem Datum und der AngebotNr.
    In der Tabelle Rechnungswesen02 gibt es 2 neue DS: Einen nur mit Firma_ID, aber ohne weitere Daten, der zweite hat Firma_ID und AngebotNr.

    3. Fall: Für den Kunden wurde schon ein Angebot erstellt, aber es ist noch nicht erledigt (zugestellt) worden, ich klicke auf Angebot, es erscheint:
    Das Formular zeigt das offene Angebot an (wenn es mal mehrere gibt - eher unwahrscheinlich in dieser Branche, soll der erste DS angezeigt werden. Das (also leider nur der dritte Fall) passt also!

    Ich versuche mal, das Ganze in eine Beispiel-DB zu "quetschen".
     
    NorbertK, 2. August 2015
    #10
  11. ...ja, das habe ich mir auch so vorgestellt, nur hast du auch bedacht, das sich mal jemand ein Angebot auch ansieht,
    ohne das er gleich eines anlegen möchte?
    Und vor allem sollte die Abfrage dann nach der ID absteigend sortiert sein.
    Und noch etwas, 2 Angebote darf ein Kunde nicht haben, oder sagen wir mal, sollte er nicht haben bei deinem Vorhaben.
    Hmmm, ich weiß nicht... so recht gefällt mir das alles nicht, sorry.
     
    Kyron9000, 2. August 2015
    #11
  12. Hallo allerseits,

    hier nun die BeispielDB; das (abgespeckte) Hauptformular öffnet sich beim Start, darauf findet Ihr dann den Button Angebot.

    Hallo Alfred,

    doch, ein Kunde sollte schon mehrere Angebote haben dürfen; für die Historie wird es ein separates Formular geben, mit dem man alle vorhandenen Angebote als Liste angezeigt bekommen soll (sowohl die PDFs der fertigen Angebote als auch die Angebote in Formularform.
     
    NorbertK, 2. August 2015
    #12
  13. Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht

    Hallo,
    das Datenmodell ist schlicht und einfach eine Katastrophe. Hier fehlen noch einige Tabellen zur Normalisierung.
    Besonders die Tabelle "Rechnungswesen01" halte ich in der Form für unbrauchbar. Die vielen Felder für Mehrwertsteuer, die Felder zur Mahnung und Zahlungserinnerung, Archivierung, Kopieren usw. usw. sind alles Kandidaten für extra Tabellen. So kommt für die Mahnungen jede Mahnstufe als Datensatz in eine extra Tabelle, mit einem Fremdschlüssel zur Rechnung. Es ist nur eine Beziehung angelegt und die noch ohne referentielle Integrität. Ein Angebot wird auch nicht durch kopieren zu einer Rechnung, sondern in die Rechnungstabelle kommt einfach nur ein Fremdschlüssel zum Angebot.

    Was haben denn die vielen MWST Felder für eine Bedeutung ?

    Ein Formular kann keine Historie speichern. Die Historie ergibt sich bereits durch die erforderliche 1:n Beziehung zwischen Angebot und Kunde.

    Das muss gründlich überarbeitet werden. Da ist so viel zu ändern, da weis man gar nicht wo man anfangen soll.
     
    gpswanderer, 2. August 2015
    #13
  14. ...hat jetzt nichts mit deiner Frage zu tun, aber du solltest das Eingabeverhalten auf Standard und Bildleiste auf keine einstellen.
    Weiters wäre die Reihenfolge zu adaptieren... von links nach rechts von 0 zu...?
    Das Feld ber_exp_APtelefon wird nicht gefunden...?
    Da es nur einen Kunden und nur ein Angebot gibt, kann man schwer anderes testen.
    So, das war's mal von mir *Smilie

    PS: das DB-Modell habe ich schon das letzte mal angesprochen, aber leider ohne Erfolg (soll Excelart sein?!)

    PS2: ich habe 1 Auftragsbestätigung / 1 Angebot / 1 Rechnung gefunden
     
    Kyron9000, 2. August 2015
    #14
  15. Hallo Alfred,

    ich weiß, dass das Datenmodell hier - vorsichtig ausgedrückt - suboptimal ist. Die Gründe dafür hatte ich an anderer Stelle ja bereits erläutert.

    Einmal unabhängig davon, wie die Datenstruktur aussieht, habe ich ein Problem mit dem Code:
    Code:
    Wenn es ein (oder mehrere) erledigte(s) Angebot, aber keine offenen Angebote gibt, passt es erstmal: Ein neuer DS wird generiert.

    Gibt es aber neben dem/den erledigten Angebot auch noch offene, soll das Formular den letzten DS anzeigen; stattdessen wird aber immer ein neuer DS angelegt.

    Und wenn es gar kein Angebot gibt, sollte ja eigentlich ein neuer DS generiert werden; aber die Zeilen
    Code:
    werden überhaupt nicht abgearbeitet.

    Mein Lösungsansatz hierfür sieht momentan gedanklich so aus:
    Ich setzte die Bedingungen erledigtA bereits für die Datenherkunft an (und gebe nur Datensätze aus, die nicht wie erledigtA sind; dann brauche ich eigentlich nur noch zu prüfen, ob es eine AngebotNr gibt oder nicht.
    Wäre das eine Möglichkeit?

    Da diese ganze Angebots-/Rechnungskiste ein Freundschaftsdienst ist und ich nichts daran verdiene, möchte ich natürlich auch nicht ohne Ende Zeit reinhängen.

    Eine Alternative wäre eine fertige Lösung, die kostenfrei übernommen werden kann. Das Modul soll Folgendes können:
    Mehrere Angebote erfassen, aus Angeboten Auftragsbestätigungen und/oder Rechnungen erstellen; direkt Rechnungen erfassen (ohne vorheriges Angebot), Zahlungsverfolgung.
    Erweitern könnte ich es dann ja noch selbst; eine gute Basis wäre aber fein...

    Kennt jemand eine solche Lösung?
     
    NorbertK, 2. August 2015
    #15
Thema:

Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht

Die Seite wird geladen...
  1. Beim Öffnen eines Formulars auf Bedingungen prüfen klappt nicht wie gewünscht - Similar Threads - Öffnen Formulars Bedingungen

  2. Webadresse aus Formular öffnen

    in Microsoft Access Hilfe
    Webadresse aus Formular öffnen: Hallo zusammen, ich bin am verzweifeln. Ich habe in einem Formular ein Feld mit Pfaden zu einer Webadresse mit unterschiedlichen Unterseiten. In meinem Fall ist das https://www.discogs.com...
  3. Formular mit bestimmten Datensatz durch Doppelklick öffnen

    in Microsoft Access Hilfe
    Formular mit bestimmten Datensatz durch Doppelklick öffnen: Hallo zusammen, ich bin ganz neu hier und hoffe ich drücke mich verständlich aus, falls nicht, lasst es mich gerne wissen. Ich möchte eine Datenbank aufbauen, in der ich Personendaten erfassen...
  4. Formular mit Bedingung öffnen aus einem Listenfeld heraus (VBA)

    in Microsoft Access Hilfe
    Formular mit Bedingung öffnen aus einem Listenfeld heraus (VBA): Hallo zusammen, ich möchte aus einem Listenfeld ein Formular mit einer Bedingung öffnen, wenn ich die Enter/Return-Taste drücke. Hinweis: im gleichen Formular ist bereits die Enter-Taste schon...
  5. Formular öffnen und Fokus danach auf ein anderes Formular schieben

    in Microsoft Access Hilfe
    Formular öffnen und Fokus danach auf ein anderes Formular schieben: Hallo, ich habe ein kleines Problem, mit dem ich nicht so recht weiter komme und wo die Experten vielleicht wissen, wie es geht. Und nachdem mir neulich schon geholfen wurde, komme ich nochmal....
  6. Ein Formular mehrfach öffnen

    in Microsoft Access Hilfe
    Ein Formular mehrfach öffnen: Hallo alle zusammen, könntet ihr mir bitte helfen? Ich habe ein Suchformular wie im Anhang erstellt. Wenn ich auf den "Weiter-Button" klicke, kann ich jedesmal nur ein Formular (frmKundenkontakt)...
  7. Anderes Formular mit zwei Bedingungen öffnen

    in Microsoft Access Hilfe
    Anderes Formular mit zwei Bedingungen öffnen: Hallo, bitte schaut mal über meinen Code. Ich möchte per Schaltfläche ein anderes Formular öffnen, in dem die Felder "Nachname" und "Vorname" übereinstimmen. Habe diesen Code: Code: DoCmd.OpenForm...
  8. VLC Player in Access Formular öffnen

    in Microsoft Access Hilfe
    VLC Player in Access Formular öffnen: Ich möchte den VLC Player aus einem Access Formular öffnen, bzw. möchte ich bestimmte Titel aus dem Formular mit VLC Player abspielen. Kann mir jemand helfen wie ich dass anstelle?? Danke
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden