Convertierungs-App läuft nicht mehr

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

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von stonline.

    Convertierungs-App läuft nicht mehr

    Hallo zusammen.

    Zuerst mal: ich bin ein absoluter Rookie und hab von VB Programmierung (und generell von Programmierung) nur wenig mehr Wissen wie ein Volkschüler. :S
    Ich habe vor vielen Jahren einen VB-Code "zusammengebastelt", der eine Textdatei in eine Access-MDB umwandelt.
    Der Code hat bei uns in der Firma bis vor kurzem noch wunderbar funktioniert, dann wurde unser SAP-System (das jede Nacht die Textdateien rausschreibt, die konvertiert werden müssen) auf die neueste Version umgestellt und seitdem läuft der Code nicht mehr.
    Die Textdateien haben sich nicht geändert, das habe ich überprüft.
    Natürlich ist niemand dran Schuld und ich habe mich jetzt daran gemacht, den Code zu reparieren (Visual Studio 2022).
    Wenn ich aus dem Code eine .exe generieren will bekomme ich immer folgende Fehlermeldung (7x):

    Quellcode

    1. "Fehler BC31424 Der Typ "System.Reflection.AssemblyProductAttribute" in Assembly "Conv-App, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" wurde an Assembly "System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" weitergeleitet. Entweder fehlt im Projekt ein Verweis auf "System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", oder der Typ "System.Reflection.AssemblyProductAttribute" fehlt in der Assembly "System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Conv-App X:\Scripting Projects\2023\Conv-App\obj\Release\net6.0\Conv-App.AssemblyInfo.vb 20 Aktiv"

    Ich habe leider absolut keine Ahnung was das bedeutet.
    Der (die) Fehler taucht in folgendem Codesegment auf, das vom System generiert wurde:

    VB.NET-Quellcode

    1. '------------------------------------------------------------------------------
    2. ' <auto-generated>
    3. ' Dieser Code wurde von einem Tool generiert.
    4. ' Laufzeitversion:4.0.30319.42000
    5. '
    6. ' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
    7. ' der Code erneut generiert wird.
    8. ' </auto-generated>
    9. '------------------------------------------------------------------------------
    10. Option Strict Off
    11. Option Explicit On
    12. Imports System
    13. Imports System.Reflection
    14. <Assembly: System.Reflection.AssemblyCompanyAttribute("Conv-App"), _
    15. Assembly: System.Reflection.AssemblyConfigurationAttribute("Release"), _
    16. Assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0"), _
    17. Assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0"), _
    18. Assembly: System.Reflection.AssemblyProductAttribute("Conv-App"), _
    19. Assembly: System.Reflection.AssemblyTitleAttribute("Conv-App"), _
    20. Assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>
    21. 'Von der MSBuild WriteCodeFragment-Klasse generiert.


    Der Fehler hängt anscheinend mit der ta-Variable zusammen bzw. wenn versucht wird, die eingelesenen Werte aus der Textdatei in die Tabelle der MDB zu schreiben.

    VB.NET-Quellcode

    1. Sub GenMDB()
    2. Dim ta As New_DB_ConvertDataSetTableAdapters.DBConvertTableAdapter '<--- hier
    3. Dim s() As String
    4. Dim cont As String
    5. Dim line() As String
    6. Dim i As Integer
    7. Dim t As Integer = 0
    8. Dim StartTime As DateTime
    9. Dim StopTime As DateTime
    10. Dim Duration As TimeSpan
    11. ta.DeleteQuery() '<--- hier
    12. StartTime = DateTime.Now
    13. i = 0
    14. Using reader = New StreamReader(fname)
    15. cont = reader.ReadToEnd
    16. cont = Replace(cont, Chr(34), "")
    17. line = Split(cont, vbCrLf)
    18. End Using
    19. For counter = 1 To line.Length - 1
    20. i += 1
    21. t += 1
    22. Debug.Print(t)
    23. s = line(counter).Split(";"c)
    24. If s.Length > 0 Then
    25. Try
    26. ta.Insert(s(0), s(1), s(2), s(3), s(4), s(5), s(6), s(7), s(8), s(9)) '<--- hier
    27. Catch ex As Exception
    28. 'MessageBox.Show(ex.Message)
    29. 'MessageBox.Show(i)
    30. End Try
    31. End If
    32. Next
    33. FileSystem.FileCopy(startup & "\DB-Convert.mdb", intDir & dbfname)
    34. writer = New StreamWriter(protfile)
    35. StopTime = DateTime.Now
    36. Duration = StopTime.Subtract(StartTime)
    37. writer.Write(i & " rows in database written" & vbCrLf & "Starting Time: " & StartTime.ToString & vbCrLf & "Ending Time: " & StopTime.ToString & vbCrLf & "Duration Time: " & Duration.ToString)
    38. writer.Close()
    39. writer = Nothing
    40. End Sub
    41. End Module


    Hat da irgendjemand eine Idee dazu?
    Bin für jede Hilfe unendlich dankbar. :)

    die Farbe Rot ist der Moderation vorbehalten und wurde ersetzt
    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Kannst du eine Liste mit den aktuellen Verweisen deines Projektes posten?

    Siehst du, wenn du Rechtsklick auf deinem Projekt machst und dort auf Verweise klickst.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    @siycah:
    Im Verweis Manager finde ich unter Projekte und Freigegebene Projekte keine Einträge.
    Nur unter COM erscheint eine lange Liste.

    Hier mal der ganze Code, wie er früher eigentlich funktioniert hat:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Threading
    3. Imports System.Globalization
    4. Module Form1
    5. ReadOnly startup As String = AppContext.BaseDirectory 'Application.StartupPath
    6. ReadOnly intDirAT As String = "\\atdotrsr23\PSX\SAP-DB\1000\"
    7. ReadOnly intDirCH As String = "\\atdotrsr23\PSX\SAP-DB\1400\"
    8. ReadOnly intDirUK As String = "\\atdotrsr23\PSX\SAP-DB\3310\"
    9. ReadOnly intDirCN As String = "\\atdotrsr23\PSX\SAP-DB\9000\"
    10. ReadOnly localPath As String = "\\atdotrsr23\PSX\SAP-DB\"
    11. ReadOnly fNameAT As String = intDirAT & "componentlist_1000.txt"
    12. ReadOnly fNameCH As String = intDirCH & "componentlist_1400.txt"
    13. ReadOnly fNameUK As String = intDirUK & "componentlist_3310.txt"
    14. ReadOnly fNameCN As String = intDirCN & "componentlist_9000.txt"
    15. ReadOnly dbfNameAT As String = "componentlist_1000.mdb"
    16. ReadOnly dbfNameCH As String = "componentlist_1400.mdb"
    17. ReadOnly dbfNameUK As String = "componentlist_3310.mdb"
    18. ReadOnly dbfNameCN As String = "componentlist_9000.mdb"
    19. ReadOnly fNameFinalAT As String = localPath & "FinalAT.txt"
    20. ReadOnly fNameFinalCH As String = localPath & "FinalCH.txt"
    21. ReadOnly fNameFinalUK As String = localPath & "FinalUK.txt"
    22. ReadOnly fNameFinalCN As String = localPath & "FinalCN.txt"
    23. ReadOnly protFileAT As String = localPath & "Protocol_AT.txt"
    24. ReadOnly protFileCH As String = localPath & "Protocol_CH.txt"
    25. ReadOnly protFileUK As String = localPath & "Protocol_UK.txt"
    26. ReadOnly protFileCN As String = localPath & "Protocol_CN.txt"
    27. Dim writer As StreamWriter
    28. Dim fname As String
    29. Dim intDir As String
    30. Dim dbfname As String
    31. Dim protfile As String
    32. Sub Form1()
    33. 'MessageBox.Show(MyString)
    34. ' Sets the culture to German (German)
    35. Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")
    36. ' Sets the UI culture to German (German)
    37. Thread.CurrentThread.CurrentUICulture = New CultureInfo("de-DE")
    38. 'MessageBox.Show(MyString)
    39. If File.Exists(fNameFinalAT) Then
    40. File.Delete(fNameFinalAT)
    41. End If
    42. If File.Exists(fNameFinalCH) Then
    43. File.Delete(fNameFinalCH)
    44. End If
    45. If File.Exists(fNameFinalUK) Then
    46. File.Delete(fNameFinalUK)
    47. End If
    48. If File.Exists(fNameFinalCN) Then
    49. File.Delete(fNameFinalCN)
    50. End If
    51. FileSystem.FileCopy(fNameAT, fNameFinalAT)
    52. FileSystem.FileCopy(fNameCH, fNameFinalCH)
    53. FileSystem.FileCopy(fNameUK, fNameFinalUK)
    54. FileSystem.FileCopy(fNameCN, fNameFinalCN)
    55. ' generating MDB for site AT
    56. fname = fNameFinalAT
    57. intDir = intDirAT
    58. dbfname = dbfNameAT
    59. protfile = protFileAT
    60. GenMDB()
    61. ' generating MDB for site CH
    62. fname = fNameFinalCH
    63. intDir = intDirCH
    64. dbfname = dbfNameCH
    65. protfile = protFileCH
    66. GenMDB()
    67. ' generating MDB for site UK
    68. fname = fNameFinalUK
    69. intDir = intDirUK
    70. dbfname = dbfNameUK
    71. protfile = protFileUK
    72. GenMDB()
    73. ' generating MDB for site CN
    74. fname = fNameFinalCN
    75. intDir = intDirCN
    76. dbfname = dbfNameCN
    77. protfile = protFileCN
    78. GenMDB()
    79. FileClose()
    80. End Sub
    81. Sub GenMDB()
    82. Dim ta As New_DB_ConvertDataSetTableAdapters.DBConvertTableAdapter
    83. Dim s() As String
    84. Dim cont As String
    85. Dim line() As String
    86. Dim i As Integer
    87. Dim t As Integer = 0
    88. Dim StartTime As DateTime
    89. Dim StopTime As DateTime
    90. Dim Duration As TimeSpan
    91. ta.DeleteQuery()
    92. StartTime = DateTime.Now
    93. i = 0
    94. Using reader = New StreamReader(fname)
    95. cont = reader.ReadToEnd
    96. cont = Replace(cont, Chr(34), "")
    97. line = Split(cont, vbCrLf)
    98. End Using
    99. For counter = 1 To line.Length - 1
    100. i += 1
    101. t += 1
    102. Debug.Print(t)
    103. s = line(counter).Split(";"c)
    104. If s.Length > 0 Then
    105. Try
    106. ta.Insert(s(0), s(1), s(2), s(3), s(4), s(5), s(6), s(7), s(8), s(9))
    107. Catch ex As Exception
    108. 'MessageBox.Show(ex.Message)
    109. 'MessageBox.Show(i)
    110. End Try
    111. End If
    112. Next
    113. FileSystem.FileCopy(startup & "\DB-Convert.mdb", intDir & dbfname)
    114. writer = New StreamWriter(protfile)
    115. StopTime = DateTime.Now
    116. Duration = StopTime.Subtract(StartTime)
    117. writer.Write(i & " rows in database written" & vbCrLf & "Starting Time: " & StartTime.ToString & vbCrLf & "Ending Time: " & StopTime.ToString & vbCrLf & "Duration Time: " & Duration.ToString)
    118. writer.Close()
    119. writer = Nothing
    120. End Sub
    121. End Module


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Benutze bitte hier im Forum die Code-Blöcke. Die findest du rechts oben im Editor.
    So kann keiner den Quellcode lesen, ohne ihn vorher rauskopiert zu haben.

    Ich glaube nicht, dass dein Code hier das Problem ist.

    Probier mal, in der NuGet-Konsole install-package system.runtime auszuführen.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Hallo stonline

    Ich bin mir nicht sicher: Ich denke, es liegt an Visual Studio 2022. Access ist doch eine 32Bit Datenbank und nicht eine 64Bit. Probiere mal dein Projekt in Visual Studio 2019 zu laden. Danach kannst Du auch das Dataset anschauen, prüfen ob eine Datenbankverbindung möglich ist.

    Ich würde alle Pfade prüfen und wie schon erwähnt auch die Trennzeichen.

    LG

    stonline schrieb:

    Das ist ein VB.NET Code.


    Bei .net ist die Programmiersprache bei diesem Problem nebensächlich. VB ist nur die Tür, durch die du in den Framework-Schrank greifst, um dort Funktionalität rauszuholen.
    Das Problem könntest du genau so gut mit C# haben.

    stonline schrieb:

    hat leider nichts gebracht, bekomme leider immer noch dieselben Fehlermeldungen.


    Kannst du das Projekt hochladen? Würde ich mir gerne mal lokal anschauen. Es kann sein, dass du das Projekt von .net 4.x auf .net6 hochgezogen hast und dabei etwas schiefgelaufen ist.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    @stonline:
    Bezüglich .NET Framework oder .NET:
    Wie sieht Dein Projekteigenschaftenfenster aus? Die sind nämlich für beide Unterbauten (.NET Framework ist was anderes als .NET) im Design sehr unterschiedlich.
    Vergleiche bitte mit den hiesigen Bildern und gib bescheid.
    Bilder
    • NetFx.png

      44,46 kB, 823×611, 316 mal angesehen
    • Net.png

      30,39 kB, 840×533, 383 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Menü Projekt, ganz unten dann [DeinProjektname]-Eigenschaften
    Ich brauch gar nicht weiter zu schauen, allein Dein Debug-Ordner sagt: .NET 6.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also, zunächst einmal konnte ich den "großen" Compilerfehler beheben.

    Ich habe das NuGet-Paket System.Reflection installiert und in der Datei Conv-App.AssemblyInfo.vb System.Reflection. von Zeilen 18-24 entfernt:

    VB.NET-Quellcode

    1. <Assembly: AssemblyCompanyAttribute("Conv-App"),
    2. Assembly: AssemblyConfigurationAttribute("Release"),
    3. Assembly: AssemblyFileVersionAttribute("1.0.0.0"),
    4. Assembly: AssemblyInformationalVersionAttribute("1.0.0"),
    5. Assembly: AssemblyProductAttribute("Conv-App"),
    6. Assembly: AssemblyTitleAttribute("Conv-App"),
    7. Assembly: AssemblyVersionAttribute("1.0.0.0")>


    Nachhaltig ist die Lösung natürlich nicht. Zumal der nächste Rebuild diesen Fehler wieder einbaut.

    Des Weiteren kam dann der Fehler:

    Quellcode

    1. ​Severity Code Description Project File Line Suppression StateError BC30420 'Sub Main' was not found in 'Conv-App'. Conv-App C:\Users\simon\Downloads\Conv-App\vbc 1 Active


    Wenn ich dann Sub Form1() zu Sub Main() ändere, führt das Ganze aus.

    Das Projekt ist also rundherum kaputt.

    Ich würde dir an dieser Stelle empfehlen, einfach mit einem aktuellen Framework ein neues Projekt aufzusetzen und Stück für Stück die Funktionalität deiner Anwendung wiederherzustellen. Das wird am Ende des Tages bei der Größe weniger Zeit und im Endeffekt auch Geld kosten.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Hallo stonline

    Leider ist es etwas schwierig. Ich würde auch ein .NET Framework Projekt eröffnen, die Datenbank verbinden, damit ich ein Dataset habe. Danach den Code anpassen.
    Mein Problem ist, dass ich eben kein Dataset sehe in deinem Projekt.

    Das Programm sieht sehr einfach aus, da ist es etwas schwierig einen Tipp zu geben, ohne dass man einfach alles neu Programmiert. Das ist ja nicht der Sinn des Forums...
    Aber stell doch einfach mal die leere Access Datei zu Verfügung und ein paar Zeilen von der SAP-Ausgabe. Viellicht habe ich mal kurz Zeit, das Script zu erstellen.

    lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Panter“ ()

    Hallo zusammen.

    Vielen Dank für euren Support und eure Geduld.
    Ich renn hier echt im Kreis.

    Im Anhang findet ihr die leere .mdb und eines der Textfiles, die konvertiert werden.

    Das Problem fängt bei mir schon an, dass ich gar nicht wüsste, wie ich die Datenbank verbinde damit ich ein Dataset habe. :/

    Wie gesagt: absoluter Rookie

    Gruß,
    stonline
    Dateien
    • DB-Convert.mdb

      (266,24 kB, 168 mal heruntergeladen, zuletzt: )
    • FinalCN.txt

      (682,35 kB, 163 mal heruntergeladen, zuletzt: )
    Hallo Stonline

    Anbei mal ein Versuch. Wahrscheinlich musst du im Projektmappen_Explorer - Convertierungs-App Linke Maustaste - Eigenschaften - Einstellungen den Wert ...OLEDB.4.0 auf ...OLEDB.12.0 ändern.

    Was habe ich gemacht:
    - Neues Projekt erstellen - Konsolen-App (.NET Framework)
    - Weitere Fenster - Datenquellen
    - Neue Datenquelle hinzufügen
    - Datenbank
    - Dataset
    - Microsoft Access-Datenbankdatei
    - Access Datenbank ausgewählt
    - Datenbank in Projekt kopieren - JA

    Dein Code hinein kopiert - ein paar Details angepasst.

    Ich hoffe, es läuft.

    LG
    Dateien
    Hallo zusammen.

    @Panter:
    Vielen, vielen Dank für den Code.
    Schaut super aus und ist endlich fehlerfrei.


    Leider habe ich jetzt ein anderes Problem.
    Wenn ich den Code teste, dann bekomme ich folgende Meldung: System.InvalidOperationException: "Der 'Microsoft.Jet.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert." (siehe Bild im Anhang)
    Deswegen habe ich den aktuellen OLEDB-Treibe von Microsoft runtergeladen und installiert, da ich ein 64-Bit System habe, natürlich den 64-Bit Treiber.
    Hat leider nicht funktioniert, Fehlermeldung bleibt die Gleiche.
    Ich habe das dann recherchiert (gegoogelt) und in mehreren Foren gelesen, dass man auch den 32-Bit Treiber installieren soll und damit das Problem behoben wird (wurde auch von mehreren Usern bestätigt).
    Dazu müssen aber alle 64-Bit Officeanwendungen zuerst deinstalliert werden, was ich leider nicht kann, da ich nur lokale Admin-Rechte auf meinem Firmenrechner habe.
    Ich habe eigentlich auch keine Lust dazu, das alles zu deinstallieren und anschließend wieder zu installieren und zu konfigurieren nur wegen diesem einen Treiber.
    Kann doch nicht sein, dass das die einzige Lösung ist.

    Was ist denn, wenn ich einen neuen Code schreibe?
    Passiert das dann auch?

    Gruß und Sorry.

    stonline
    Bilder
    • oledb.png

      48,57 kB, 1.601×271, 394 mal angesehen

    stonline schrieb:

    "Der 'Microsoft.Jet.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert."
    Das ist ein alter Bekannter.
    Es gibt 2 Acces-Provider, und immer der, den man im Connectionstring stehen hat, ist der falsche.
    Der eine ist der Jet-OleDb-Provider, der andere heisst iwie mit ACE-OleDb oder so.
    Musste mal gucken auf ConnectionStrings.com
    (Muss man auch mal einen VbParadise-Tipp zu schreiben, weil die Frage kommt ca. einmal jährlich.)

    ah, ich glaub die beiden heissen (keine Gewähr!):
    • provider=Microsoft.Jet.OLEDB.4.0;
    • provider=Microsoft.Jet.ACE.12.0;
    kann also sein, dasses dein "Microsoft.Jet.OLEDB.12.0" tatsächlich garnet gibt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()