Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Youssef am Mai 21, 2015, 12:04:40

Titel: Msgbox
Beitrag von: Youssef am Mai 21, 2015, 12:04:40
Hallo an alle;

ich habe ein formular mit ungebundenen Felder erstellt, und mit einer VBA programmierung kann ich jetzt Daten in diesen Felder eingeben bzw. speichern in den vorgesehenen Tabellen.

Mein wunsch ist, dass wenn ich keine Angabe mache(Feld mit leer ) und auf Einfügen Knopf drücke, sollte ein Msgbox raus kommen und sagen dass ich den eintrag für X- oder mehrere Felder nicht eingegeben habe.

Aktuell kommt die Fehlermeldung: unzulässige Verwendung von Null, was natürlich klar ist.

wie kann ich nun den MsgBox hier in diesem Code reinbringen :
Private Sub einfügen_Schnittdaten_neu_Click()
Dim strSQL As String
Dim dDatabase As Database

Set dDatabase = CurrentDb
'If Me.txtTOOLID = Null Then
       ' MsgBox("Sie haben kein KomplettwerkzeugID ausgewhält?", vbYesNo + vbQuestion) = vbOK
       ' End If
        strSQL = "INSERT INTO TMS_TDM_TOOLTECHNOLIST ([TOOLID],CUTSPEED,FEEDPTOOTH,[PROCEDURE],TOOLTECHNOPOS,TOOLTECHNOLISTPOS,REVOLUTIONS,FEEDRATE,FEEDPREV,CUTWIDTH,CUTDEPTH,CUTVOLUMEPTIME,DIAMETER,IDTYPE)" & _
                "VALUES ('" & Me.txtTOOLID & "'," & _
                str(Me.txtCUTSPEED) & "," & _
                str(Me.txtFEEDPTOOTH) & ",'" & _
                Me.cboPROCEDURE & "', " & _
                str(Me.cboTOOLTECHNOPOS) & " , " & _
                str(Me.cboTOOLTECHNOLISTPOS) & ", " & _
                str(Me.txtREVOLUTIONS) & ", " & _
                str(Me.txtFEEDRATE) & ", " & _
                str(Me.txtFEEDPREV) & ", " & _
                str(Me.txtCUTWIDTH) & " , " & _
                str(Me.txtCUTDEPTH) & " , " & _
                str(Me.txtCUTVOLUMEPTIME) & ", " & _
                str(Me.txtVALNUM) & " ,2)"
     
'Message Box:
        If MsgBox("Sollen die Schnittdaten wirklich übernommen werden ?", _
              vbYesNo + vbQuestion) = vbYes Then
            Debug.Print SQL
         
        Else
         
    Exit Sub
        End If
     
Debug.Print strSQL
CurrentDb.Execute strSQL
' Programm_2 aufrufen bzw. ausführen
Daten_einfügen_ToolTechno_Click
End Sub


Danke im Voraus für euere Hilfe

LG
Youssef

Titel: Re: Msgbox
Beitrag von: MzKlMu am Mai 21, 2015, 12:16:49
Hallo,
warum ungebunden ?
Auch bei einem gebundenen Formular kann man das Speichern unvollständiger Datensätze verhindern. Und es ist nur die halbe Programmierarbeit.
Titel: Re: Msgbox
Beitrag von: Youssef am Mai 21, 2015, 12:51:17
Danke für die antwort :-)
das sind viele faktoren im Spiel leider.
und die Aufgabe die dahinter steckt ist mir viel zu aufwendig zu erklären worum es überhaupt geht .
Mir gehts darum für dieses Problem eine Lösung zu finden.
LG
Youssef
Titel: Re: Msgbox
Beitrag von: MzKlMu am Mai 21, 2015, 12:53:43
Hallo,
so wird auf Null (=Nix) geprüft.
If IsNull(Me.txtTOOLID) Then
       MsgBox("Sie haben kein KomplettwerkzeugID ausgewhält?", vbYesNo + vbQuestion) = vbOK
End If

