VB und Access Datenbank

  • VB.NET
  • .NET 5–6

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Kasi.

    VB und Access Datenbank

    Hallo zusammen,

    ich wollte ich mal ein bisschen beschäftigen mit VB und Datenbank. Und da ist mir bei Youtube MS Access ins Auge gesprungen. Die Methode finde ich gar nicht so schlecht, weil man denn kein SQL Server brauch oder so. Da ich in meiner Version kein Access dabei habe, habe ich es mir extra gekauft und wollte das auf mein Programmier PC installieren. Da gab es aber Probleme mit der anderen Installation von Excel und co. Und da habe ich es einfach auf ein anderen PC installiert, mit der Hoffnung, da einfach mit Access die Datenbank erstellen und die rüber schieben auf mein eigentlichen Rechner. Das scheint aber nicht zu funktionieren. Ich bekomme immer die Fehlermeldung "Der Microsoft.ACE.OLEDB.12.0 -Provider ist nicht auf dem lokalen Computer registriert." Was heißt das jetzt genau? Kann ich nur die Datenbank in VB einbinden, wenn ich auch Access auf dem PC habe oder kann ich das auch noch anders lösen?

    Vielen Dank im Voraus
    Hetzer
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Es gibt zwei Access-Provider, und man weiss nie, welches der richtige ist, um ihn im ConnectionString zu addressieren.
    Entweder: "Provider=Microsoft.Jet.OLEDB.4.0;..."
    Oder: "Provider=Microsoft.ACE.OLEDB.12.0;..."
    Mir ist es noch nie gelungen, auf Anhieb den richtigen Provider im Connectionstring anzugeben - immer war mein erster Versuch falsch, und der andere wars, der dann funktioniertete.

    Beim Fail jedenfalls kommt genau deine Fehlermeldung aus post#1
    achdusch... - utube-vid!
    ich kenne dein vid nicht, und wills auch nicht kennenlernen.
    "einfach hinzufügen" klingt so, als ob sich der connectionString dann in den Settings wiederfindet.
    Nun musst du womöglich lernen, was die Settings in .Net ühaupt sind. Kurz gesagt: Sie finden sich in den Projekteigenschaften.
    Nun musst du womöglich lernen, was die Projekteigenschaften in .Net ühaupt sind.
    ...
    Also utube ist keine Quelle, wo man .Net programmieren lernt.
    Ich empfehle ein gut Buch, von Löffelmann oder von Kühnel/Leibhardt - beide Bücher kannste googeln und sind umsonst.
    Da sind auch Kapitel drin, die "Settings" und "ProjektEigenschaften" erklären.
    Auch ein Herr Theiss hat ein Gratis-Buch veröfflicht. Das ist glaub das meistgelesene - aber davon ist dringend abzuraten - es ist an zahllosen Stellen inkompetent, und verstösst gnadenlos und ganz unbekümmert gegen allerlei Grundregeln guten Programmierens - solch sollte man sich auf keinen Fall zu eigen machen, weil schlechte Gewohnheiten haften schlimmer an als Sch... am Schuh.
    Hallo Hetzter


    Ich verwende auch Access. Für das erstellen von Dataset und Datenverbindungen ist wichtig zu wissen, dass in Visaul Studio 2022 64Bit und im Visual Studio 2019 32Bit Datenquellen gehen. Daher verwende ich noch noch Visual Studio 2019, mit 64Bit habe keine Erfahrung.

    Gemäss meinen Informationen kann man Office entweder mit 64 Bit oder 32 Bit installieren. - Deinstalliere doch diese nicht benötigten vorinstallierten Programme und probiere es noch einmal mit dem Link von MrMo. (Ich denke das Microsoft Access Database engine 2010 German, dann müsstest du eben Visual Studio 2022 verwenden)


    Wichtig: Wenn Sie die 64-Bit-Version
    installieren, aber stattdessen die 32-Bit-Version verwenden möchten,
    müssen Sie zuerst die 64-Bit-Version deinstallieren, bevor
    Sie die 32-Bit-Version installieren. Dasselbe gilt, wenn Sie die
    32-Bit-Version installiert haben, aber die 64-Bit-Version installieren
    möchten. Siehe Fehler "Office (64-Bit oder 32-Bit) konnte nicht installiert werden".


    support.microsoft.com/de-de/of…95-4d0c-b5fe-6c6f49b8d261

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

    Hetzer schrieb:

    Ich glaube eher, das es nicht an der Einstellung von VB liegt, sondern eher an die Versionen von Visual Studio und Access... bzw das ich MS Access nicht direkt auf dem PC habe wo VB drauf ist....
    Aber du solltest zumindest meinen Vorschlag mit dem anderen ConnectionString mal ausprobieren.
    Bevor du iwas installierst oder sonstwas unternimmst, weil du etwas glaubst.

    Ich glaube zum Beispiel, dass der Access.OCE-Provider bereits im Framework mit drin ist. Wenn man nun aber MS-Office installiert, dann registriert diese Installation den Access.Jet-Provider auf der Maschine.
    Naja, "glauben" ist zuviel gesagt - so könnte ich mir das zusammenreimen.
    Oder es hängt mit 32-bit-Rechner-Architekturen zusammen im Gegensatz zu 64-Bittern.
    Oder wasweissich.
    Jdfs. mit der Änderung des Connectionstrings habich den Fehler bislang auf allen Rechnern wegbekommen (naja - waren ja auch nur fünf).
    Handelt es sich um eine .mdb oder .accdb Access Datenbank/Datei?

    Ist deine Anwendungen 32 oder 64. bit?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi, den Mist hatte ich anfangs auch. Die Rechner brauchen alle entspr. Runtimes und dann kommt's noch drauf an 32 oder 64 bit.
    Die einfachste Lösung: eine Datenbank im alten Format erstellen .accdb und mit jet.oledb arbeiten, das läuft auf jedem Rechner ab Windows 7.

    Hier mal ein Beispiel für den Connection-String:
    $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={Pfad\Datenbank.accdb};Jet OLEDB:Database Password={DATENBANKPASSWORT}"

    Das funzt bei mir. Allerdings wenn du vor hast die Anwendung Multi-User-fähig zu machen, ist Access leider nicht die optimale Lösung.
    Die Datenbank befindet sich ab und an in "inkonsistentem" Zustand - ist wohl ein bekanntes Problem.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    ohne Access zu Installieren funktionert es nur mit einer .mdb (Jet.OLEDB.4.0)
    aber Access musst du "inundauswendig" kennen da du keinerlei Tabellen sehen kannst.

    hier ein Bsp.
    a) mit Erstellung einer .mdb
    b) erstellen und ein paar Tabellen mit SQL
    c) öffne DB und zeige soeben erstellte Tabelle

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Data.OleDb
    3. 'set ref. COM :
    4. 'MS ADO Ext. 6.0 for DDL and Security um .mdb zuerstellen
    5. Public Class Form1
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. '.mdb erstellen
    8. Dim cat As New ADOX.Catalog()
    9. Dim sSQL As String
    10. Dim sSQLInsert1 As String
    11. Dim sSQLInsert2 As String
    12. cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\XMLFolder\Xml2.mdb")
    13. cat = Nothing
    14. 'öffen .mdb
    15. Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\XMLFolder\Xml2.mdb")
    16. conn.Open()
    17. 'tabelle in .mdb erstellen
    18. sSQL = " Create Table tbl_Material"
    19. sSQL &= "( [MA_ID] AutoIncrement CONSTRAINT PRIMARYKEY PRIMARY KEY"
    20. sSQL &= ", [MA_Nr] Int Not Null"
    21. sSQL &= ", [MA_Text] varChar(15)"
    22. sSQL &= ", [TM_UserNameOpend] varChar(35)"
    23. sSQL &= ", [TM_UserLocked] varChar(15)"
    24. sSQL &= ")"
    25. Dim cmd As New OleDb.OleDbCommand("", conn)
    26. cmd.CommandText = sSQL
    27. cmd.ExecuteNonQuery()
    28. sSQLInsert1 = "Insert Into tbl_Material (MA_Nr,MA_Text,TM_UserNameOpend,TM_UserLocked)Values(123,'Test','User1','InEdit')"
    29. Dim cmdInsert1 As New OleDb.OleDbCommand("", conn)
    30. cmdInsert1.CommandText = sSQLInsert1
    31. cmdInsert1.ExecuteNonQuery()
    32. sSQLInsert2 = "Insert Into tbl_Material (MA_Nr,MA_Text)Values(13,'Test2')"
    33. Dim cmdInsert2 As New OleDb.OleDbCommand("", conn)
    34. cmdInsert2.CommandText = sSQLInsert2
    35. cmdInsert2.ExecuteNonQuery()
    36. conn.Close()
    37. End Sub
    38. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    39. Dim sSql As String = "Select MA_Nr As [Material Nr] ,MA_Text AS [Bezeichnung],TM_UserNameOpend AS [Locked durch],TM_UserLocked AS Status From tbl_Material;"
    40. Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=E:\XMLFolder\Xml2.mdb")
    41. Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
    42. con.Open()
    43. Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    44. Dim myDataSet As DataSet = New DataSet()
    45. myDA.Fill(myDataSet, "MyT")
    46. DataGridView1.DataSource = myDataSet.Tables("MyT").DefaultView
    47. con.Close()
    48. con = Nothing
    49. End Sub
    50. End Class


    viel Erfolg