Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Msgbox

Begonnen von Youssef, Mai 21, 2015, 12:04:40

⏪ vorheriges - nächstes ⏩

Youssef

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


MzKlMu

Hallo,
warum ungebunden ?
Auch bei einem gebundenen Formular kann man das Speichern unvollständiger Datensätze verhindern. Und es ist nur die halbe Programmierarbeit.
Gruß Klaus

Youssef

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

MzKlMu

#3
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
Gruß Klaus

Youssef

probiert, kommt aber leider eine fehler:
fehler beim Kompilieren:
Funktionsaufruf auf der linken Seite Zuweisung muss Variant oder -Objekt zurückgeben

???

MzKlMu

Hallo,
dann zeige bitte noch mal die Prozedur. Sollte eigentlich gleich selbstverständlich sein.
Gruß Klaus

Youssef

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

MzKlMu

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
Gruß Klaus

MaggieMay

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.
Freundliche Grüße
MaggieMay

daolix

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.

MaggieMay

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.
;)
Freundliche Grüße
MaggieMay

MzKlMu

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.
Gruß Klaus

MaggieMay

#12
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.
Freundliche Grüße
MaggieMay

daolix

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.

Wurliwurm

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...