oder auch so:
If Nz(Me.txtTOOLID,"") = "" Then
Titel: Re: Msgbox
Beitrag von: Youssef am Mai 21, 2015, 13:04:44
probiert, kommt aber leider eine fehler:
fehler beim Kompilieren:
Funktionsaufruf auf der linken Seite Zuweisung muss Variant oder -Objekt zurückgeben

???
Titel: Re: Msgbox
Beitrag von: MzKlMu am Mai 21, 2015, 13:07:00
Hallo,
dann zeige bitte noch mal die Prozedur. Sollte eigentlich gleich selbstverständlich sein.
Titel: Re: Msgbox
Beitrag von: Youssef am Mai 21, 2015, 13:09:48
Private Sub einfügen_Schnittdaten_neu_Click()
Dim strSQL As String
Dim dDatabase As Database

Set dDatabase = CurrentDb
If IsNull(Me.txtTOOLID) Then
       MsgBox("Sie haben kein KomplettwerkzeugID ausgewhält?", vbYesNo + vbQuestion) = vbOK
End If
        strSQL = "INSERT INTO TMS_TDM_TOOLTECHNOLIST ([TOOLID],CUTSPEED,FEEDPTOOTH,[PROCEDURE],TOOLTECHNOPOS,TOOLTECHNOLISTPOS,REVOLUTIONS,FEEDRATE,FEEDPREV,CUTWIDTH,CUTDEPTH,CUTVOLUMEPTIME,DIAMETER,IDTYPE)" & _
                "VALUES ('" & Me.txtTOOLID & "'," & _
                str(Me.txtCUTSPEED) & "," & _
                str(Me.txtFEEDPTOOTH) & ",'" & _
                Me.cboPROCEDURE & "', " & _
                str(Me.cboTOOLTECHNOPOS) & " , " & _
                str(Me.cboTOOLTECHNOLISTPOS) & ", " & _
                str(Me.txtREVOLUTIONS) & ", " & _
                str(Me.txtFEEDRATE) & ", " & _
                str(Me.txtFEEDPREV) & ", " & _
                str(Me.txtCUTWIDTH) & " , " & _
                str(Me.txtCUTDEPTH) & " , " & _
                str(Me.txtCUTVOLUMEPTIME) & ", " & _
                str(Me.txtVALNUM) & " ,2)"
       
Debug.Print strSQL
CurrentDb.Execute strSQL
' Programm_2 aufrufen bzw. ausführen
Daten_einfügen_ToolTechno_Click
End Sub
Titel: Re: Msgbox
Beitrag von: MzKlMu am Mai 21, 2015, 13:19:22
Hallo,
Du musst auch aus der Sub aussteigen wenn das Feld leer ist, das heißt, der Code darf ja nicht weiter machen. Außerdem macht die Zuweisung eines Wertes für die MsbBox keinen Sinn. Hatte ich vorhin übersehen.
If IsNull(Me.txtTOOLID) Then
       MsgBox "Sie haben kein KomplettwerkzeugID ausgewhält"
       Exit Sub
End If
Titel: Re: Msgbox
Beitrag von: MaggieMay am Mai 21, 2015, 16:24:56
Hi,

Exit ist ebenso wie GoTo eher sparsam zu verwenden, besser wäre es hier, den (noch nicht vorhandenen) Else-Zweig der If-Anweisung zu nutzen.
Titel: Re: Msgbox
Beitrag von: daolix am Mai 21, 2015, 18:10:28
ZitatExit ist ebenso wie GoTo eher sparsam zu verwenden
Das kann jeder halten wie er will. weder exit's noch vereinzelte goto's ausserhalb des errorhandlings stören den lesefluss. und dieses "goto ist iiihhh" zählt nicht mehr da kaum noch jemand dieses exesiv einsetzt, so wie früher. die leute haben sich an funktionen, subs, methoden, propertys gewöhnt.
Titel: Re: Msgbox
Beitrag von: MaggieMay am Mai 21, 2015, 22:36:17
Das klingt von jemandem dessen Motto "Von nix nen Plan" lautet wenig überzeugend.

