MS Acces 2007 + VB = Fehler

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von SAR-71.

    MS Acces 2007 + VB = Fehler

    Moin,

    ich hab mir eine größere Datenbank mit Acces 2007 erstellt (~100 Datensätze, steigend)
    Ich möchte nun über VB gewisse Werte auslesen und dem enstprechend verarbeiten

    Aber leider kommt ein Fehler wenn ich versuche die DB auszulesen und zwar: "Nicht erkennbares Datenbankformat"
    Hab auch schon googlelt, aber ich komm auf ältere Themen, was da so mitbekommen habe, ist meine Datenbank beschädigt oder einfach zu neu


    Meine Frage: Wie kann ich diesen Fehler beheben (Meinetwegen auch, am besten automatisch, durch formatieren der Tabelle)?







    Mfg.
    SAR

    picoflop schrieb:

    Das hängt von verschiedenen Faktoren ab: Anzahl Datensätze, Code zur Bearbeitung, Lagerort der .mdb Datei (im Netzwerk ist Access nämlich Mist)



    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Shared Function get_all_id()
    2. Dim con As New OleDb.OleDbConnection
    3. Dim cmd As New OleDb.OleDbCommand
    4. Dim reader As OleDb.OleDbDataReader
    5. Dim data As String = ""
    6. con.ConnectionString = _
    7. "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=list.accdb;Persist Security Info=False;"
    8. cmd.Connection = con
    9. cmd.CommandText = "select * from list"
    10. Try
    11. con.Open()
    12. reader = cmd.ExecuteReader()
    13. Do While reader.Read()
    14. data &= reader("id-name") & "," & reader("bezeichung") & "," & reader("wert") & "," & reader("beschreibung") & "#"
    15. Loop
    16. reader.Close()
    17. con.Close()
    18. Catch ex As Exception
    19. MsgBox(ex.Message)
    20. End Try
    21. Return data
    22. End Function


    Anzahl Datensätze:
    aktuell fast 100, es werden mit der Zeit immer mehr Datensätze

    Lageort:
    Im gleichen Pfad, wo sich die .exe (besser gesagt, dll) auch ist


    Kann ich die Leistung noch irgendwie erhöhen?






    Mfg.
    SAR
    Schmeiß mal die string-verkettung raus, die ist nämlich auch ein Performance-Killer!
    Du möchtest nämlich den "System.Text.Stringbuilder" verwenden ...

    Außerdem kann man die Felder auch schon im SQL-Befehl miteinander verknüpfen. Dann ist jeder Datensatz genau ein String - und zwar der gesuchte.


    EDIT:

    VB.NET-Quellcode

    1. Dim s As String = ""
    2. Dim sb As New System.Text.StringBuilder
    3. Dim stp As New Stopwatch
    4. stp.Start()
    5. For i = 1 To 10000
    6. s &= i.ToString
    7. Next
    8. stp.Stop()
    9. Debug.Print(stp.ElapsedMilliseconds)
    10. stp.Reset()
    11. stp.Start()
    12. For i = 1 To 10000
    13. sb.Append(i.ToString)
    14. Next
    15. stp.Stop()
    16. Debug.Print(stp.ElapsedMilliseconds)


    Das erste braucht >500ms, das zweite <10ms !
    Ok, habs jetzt mit dem Stringbuilder gemacht
    Und dadurch satte 5s gespart

    Die 5s sind wohl dann noch ein eingender Fehler, da ich die Funtion sehr häufig aufrufe (Muss ich noch etwas "zusammenfassen", aber wird schon)


    Danke für die Hilfe







    Mfg.
    SAR