PDA

Vollständige Version anzeigen : Löschen erlauben obwohl ein Feld einen Wert erwartet


asphalt
24.09.2003, 09:10
Hallo,

ich hab schon soviel nachgedacht, gibt es da irgendeine elegante lösung

ich habe in einem formular felder die ausgefüllt werden müssen, daher hab ich im formular ereignis vor aktualisierung einige regeln eingeführt.
es funktioniert ja sehr gut nur wenn ich das formular löschen oder den datensatz löschen will muss ich zuerst allen diesen felder einen wert zu weisen und das nervt.

thx für eure antworten

Jocz
24.09.2003, 09:17
Vorschlag:

Setzte eine Unsichtbares Feld mit dem Wert z.B."Name: fld_Plausibilität Wert: ON"
In deinem Vor Aktualsieren Ereignis baust Du ein:

If me.fld_Plausibiltät="ON" THEN

...Prüfung....

END IF

beim Löschen setzt Du
me.fld_Plausibiltät="OFF"

und schon wird die Plausibilitätsprüfung nicht mehr durchgeführt!


Viele Grüße
Jochen

Nouba
24.09.2003, 09:21
Hallo,

was bedeutet "Formular löschen"? Was hat das Löschen eines DS mit dem VorAktualisieren Ereignis zu tun? Vielleicht zeigst Du uns den dabei verwendeten Kode?

asphalt
24.09.2003, 10:22
hoi

hier mein code, es handelt sich um ein endlosformular, das hat links datensatzmakierer um eine auswahl zu treffedn und ev. den datensatz zu löschen,
leider muss ich
erst alle untenangeführten felder ausfüllen um den datensatz zu löschen
ich hoffe jetzt wird einiges klar
im voraktualisierung ereignis des formulars überprüfe ich ob daten angegeben werden.

die lösung von jochen find ich sehr gut


If IsNull(Me!Artikel_ID) Then
MsgBox "Es muss ein Artikel angegeben werden !!"
Me!Artikel_ID.SetFocus
Cancel = True
ElseIf IsNull(Me!Einzelpreis) Then
MsgBox "Es muss ein Preis angegeben werden !!"
Me!Einzelpreis.SetFocus
Cancel = True

ElseIf IsNull(Me!Leiste) Then
MsgBox "Es muss eine Leistenbezeichnung angegeben werden !!"
Me!Leiste.SetFocus
Cancel = True
End If

Nouba
24.09.2003, 10:59
Hallo,

es geht also nicht um das Löschen eines Datensatzes, sondern um das Abbrechen einer Eingabe. Dazu kann die Undo-Methode des Formulars verwendet werden.
Private Sub Form_BeforeUpdate(Cancel As Integer)
Const strcTitel As String = "Daten unvollständig"
Const strcMldg1 As String = "Es muss ein"
Const strcMldg2 As String = "angegeben werden!!"
Const strcMldg3 As String = "Wollen Sie die die Eingabe wiederholen,"
Const strcMldg4 As String = "oder wollen Sie die Eingabe abbrechen"


If IsNull(Me!Artikel_ID) Then
If MsgBox(strcMldg1 & " Artikel " & strcMldg2 & vbNewLine & vbNewLine _
& strcMldg3 & vbNewLine _
& strcMldg4, vbQuestion + vbYesNo, strcMldgTitel) = vbYes Then

Me!Artikel_ID.SetFocus
Else
Me.Undo
End If

Cancel = True

ElseIf IsNull(Me!Einzelpreis) Then
If MsgBox(strcMldg1 & " Preis " & strcMldg2 & vbNewLine & vbNewLine _
& strcMldg3 & vbNewLine _
& strcMldg4, vbQuestion + vbYesNo, strcMldgTitel) = vbYes Then

Me!Einzelpreis.SetFocus
Else
Me.Undo
End If

Cancel = True

ElseIf IsNull(Me!Leiste) Then
If MsgBox(strcMldg1 & "e Leistenbezeichnung " & strcMldg2 & vbNewLine & vbNewLine _
& strcMldg3 & vbNewLine _
& strcMldg4, vbQuestion + vbYesNo, strcMldgTitel) = vbYes Then

Me!Leiste.SetFocus
Else
Me.Undo
End If

Cancel = True
End If
End Sub

asphalt
24.09.2003, 13:12
hi nouba,

thx für den code,

aber ist nicht ganz was ich suche. ich versuche mich nochmals besser auszudrücken.
die 3 if befehle sollen einfach überprüfen dass vom user diese felder ausgefüllt werden. es gibt mehrere felder aber diese 3 müssen ausgefüllt werden.
hin und wieder passiert es dass man einen neuen datensatz anlegt 2 felder asufüllt und dann denkt man sich nein diesen datensatz lege ich nicht an :-). um jetzt diese 2 felder zu löschen verwende ich den datensatzmakierer und delete ihn. nur jetzt komme ich zu meinen problem, wenn ich jetzt die pflichtfelder noch nicht ausgefüllt habe macht sich das vor aktualisierung erignis bemerkbar. das heisst ich kann den datensatz erst löschen wenn ich die pflichtfelder ausfülle.

bei deinen code ist aber wieder genau so ich müsste max. 3 mal auf nein drücekn um den datensatz zu löschen, oder sehe ich das falsch

ciao

Chief10
24.09.2003, 14:10
Hi,

hab hier nen Code (glaub von Nouba), der das BeforeUpdate-Ereignis vorübergehend "ausschaltet".


Dim strTmp As String

' den Wert von VorAktualisieren speichern,
strTmp = Me.BeforeUpdate

' auf eine leere Zeichenkette setzen
Me.BeforeUpdate = vbNullString

' Datensatz speichern
DoCmd.RunCommand acCmdDeleteRecord

' und altes Eventhandlung wieder gestatten
Me.BeforeUpdate = strTmp


Hab nämlich beim Löschen (-Button) dasselbe Problem gehabt!

asphalt
24.09.2003, 14:38
so was hab ich gesucht, ist eine ellegante lösung

danke