Dataset XML Datei mehrere User

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.

    @tragl

    Habe mir Access 2013 besorgt.
    Die erstellt eine ACCDB Datei.
    Habe mir Visual Studio 2019 installiert und versucht die DB zu verbinden.
    Ich bekomme den Fehler :
    The Microsoft.ACE-OLEDB Privider cannot be used in Visual Stiod because it is either 64 bit.

    Könntest du mir sagen was ich falsch mache ?

    Danke dir

    Vulferin schrieb:

    Könntest du mir sagen was ich falsch mache ?

    wie schon von VB1963 gesagt, stelle das komplette Projekt um auf x86.

    Aber auch ein ganz aktuelles Access von z.B. Microsoft 365 kann .accdb erstellen. Da brauchst du nicht extra Access 2013 für ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    Vulferin schrieb:

    Stelle ich das da um wo als CPU steht?

    Die Auswahl wird standarmäßig nicht da sein bei dir. Guck mal oben im Menu Erstellen -> Konfigurationsmanager da musst du dir einmal x86 anlegen und deinem Projekt (Release und Debug)
    zuordnen. Danach kompiliert er alles in x86
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    Vulferin schrieb:

    Mal sehen ob ich meine XML 8n eine Datenbank bekomme, damit wir drauf zugreifen können.


    Hast du schon ausprogrammiert mit XML? Falls nein, mach das erst. Falls ja, dann musst du deine Datenbankverbindung vorher herstellen, danach dann "hochladen" zur Datenbank:

    DataSet und Datenbankverbindung initialisieren (ne separate Klassendatei nutz ich dafür):

    VB.NET-Quellcode

    1. Partial Class DEINDATASET
    2. Public Shared ReadOnly Dts As DEINDATASET
    3. Public _Persistance As DbPersistanceBase
    4. Private _sCon As String = ""
    5. Public _fi As FileInfo = Nothing
    6. Shared Sub New()
    7. Dts = New DEINDATASET
    8. Dts.Persist(False, Dts.Tables.Cast(Of DataTable).Where(Function(tb) tb.PrimaryKey.Length = 0).ToArray) 'Tabellen ohne PrimKey-Column aus Persistierung ausschließen
    9. Dts.SetOleDbProvider()
    10. End Sub
    11. Public Sub SetOleDbProvider()
    12. #If DEBUG Then
    13. Dts._fi = New FileInfo("..\..\..\Daten\DEINEDATENBANK.mdb")
    14. #Else
    15. Dts._fi = New FileInfo($"PFAD\DEINEDATENBANK.mdb")
    16. #End If
    17. Dts._sCon = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={Dts._fi};Jet OLEDB:Database Password=DEINPASSWORT"
    18. Dts._Persistance = New OleDbPersistance(Dts._sCon, Dts)
    19. End Sub
    20. End Class


    Hochladen:

    VB.NET-Quellcode

    1. Public Sub MigrateXmlToDB()
    2. Dts.Clear()
    3. Dts.DataFile("PFAD\DeineXmlDatei.xml").Fill 'es müssen alle Daten im DataSet sein
    4. Dts._Persistance.Connection.OpenUntilIdle
    5. For Each tb In Dts._Persistance.DataSet.GetRankedTables.Where(Function(x) x.PrimaryKey.Length > 0) 'nur Tabellen mit PrimKey in Datenbank speichern
    6. Dim rows = tb.Select("", "")
    7. Try
    8. tb.TablePersist.Update(rows)
    9. Catch ex As Exception
    10. MessageBox.Show(ex.Message)
    11. End Try
    12. Next
    13. End Sub


    Achja, und du brauchst den Persistance-Kram, den ich dir verlinkt hatte. Tabellenstruktur und Datentypen müssen im DataSet und in der Datenbank identisch sein.
    Genauso die Relationen und Aktualisierungs- und Löschregeln - sonst kracht's

    Jo, probierma ob du so zurecht kommst. Das kann als Anfänger echt schwierig sein, deshalb meine Vorlage. :thumbup:

    PS:
    Im Anschluss musst du deinem Programm noch mitteilen, dass es das DataSet nicht mehr aus der XML sondern aus der Datenbank befüllen soll:
    Ich hab das bei mir so gelöst, dass ich bei Bedarf umstellen kann

    VB.NET-Quellcode

    1. App.PersistanceModeXml = False 'Einstellung, ob XML (True) oder Datenbank (False) genutzt werden soll
    2. Select Case App.PersistanceModeXml
    3. Case True : Dts.Register(Me, False).DataFile("PFAD\DeineXmlDatei.xml").Fill
    4. Case False : Dts.Register(Me, False)
    5. End Select


    musst dir dann noch Methoden bauen, dass die DataSet-Tabellen aus der DB gefüllt werden. Alle Daten machen keinen Sinn, wirst du vermutlich nie auf einen Schlag brauchen - also musst du
    an den verschiedenen Programmstellen entscheiden welche Daten du brauchst und die dann selektiert aus der DB holen.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Hallo Zusammen,

    tue mich gerade noch schwer, dass umzusetzen.

    Kurz eine Frage ob der Ansatz der Richtige wäre,

    da ja 5-6 Leute das Programm Starten werden und auf die DB zu greifen werden,
    wie können User 2-5 sehen das User 1 was geändert hat ?

    Gibt es da eine Möglichkeit ?

    Danke euch
    Ich versuche mal weiter mein Glück

    Vulferin schrieb:

    Gibt es da eine Möglichkeit ?

    Indem du die Daten selektiert lädst und bei Bedarf auch ggf. automatisch aktualisieren lässt. Binde aber erstmal die Datenbank erfolgreich ein und befüll' erstmal alles komplett aus der DB in's DataSet bei
    Programmstart. Wenn das klappt und deine Änderungen auch zurückgespeichert werden kannste dich um den Rest kümmern. Geh erstmal vom Multiuser weg und mach die Anwendung für dich alleine
    lauffähig.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Also wenn du mit XML soweit durch bist, dann musst du die DbPersistance die ich verlinkt hatte einmal einbinden und lauffähig bekommen.
    Zum Befüllen gibt's eine Methode namens FillAll(_Dts As DataSet) damit bekommst du alle Daten aus deiner Datenbank in dein DataSet.

    Damit hast du erstmal genug Arbeit. Du solltest zumindest die Grundidee der Persistance verstehen können. Wenn das sitzt, dann musst du dir die
    entsprechenden CustomFills zusammenbauen so wie du sie brauchst, das machen wir aber auch dann erst. Hochladen dann das komplette Projekt (bereinigt ohne .vs, bin, obj-Ordner) und es sollte
    direkt lauffähig sein (Datenbank müsste dann mit drin sein - mit Dummy-Daten oder so). Zum Hochladen hat der ErfinderDesRades ein Tool gebaut (SolutionExplorer) - musste hier mal im Forum
    suchen. Das Programm zippt dein Projekt und schmeißt die nicht benötigten Ordner raus.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: