Datarow wird nothing

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Datarow wird nothing

    Guten Abend,

    wollte heute auf meine Backupdaten zugreifen und musste leider feststellen, dass diese nicht vorhanden waren.
    Die Datensicherung habe ich etwas vor zwei Jahren erstellt und bisher keine Probleme gehabt.

    In einem Timer läuft folgendes ab:

    VB.NET-Quellcode

    1. If Not Einstellungen.Download_Gesperrt AndAlso Not Daten.DatenSicherung.Manuell Then
    2. If CBool(TPZeile("DL")) Then 'Download Internet
    3. If IsDBNull(TPZeile("Termin")) Then TPZeile("Termin") = Now.ToShortDateString
    4. If TPZeile("Termin").ToString = Nothing Then TPZeile("Termin") = Now.ToShortDateString
    5. Internet.Download.Starten(CInt(TPZeile("Nummer")), CDate(TPZeile("Termin")))
    6. Exit Sub
    7. End If
    8. Else
    9. Kontroll.Internet_Erledigt = True
    10. End If
    11. End If
    12. If Not Einstellungen.Datensicherung_Gesperrt Then
    13. If CBool(TPZeile("DS")) Then ' Datensicherung
    14. Kontroll.Info.Info_Setzen(Now, "DS: " & TPZeile("Zielordner").ToString) ' Kontrollausgabe ->> korrekt
    15. Daten.DatenSicherung.Starten(TPZeile)
    16. Exit Sub
    17. End If

    Bis hier alles noch in Ordnung. Die TPZeile ist nicht Nothing.

    Nun die Übergabe an Klasse Datensicherung:

    VB.NET-Quellcode

    1. Public Sub Starten(ByVal SicherZeile As DataRow)
    2. If SicherZeile Is Nothing Then
    3. Kontroll.Info.Info_Setzen(Now, "DS: Systemfehler - Information nicht vorhanden.")
    4. Exit Sub
    5. End If


    wird sie Nothing.

    Wie gesagt, habe hier nichts geändert und der Fehler besteht seit etwa 2 Tagen.
    Sind irgendwelche Updates gekommen, die dies verursachen könnten?
    Gruß Markus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Westerwälder“ ()

    Nach langer Suche, bin ich der Sache auf den Grund gekommen.
    Es liegt nicht an dem Code. Windows 10 hat die Zugriffsrechte des Zielordners dem Benutzer entzogen.
    Warum, kann ich gerade nicht nach vollziehen.

    Die Sicherung läuft dann per MS Robocopy.
    Sollte ein Zielordner nicht existieren, wird er von Robocopy angelegt.
    Bei gesperrten Ordner wird meinem Programm früh signalisiert, (Procress Robocopy läuft nicht mehr)
    dass die Sicherung erfolgt ist. Denke das hier mein Timer nicht mehr mitkommt.
    Mein Programm müsste vor Robocopy die Zugriffrechte prüfen.
    Werde mal schauen, ob es da was brauchbares von VB Net gibt.
    Gruß Markus
    Edit:
    Habe von Rod ein Beispiel (etwas abgeändert) gefunden.

    VB.NET-Quellcode

    1. Private Function Ordnerrechte_Vorhanden(ByVal Ordner As String) As Boolean
    2. Dim RGabe As Boolean = False
    3. Try
    4. Dim fp As FileIOPermission = New FileIOPermission(FileIOPermissionAccess.Write Or FileIOPermissionAccess.Read, AccessControlActions.Change, Ordner)
    5. fp.Demand()
    6. RGabe = True
    7. Catch ex As SecurityException
    8. RGabe = False
    9. End Try
    10. Return RGabe
    11. End Function


    Und hier dann die Prüfung:

    VB.NET-Quellcode

    1. If SicherZeile("Zielordner").ToString.StartsWith("\\") Then
    2. If Not My.Computer.Network.IsAvailable Then
    3. SicherZeile("Geplante_Aktion") = CDate(SicherZeile("Geplante_Aktion")).AddMinutes(50)
    4. Kontroll.Info.Info_Setzen(Now, "DS: " & SicherZeile("Bezeichnung").ToString & " Netzwerk Ziel offline.")
    5. Exit Sub
    6. End If
    7. End If
    8. If SicherZeile("Quellordner").ToString.StartsWith("\\") Then
    9. If Not My.Computer.Network.IsAvailable Then
    10. SicherZeile("Geplante_Aktion") = CDate(SicherZeile("Geplante_Aktion")).AddMinutes(50)
    11. Kontroll.Info.Info_Setzen(Now, "DS: " & SicherZeile("Bezeichnung").ToString & " Netzwerk Quelle offline.")
    12. Exit Sub
    13. End If
    14. End If
    15. If Not IO.Directory.Exists(SicherZeile("Quellordner").ToString) Then
    16. SicherZeile("Geplante_Aktion") = CDate(SicherZeile("Geplante_Aktion")).AddMinutes(50)
    17. Kontroll.Info.Info_Setzen(Now, "DS: " & SicherZeile("Bezeichnung").ToString & " Quellordner nicht vorhanden.")
    18. Exit Sub
    19. End If
    20. If Not Ordnerrechte_Vorhanden(SicherZeile("Quellordner").ToString) Then
    21. SicherZeile("Geplante_Aktion") = CDate(SicherZeile("Geplante_Aktion")).AddMinutes(50)
    22. Kontroll.Info.Info_Setzen(Now, "DS: " & SicherZeile("Bezeichnung").ToString & " Rechte Quellordner nicht vorhanden.")
    23. Exit Sub
    24. End If
    25. If IO.Directory.Exists(SicherZeile("Zielordner").ToString) Then
    26. If Not Ordnerrechte_Vorhanden(SicherZeile("Zielordner").ToString) Then
    27. SicherZeile("Geplante_Aktion") = CDate(SicherZeile("Geplante_Aktion")).AddMinutes(50)
    28. Kontroll.Info.Info_Setzen(Now, "DS: " & SicherZeile("Bezeichnung").ToString & " Rechte Zielordner nicht vorhanden.")
    29. Exit Sub
    30. End If
    31. End If
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()