Hallo
Ich habe eine Formular mit einem UFO. Bevor ich im Hauptformular mit einer Schaltfläche den Status eines Datensatzes änderen kann, muss eine Suchroutine alle Datensätze vom UFO auf die Vollständigkeit von den Feldern Menge und Verkauspreis überprüfen. Fehlt bei einem oder mehreren Datensätzen der Eintrag soll eine Meldung kommen und er Status kann solange nicht geändert werden. (Es handelt sich um ein Verkaufsformular mit Artikelpositionen).
Ich weiss nicht, ob ich das mit einem DAO Objekt machen muss und durch jeden Datensatz gehe (Schleife) und sobald ein Eintrag fehlt, dies in eine Variable schreibe.
Ich habe so etwas noch nie gemacht und demendsprechend keine Ahnung, wie ich es konkret umsetze. Wer kann mir helfen?
Gruss Daniel
Hallo,
Du brauchst nur das Form-Recordset(clone) zu durchlaufen und die Felder auf NULL prüfen:
Sub btnStatus_Click()
Dim rs as Dao.Recordset
set rs=Me![Ufo_St.ElementName].Form.Recordsetclone
If rs.Recordcount > 0 then
Do until rs.EOF
If Isnull(rs!Menge) or Isnull(rs!Verkaufspreis) then
Msgbox "Menge oder Verkaufspreis fehlt "
End if
Loop
End if
set rs=Nothing
Hallo Franz
Ich habe deine Code genommen, doch ich bin damit in einen Endlos Loop gekommen. Ich habe deinen Code mit RS.MoveNext ergänzt. Danach hat er gar nichts gemacht. Ich habe entdeckt, das der Wert von RS.EOF schon von Beginn an True war. So habe vor dem Loop den Befehl RS.MoveFirst eingebaut.
Nun funktioniert der Code einwandfrei. Meine Frage ist nun aber, wenn ich das Recordset Objekt öffne müsste er zum ersten Datensatz gehen und ihn zum aktuellen machen, ist das so oder irre ich mich da. Wenn es so ist, warum benötige ich den Befehl RS.MoveFirst?
Hier ist der aktuelle funktionstüchtige Code:
Function FeldPruefung()
'Ueberprüfung ob die Felder Menge und Verkauspreis ausgefüllt sind
Dim Text1 As String, Text2 As String
Dim RS As DAO.Recordset
Text1 = "Eine oder mehrere Positionen haben keine Menge oder die Menge 0"
Text2 = "Eine oder mehrere Positionen haben keinen Verkaufspreis oder den Verkaufspreis 0"
Set RS = Me![F_AuftrPos].Form.RecordsetClone
FeldPruefung = False
If RS.RecordCount > 0 Then
RS.MoveFirst
Do Until RS.EOF
If IsNull(RS!AuftrPos_Menge) Or RS!AuftrPos_Menge = 0 Then
MsgBox Text1
Exit Function
End If
RS.MoveNext
Loop
RS.MoveFirst
Do Until RS.EOF
If IsNull(RS!AuftrPos_VKPreis) Or RS!AuftrPos_VKPreis = 0 Then
MsgBox Text2
Exit Function
End If
RS.MoveNext
Loop
End If
Set RS = Nothing
FeldPruefung = True
End Function
Gruss Daniel
Hallo,
ja, sorry, habe die zwei "Move-Statements" "vergessen"... :o
"wenn ich das Recordset Objekt öffne müsste er zum ersten Datensatz gehen und ihn zum aktuellen machen,"
das ist nur so beim Öffnen eines Recorsets mit der Openrecordset-Methode. Hier existiert aber schon der Form-Recordset(clone) und hat schon einen definierten Cursor (Datensatzzeiger)