Fehlende Phasen ermitteln

Hallo Ihr Lieben,

ich habe mal wieder ein Problem.
Ich habe in einer Tabelle zu verschiedenen Vorgangsnummern, verschieden Phasen gespeichert.
Insgesamt gibt es zehn Phasen die durchlaufen werden sollen, die aber nicht alle gemeldet werden.
Anhand einer auswertung über die Tabelle mit den erfassten Rückmeldung, möchte ich herausfinden welche Phasen Fehlen.

Bsp:

Tabelle „Rückmeldungen“

VNo | Phase
1 | 0
1 | 1
1 | 3
1 | 5
1 | 9
2 | 1
2 | 2
2 | 4

In dem Beispiel fehlt bei der Vorgangsnummer 1, die Phasen 2, 4, 6, 7, 8 und bei der Vorgangsnummer 2 die Phasen 0, 3.

Ich habe noch eine Tabelle „Phase“ in der die Phasen hinterlegt sind.
Ich hatte mir sowas überlegt mit

Rückmeldung.Phase != Phase.Phase insert into FehlendeMeldung

Aber irgendwie will das nicht so klappen.

Hat jemand eine Idee?

Viele liebe Grüße
shiny

Hallo Shiny,

Ich hatte mir sowas überlegt mit
Rückmeldung.Phase != Phase.Phase insert into FehlendeMeldung

das kann nicht funktionieren, da insert nur Daten in bestehende Datenfelder/-sätze schreibt, aber du einen neuen Datensatz erstellen mußt um dort die neuen Daten zu speichern. So einfach geht es leider nicht.

Hat jemand eine Idee?

Du mußt dir per VBA eine Funktion schreiben, die jeden Datensatz durchläuft und das Ergebnis speichert um dann festzustellen was fehlt.
Wenn nötig:
Dann mußt du einen neuen Datensatz hinzufügen, in dem du dann die fehlenden Daten einfügst.

Grüße aus Essen
Wolfgang

Hallo Wolfgang,

Du mußt dir per VBA eine Funktion schreiben, die jeden
Datensatz durchläuft und das Ergebnis speichert um dann
festzustellen was fehlt.
Wenn nötig:
Dann mußt du einen neuen Datensatz hinzufügen, in dem du dann
die fehlenden Daten einfügst.

sowas in der Art hab ich mir ja auch schon gedacht, aber ich habe keinen Plan wie ich das anstellen soll.

Ich habe schon einen angefangenen Quellcode aber der bringt in keinem Maß das erwünschte Ergebnis.

Ich kopier ihn mal hierrein:

DatenMail1.MoveLast
Anzahl1 = DatenMail1.RecordCount
DatenMail1.MoveFirst

DatenMail.MoveLast
Anzahl = DatenMail.RecordCount
DatenMail.MoveFirst

For x = 1 To Anzahl
For y = 1 To Anzahl
If InStr(1, DatenMail!Phase, DatenMail1!Phase_Num) Then
Zaehler = 1
Else
If y

Hallo shiny,

der Code sieht doch schon ganz gut aus.

Siehst Du Verbesserungspotential?

ja, z.B. so (geprüft und funktioniert)

Public Function prüfe_Phase()

Dim dbsDB As Database
Dim rstRückmeldung As Recordset
Dim DummyVnr As Integer
Dim X

'aktuelle Datenbank verwenden
Set dbsDB = CodeDb

'Abfrage erstellen
Set rstRückmeldung = dbsDB.OpenRecordset( _
"SELECT Vnr, Phase FROM Rückmeldung " & _
„ORDER BY Vnr, Phase“, dbOpenSnapshot)

With rstRückmeldung

'an den Anfang springen
.MoveLast
.MoveFirst

'Variable mit Daten des ersten Datensatzes vorbelegen
DummyVnr = !Vnr

Do While Not .EOF 'bis zum Ende der Tabelle

For X = 0 To 9
'Vorgang überprüfen
If !Vnr DummyVnr Then
DummyVnr = !Vnr 'neuer Vorgang
Exit For 'nächster Vorgang
End If

If !Phase = X Then
'alles in Ordnung, also einen Datensatz weiter
.MoveNext
If .EOF Then Exit For 'wenn am Ende raus hier
Else
'Fehler = Phase fehlt
MsgBox „in Vorgang Nr.“ & Str(!Vnr) & " fehlt die Phase " & Str(X)
'Exit Do '= ggf. aus der Do While Loop Schleife rausspringen
'oder Funktion ausführen
'oder weiter Prüfen lassen
End If
Next
'Phasenprüfung für den Vorgang abgeschlossen, alle 10 Phasen überprüft
Loop

MsgBox „Phasenüberprüfung abgeschlossen“
.Close
End With

End Function

Grüße aus Essen
Wolfgang