Neuigkeiten:

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

Mobiles Hauptmenü

In Unterformular alle Datensätze nach unvollständigkeit durchsuchen

Begonnen von smily68, April 08, 2011, 11:11:37

⏪ vorheriges - nächstes ⏩

smily68

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

DF6GL

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

smily68

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

DF6GL

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)