Zumal es kein Argument ist, dass diese "Art der Programmierung" angeblich nicht mehr so häufig zu sehen ist. Wenn das so wäre, dann wäre es wohl eher ein Zeichen dafür, dass die Lehren von strukturierter Programmierung auf fruchtbaren Boden gefallen sind.
;)
Titel: Re: Msgbox
Beitrag von: MzKlMu am Mai 21, 2015, 23:50:46
Hallo,
zwischen der Verwendung von Exit und GoTo ist ein deutlicher Unterschied. Kommt ein Exit Sub, ist der Code durch, da muss ich gar nichts mehr weiter prüfen. Ein GoTo erfordert weitere Verfolgung des Geschehens. Ein Exit Sub sorgt für klare Verhältnisse.
Nach meiner Auffassung spricht nichts gegen die Verwendung von Exit Sub.
Wird auch in jeder Fehlerbehandlung verwendet bzw. wird dann benötigt.
Titel: Re: Msgbox
Beitrag von: MaggieMay am Mai 21, 2015, 23:57:42
Mir geht es hierbei in erster Linie um die Lesbarkeit des Codes. Ein Exit könnte leicht übersehen werden, und es stört mAn die "Struktur" ebenso wie ein GoTo. Ich wollte mit dem Begriff "Lineare Programmierung" punkten, musste jedoch feststellen, dass damit etwas völlig anderes gemeint ist (ich bin kein Informatiker).

Kennt jemand von euch evtl. den Fachbegriff (falls es ihn gibt) für die Richtlinie, generell ohne GoTos und Exits zu programmieren?

ZitatWird auch in jeder Fehlerbehandlung verwendet bzw. wird dann benötigt.
Ausnahmen von einer ansonsten sinnvollen Regel gibt es immer. So ist bspw. das Makro AutoExec durch nichts zu ersetzen, oder auch - wo benötigt - AutoKeys.
Titel: Re: Msgbox
Beitrag von: daolix am Mai 22, 2015, 00:43:45
Wenn du diese nicht verwenden willst, weil iwer das in einem Buch sagt isses ja ok. Ich will dir nicht aufhalten. Nur ne Doktrin sollte man daraus nicht machen. Exit Subs verwende ich jedenfalls zuhauf, die verwendung von goto ausserhalb der Errorhandlings kann ich max an drei fingern abzählen. Die Strucktur wird jedenfalls duch ein exit sub nicht gestört oder zerstört.
Titel: Re: Msgbox
Beitrag von: Wurliwurm am Mai 22, 2015, 15:02:11
Zitat von: MaggieMay am Mai 21, 2015, 23:57:42
Ich wollte mit dem Begriff "Lineare Programmierung" punkten, musste jedoch feststellen, dass damit etwas völlig anderes gemeint ist (ich bin kein Informatiker).

Dazu braucht man kein Informatiker sein, das ist bereits Abiturstoff.

Laienprediger sind übrigens immer besonders dogmatisch...
Titel: Re: Msgbox
Beitrag von: markusxy am Mai 25, 2015, 11:22:20
Ich würde den ganzen Ansatz ändern. Speichern sollte nicht möglich sein, so lange nicht alle Pflichtfelder korrekt ausgefüllt sind. Pflichtfelder müssen für den User optisch erkennbar sein. Ich mache bei meinen Formularen bei den Pflichtfeldern eine andere Hintergrundfarbe, solange ein Wert fehlt. Sobald das Pflichtfeld ausgefüllt ist, wechsle ich die Hintergrundfarbe des Feldes auf die Standardfarbe. Sobald alle Pflichtfelder ausgefüllt sind, wird der Speichern-Button auf Enabled gesetzt. Dann ist die Msgbox überflüssig. Für eine einfache Prüfung könnte man z.B. eine Bitmaske verwenden. Dafür ist ein Sub mit zwei Zeilen Code erforderlich, falls Du nicht mehr als 31 Felder überprüfen willst. LG Markus