Announcement

Collapse
No announcement yet.

Pflichtfelder oder Speichern aus VBA

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Pflichtfelder oder Speichern aus VBA

    Hallo an alle,

    Wie kann man in einem Access-Formular Pflichtfelder definieren?
    Ich habe versucht bei Gültigkeitsregel Ist Nicht Null einzugeben. Wenn ich bei neuem Datensatz das Feld leer lasse, wird trotzdem gespeichert.
    Dann habe ich durch das Ereignis Vor Aktualisierung eine Prozedur aufgerufen, die mir die Überprüfung durchführt, entsprechende Fehlermeldungen ausgibt und bei Fehler undo aufruft. Das funktioniert, aber alle Eingaben sind weg.
    Dann habe ich einen Button eingebaut zum Speichern, über den die Pflichtfeldkontrolle durchgeführt wird. Dann soll der Datensatz gespeichert werden. Dazu habe ich keinen Befehl gefunden mit DoComd.save habe ich es nicht hingekriegt. Mit Close acForm würde es gehen. Das Formular soll aber offen bleiben.
    Das ist doch sicher eine normale Aufgabe, die schon viele hatten. Da muss es doch eine einfache Lösung geben.
    Kann mir jemand einen Tipp geben?

  • #2
    Cancel = 1

    Hallo,

    Im Ereignis Vor Aktualisierung kann man doch Cancel auf 1 setzen,
    und evt. Eine Meldung ausgeben. Undo ist nicht erforderlich.

    Außerdem kann man in der Definition der Access-Tabelle die Feldeigenschaften "Eingabe erforderlich" bzw. "Leere Zeichenkette" entsprechend setzen ohne im Formular etwas machen zu müssen.

    Grüße,
    tAgedObject
    darkness is a state of mind

    Comment


    • #3
      Pflichtfelder

      Hallo tAgedObject,

      vielen Dank für deine schnelle Antwort.
      Wie kann ich denn Cancel auf 1 setzen? Und was bewirkt das?
      Da steht doch zunächst:
      Code:
      Private Sub Form_BeforeUpdate(Cancel As Integer)
      Es wird doch der Prozedur ein Parameter übergeben, wie kann ich denn den beienflussen? Ich kann ihn doch höchstens auswerten.

      Zum 2. Teil deiner Antwort:
      Ich habe nicht erwähnt, dass es sich hier um Oracle-Tabellen handelt. Ich möchte vermeiden, das die Fehlermeldung der Datenbank auf dem Bildschirm erscheint. Außerdem kann die Pflicht, etwas auszufüllen, auch von Bedingungen abhängig sein.

      Comment


      • #4
        Der Parameter ist ByRef, also wird der Wert auch zurückgegeben.

        [highlight=VB]Private Sub Form_BeforeUpdate(Cancel As Integer)

        If Me.txtEingabefeld = "" Then
        MsgBox "Eingabe darf nicht leer sein"
        Cancel = True 'Update abbrechen
        End If

        End Sub[/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Pflichtfelder

          Hallo Helper,

          vielen Dank für deine Antwort. Du hast recht, man kann Cancel auf 1 setzen, aber das erfüllt nicht den Zweck. Der Datensatz wird trotzdem gespeichert und es wird anschlißend ein anderer, nämlich der zuletzt angezeigte DS angezeigt. Es sollen aber alle bisherigen Eingaben stenbleiben, ohne dass etwas passiert.
          Ich denke, die bessere Lösung ist ein Speichern-Button, aber dazu fehlt mir der Save-Befehl.

          Comment


          • #6
            aber das erfüllt nicht den Zweck. Der Datensatz wird trotzdem gespeichert
            Kann ich nicht nachvollziehen.n Bei mir wird wirklich abgebrochen, die Eingabe belibt stehen, ich kann nicht vor noch zurücknavigieren. Bei mir geht es wie gewünscht.

            aber dazu fehlt mir der Save-Befehl
            Wirf doch einfach den Wizard für "Buttons" an. Da kommt dann so was bei raus (Access 2003):

            [highlight=VB]
            DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
            [/highlight]
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Grundsätzliches &amp; Weitere Möglichkeiten

              Hallo,

              In vielen Programmiersprachen ist es möglich, den Wert von Parametern so zu ändern, daß der Aufrufer den Wert zurückgeliefert bekommt. Man spricht dabei von Ausgabe- oder Referenz-Parametern. In VBA ist jeder Parameter der nicht mit byVal ausgezecihnet wird, automatisch ein Referenz-Parameter. Das heißt nicht, daß es immer sinnvoll ist, diesen Wert zu ändern ;-)

              Auch ich kann nicht nachvollziehen, daß trotz gesetztem Cancel-Parameter ein Datensatz automatisch gespeichert wird. Evt. passieren bei Dir noch andere Sachen....?

              Fehlermeldungen durch Datenfehler kann man theoretisch im Formular durch das Ereignis "Bei Fehler" abfangen.

              Man kann außerdem ganz auf automatische Datenbindung verzichten (macht natürlich mehr Arbeit) - eine Maßnahme, die besonders bei großen Datenmengen angeraten ist. Man muß dabei die Außwahl, das Laden und Zurückschreiben über PassThrough-Anweisungen (SQL-Befehle an den Server) selbst durchführen.

              Viele Grüße,
              tAgedObject
              darkness is a state of mind

              Comment


              • #8
                Danke

                Vielen Dank an alle, die mir geantwortet haben.
                Der Tipp mit dem Wizzard von Helper war der beste. Das ich da nicht drauf gekommen bin(??!)
                So kann ich meine eigenen Fehlermeldungen anzeigen und nur speichern, wenn alles OK ist.
                Zuletzt editiert von Wiedehopf; 24.07.2009, 14:24.

                Comment

                Working...
                X