DatenarchivArchiv, log

This commit is contained in:
2026-10-19 07:57:29 +02:00
parent 68bf284a8e
commit e2d177e09e
2 changed files with 108 additions and 28 deletions

View File

@@ -5,6 +5,8 @@ Public Class frmDatenarchivarchiv
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Me.Cursor = Cursors.WaitCursor
@@ -17,44 +19,61 @@ Public Class frmDatenarchivarchiv
If Not Date.TryParse(txtVon._value, datumVon) Then Exit Sub
If Not Date.TryParse(txtBis._value, datumBis) Then Exit Sub
If datumVon.Date > datumBis.Date Then Exit Sub
If datumBis.Date = Date.MaxValue.Date Then Exit Sub
If String.IsNullOrWhiteSpace(txtKategorie.Text) Then Exit Sub
If String.IsNullOrWhiteSpace(txtOrdner.Text) Then Exit Sub
Dim sqlText As String =
"SELECT TOP (" & maxEintraege & ") da.da_id " &
"FROM tblDatenarchiv da " &
"WHERE da.da_vorlage = 0 " &
"AND da.da_kategorie = '" & txtKategorie.Text.Replace("'", "''") & "' " &
"AND da.da_ordner = '" & txtOrdner.Text.Replace("'", "''") & "' " &
"AND da.da_id >= 392150 " &
"AND EXISTS (" &
"SELECT 1 FROM tblDatenarchiv_Collection coll " &
"WHERE coll.coll_daId = da.da_id " &
"AND coll.coll_date >= '" & datumVon.ToString("yyyyMMdd") & "' " &
"AND coll.coll_date < '" & datumBis.AddDays(1).ToString("yyyyMMdd") & "' " &
"AND coll.coll_pfad NOT LIKE '%\\stor01.verag.ost.dmn\DatenArchivArchiv%' " &
"AND coll.coll_pfad NOT LIKE '\\DELETED\%' " &
") ORDER BY da.da_id"
"SELECT TOP (" & maxEintraege & ") da.da_id " &
"FROM tblDatenarchiv da " &
"WHERE da.da_vorlage = 0 " &
"AND da.da_kategorie = '" & txtKategorie.Text.Replace("'", "''") & "' " &
"AND da.da_ordner = '" & txtOrdner.Text.Replace("'", "''") & "' " &
"AND da.da_id >= 392150 " &
"AND EXISTS (" &
"SELECT 1 FROM tblDatenarchiv_Collection coll " &
"WHERE coll.coll_daId = da.da_id " &
"AND coll.coll_date >= '" & datumVon.ToString("yyyyMMdd") & "' " &
"AND coll.coll_date < '" & datumBis.AddDays(1).ToString("yyyyMMdd") & "' " &
"AND coll.coll_pfad NOT LIKE '%\\stor01.verag.ost.dmn\DatenArchivArchiv%' " &
"AND coll.coll_pfad NOT LIKE '\\DELETED\%' " &
") ORDER BY da.da_id"
Dim DT = SQL.loadDgvBySql(sqlText, "FMZOLL")
If DT Is Nothing OrElse DT.Rows.Count = 0 Then Exit Sub
If DT Is Nothing OrElse DT.Rows.Count = 0 Then
MsgBox("Keine Einträge gefunden.", vbInformation)
Exit Sub
End If
If MsgBox("Es werden '" & DT.Rows.Count & "' Einträge verschoben - fortfahren?", vbYesNoCancel) <> vbYes Then Exit Sub
Button1.Enabled = False
RichTextBox1.Clear()
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = DT.Rows.Count
ProgressBar1.Value = 0
Dim erfolgreich As Integer = 0
Dim fehler As Integer = 0
Dim fehlerListe As New List(Of String)
Dim angezeigteFehler As Integer = 0
Dim logOrdner = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "AVISO", "ArchivMigration")
System.IO.Directory.CreateDirectory(logOrdner)
Dim logPfad As String = System.IO.Path.Combine(logOrdner, "ArchivFehler_" & Date.Now.ToString("yyyyMMdd_HHmmss") & ".txt")
System.IO.File.WriteAllText(logPfad, "Archivmigration gestartet: " & Date.Now.ToString("dd.MM.yyyy HH:mm:ss") & Environment.NewLine & Environment.NewLine, System.Text.Encoding.UTF8)
Dim sw As Stopwatch = Stopwatch.StartNew()
For Each ROW As DataRow In DT.Rows
Try
Dim DS = New VERAG_PROG_ALLGEMEIN.cDATENSERVER(ROW("da_id"))
If DS.DATA_LIST.LIST.Count > 0 Then
If DS.moveTo_ARCHIVARCHIV() Then
If DS.moveTo_ARCHIVARCHIV(fehlerListe, logPfad) Then
erfolgreich += 1
Else
fehler += 1
@@ -63,30 +82,68 @@ Public Class frmDatenarchivarchiv
Catch ex2 As Exception
fehler += 1
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex2.Message, "da_id: " & ROW("da_id").ToString() & vbNewLine & ex2.StackTrace, System.Reflection.MethodBase.GetCurrentMethod.Name)
Dim eintrag = Date.Now.ToString("dd.MM.yyyy HH:mm:ss") & " | FEHLER | da_id=" & ROW("da_id").ToString() & " | " & ex2.Message
fehlerListe.Add(eintrag)
System.IO.File.AppendAllText(logPfad, eintrag & Environment.NewLine, System.Text.Encoding.UTF8)
End Try
ProgressBar1.Value += 1
Label1.Text = ProgressBar1.Value & "/" & DT.Rows.Count & " | Fehler: " & fehler
' Neue Fehler laufend in RichTextBox1 anzeigen
If fehlerListe.Count > angezeigteFehler Then
For i As Integer = angezeigteFehler To fehlerListe.Count - 1
RichTextBox1.AppendText(fehlerListe(i) & Environment.NewLine)
Next
If DT.Rows.Count < 10 OrElse ProgressBar1.Value Mod 20 = 0 Then
Me.Refresh()
angezeigteFehler = fehlerListe.Count
RichTextBox1.SelectionStart = RichTextBox1.TextLength
RichTextBox1.ScrollToCaret()
RichTextBox1.Refresh()
End If
' Fortschritt und Statistik aktualisieren
ProgressBar1.Value += 1
Dim laufzeit As TimeSpan = sw.Elapsed
Dim dauer As String = String.Format("{0:00}:{1:00}:{2:00}", CInt(Math.Floor(laufzeit.TotalHours)), laufzeit.Minutes, laufzeit.Seconds)
Label1.Text = ProgressBar1.Value & "/" & DT.Rows.Count & vbNewLine &
"Erfolgreich: " & erfolgreich & vbNewLine &
"Fehler: " & fehler & vbNewLine &
"Laufzeit: " & dauer
ProgressBar1.Refresh()
Label1.Refresh()
' UI-Ereignisse verarbeiten, damit die Anzeige aktuell bleibt
Application.DoEvents()
Next
sw.Stop()
System.IO.File.AppendAllText(logPfad, Environment.NewLine &
"Archivmigration beendet: " & Date.Now.ToString("dd.MM.yyyy HH:mm:ss") &
" | Erfolgreich: " & erfolgreich &
" | Fehler: " & fehler &
" | Laufzeit: " & sw.Elapsed.ToString("hh\:mm\:ss") &
Environment.NewLine, System.Text.Encoding.UTF8)
MsgBox("Archivierung abgeschlossen." & vbNewLine &
"Erfolgreich: " & erfolgreich & vbNewLine &
"Fehler: " & fehler, vbInformation)
"Erfolgreich: " & erfolgreich & vbNewLine &
"Datensätze mit Fehlern: " & fehler & vbNewLine &
"Einzelne Fehler: " & fehlerListe.Count & vbNewLine &
"Laufzeit: " & sw.Elapsed.ToString("hh\:mm\:ss") & vbNewLine & vbNewLine &
"Fehlerprotokoll: " & logPfad, vbInformation)
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodBase.GetCurrentMethod.Name)
Finally
Button1.Enabled = True
Me.Cursor = Cursors.Default
End Try
End Sub
Private Sub frmDatenarchivarchiv_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim monate As New List(Of VERAG_PROG_ALLGEMEIN.MyListItem)