Wie kann ich eine Datenbank ohne Server verwenden?

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Wie kann ich eine Datenbank ohne Server verwenden?

    Hallo zusammen,

    ich hoffe ich bin hier richtig :?: :!:

    Hatte bisher alles per VBA in Excel programmiert und bin auch ziemlich gut zurecht gekommen. Jetzt möchte ich das ganze gerne per Visual Studio 2019 Community realisieren. Nun ist es in Excel recht einfach Daten per VBA einzutragen und in der Tabelle zu übertragen etc.

    Programmieren möchte ich gerne weiterhin mit Visual Basic.

    Zu meinem Vorhaben, ich möchte gerne eine Eingabemaske erstellen und die Daten anschließend in einer Datenbank speichern. Würde dann gerne die Datenbank ohne Server nur auf einem Laufwerk speichern so dass mehere Leute trotzdem daruf zugreifen können. Was optional noch gut wäre das sich ein Login Fenster öffnet wenn ma darauf zugreifen möchte, die Windos Form dazu habe ich gefunden, aber weis nichts wie ich hierzu die Login Daten hintrelege.

    Wie ich die Maske erstelle mit Button, ComboBox etc. ist mir bekannnt und habe ich in VS 2019 auch schon erstellt bzw. probiert.

    Meine Hauptfrage ist wie / wo speichert es die Daten? Was gibt es für Möglichkeiten? Kennt jemand ein gutes Buch das es easy beschreibt für Anfänger oder ein Tutorial wo etwas ähnliches erklärt wird. Habt schon mal versucht mit XML und DATA Set bei Data Set kommt aber immer eine Fehlermeldung (siehe Bild). Hab nur keine Anhnung wie es funktioniert. ?(

    Vielleicht hätte auch jemand ein "fertiges" Program das ich mir das ganze mal ansehen kann und gff. abändern kann und einfach probieren kann, so lerne ich zumindest immer recht einfach dazu.

    Sollte ich Angaben vergessen haben bitte ich um Entschuldigung, kann diese geren aber noch nachreichen.

    Ansonsten hoffe ich auf Eure Unterstüzung und vielen Dank im voraus. :D

    Mfg Steffen

    Verschoben. Titel angepasst. ~Thunderbolt
    Bilder
    • Fehlermeldung.PNG

      6,85 kB, 463×190, 169 mal angesehen

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

    Als Datenbank würde sich z.B. Access „eignen“. Wobei Multiuser Zugriffe da schwierig sein können. Wobei Ein DataSet auch reichen könnte.

    In welcher Programmiersprache willst du das Projekt realisieren? VBA oder VB.Net? Das war für mich nicht ganz eindeutig.
    "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
    Multi-User-DataSet? Eher nicht. Ich weiß gar nicht, ob MultiUser und Datei-Datenbank überhaupt zusammengehen. Was aber nix heißen mag.
    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.

    mrMo schrieb:

    In welcher Programmiersprache willst du das Projekt realisieren? VBA oder VB.Net? Das war für mich nicht ganz eindeutig.


    Hallo vielen Dank für Euere Antworten.

    Würde gerne bei VBA bleiben. Da VB.net ja wieder ganz was anderes ist, aber ich habe bisher in VS2019 kein reines VBA gefunden es ist immer die Endung .net dabei. Gibt es nur VBA in VS üerhaupt oder mussich trotzdem auf vb.net umschwenken?

    falls es nur vba gibt:
    Hat VBA in Visual Studio viele Nachteile im Gegensatz zu VB.net?

    gruß Steffen

    Zitierfehler behoben ~VaporiZed

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

    Hallo,
    Du kannst VBA nicht innerhalb von Visual Studio verwenden. VBA ist das, was es sagt: Visual Basic for Applications und findet nur in den Office-Anwendungen Verwendung. Du wirst dich mMn mit VB.NET auseinander setzen müssen, gerade wenn du eine Anwendung schreiben möchtest, die auch auf Mehrbenutzer-Zugriff ausgelegt ist. Da wirst du dann auch um einen Datenbankserver nicht drum herum kommen. Alles andere wäre eher suboptimal und verursacht früher oder später irgendwelche Probleme. microsoft.com/de-de/sql-server/sql-server-downloads hier gibt es SQL Server Express, einen kostenlosen SQL-Server, der Datenbanken bis zu 4GB? (bin mir gerade nicht 100% sicher) verwalten kann.
    Okay danke schon mal, dann muss ich wohl was neues lernen. Kennst Du evtl . gute Toutorials, Bücher oder Websites wo man sich heierzu spziell auf VB.Net einlernen kann?

    Und zu dem Hinweis bezgl. den Server, welchen soll man hier nutzen? SQl Server oder die spezielle Edition?

    Vollzitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Sorry, ich kenne absolut keine guten Tutorials. Da kann bestimmt jemand anderes was empfehlen. Alternativ findet sich bestimmt etwas über die Forensuche. Deutsche Youtube-Videos zu VB.NET scheinen super veraltet zu sein - für Grundlagen wirds aber sicherlich reichen. Ansonsten findet man viel schon direkt bei Microsoft docs.microsoft.com/de-de/dotnet/visual-basic/
    Wenn du den MS SQL Server verwenden möchtest, dann, wie ich bereits schrieb, die Express Version - also eine der kostenlosen "speziellen" Version.

    Vollzitat entfernt. ~Thunderbolt

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

    Hallo,

    kann mir bitte jemand wieterhelfen? Habe jetzt SQl Server installiert und habe in meiner Form 1 ein DataGridView.

    Die Datenquelle ist eine Access Tabelle aber ich bekommen es nicht verbunden. Habe mal 2 Screenshots angehängt, über Projekt > neue Datenquelle hinzufügen kann ich gar nichts machen das ist Bild 1

    Über Extras > mit Datenbank verbinden, komm ich auch nicht weiter, hier kann ich zumindest die Datei sehen die ich haben möchte aber anschließend kommt die Fehlermeldung wie in Bild 2


    Hoff mir kann jemand weiterhelfen, vielen Dank
    Bilder
    • Datenquelle 2.PNG

      50,53 kB, 947×667, 140 mal angesehen
    • Datenquelle.PNG

      22,51 kB, 749×604, 136 mal angesehen
    Steht doch in der Fehlermeldung. Du musst diesen Treiber installieren.
    "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

    Naalicher schrieb:

    Würde dann gerne die Datenbank ohne Server nur auf einem Laufwerk speichern...
    Da sag ich normal immer: "Prima! Heimspiel für typisiertes Dataset!" - NullProblemo!

    Naalicher schrieb:

    ... so dass mehere Leute trotzdem daruf zugreifen können...
    Da ist typDataset leider raus, jedenfalls wenn damit gemeint ist, dass die mehreren Leute gleichzeitig an den Daten rumfummeln und abspeichern wollen.
    Bei typDataset können zwar viele gleichzeitig einlesen, aber wenn viele gleichzeitig speichern wollen bricht Chaos aus - sowas kann nur eine DB.

    Womit wir beim Thread-Titel wären:

    Naalicher schrieb:

    Wie kann ich eine Datenbank ohne Server verwenden?
    Ich wüsste nicht, wie das gehen sollte - streng genommen ist diese Anforderung paradoxer Quatsch: "Datenbank" ist definiert als etwas, was einen DB-Server hat, der anzusprechen ist.
    Jedenfalls wenn mit "Server" (wie es üblich ist): Datenbank-Provider gemeint ist.
    Hab jetzt jetzt den Dowonload durchgeführt und installiert. Leider weiterhin ohne Erfolg.

    Es heißt immer noch das der ... Provider nicht registriert ist, muss ich mich hier noch irendwo anmelden? Bzw. kann ich auf eine Access Datei auch ohne Server zugreifen, das ich diese lokal im Projektordenr ablege?
    Bilder
    • Provider nicht registriert.PNG

      29,32 kB, 922×533, 112 mal angesehen

    Naalicher schrieb:

    Würde dann gerne die Datenbank ohne Server nur auf einem Laufwerk speichern
    SQLite ist eine dateibasierte DB und kann theoretisch auch Multi-User-Zugriff.
    Aber bei parallelen Schreibvorgängen geht die Performance doch sehr in die Knie.
    Da hilft dann nur noch eine Serverbasierte DB.
    Einen Versuch wäre vielleicht SqlExpress LocalDB wert.
    Da wird der lokale Rechner als DB-Server verwendet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hi Naalicher,

    hier ein Bsp. mit einer .mdb und nicht .accdb
    vorteil bei einer .mdb ist das Access nicht installiert sein muss

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. 'set references to COM Microsoft ADO Ext. 6.0 for DDL and Security
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. '.mdb erstellen
    6. Dim cat As New ADOX.Catalog()
    7. Dim sSQL As String
    8. cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\TestFolder\Test.mdb")
    9. cat = Nothing
    10. 'öffne .mdb
    11. Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\TestFolder\Test.mdb")
    12. conn.Open()
    13. 'tabelle in .mdb erstellen
    14. sSQL = " Create Table tbl_Material"
    15. sSQL &= "( [MA_ID] AutoIncrement CONSTRAINT PRIMARYKEY PRIMARY KEY"
    16. sSQL &= ", [MA_Nr] Int Not Null"
    17. sSQL &= ", [MA_Text] varChar(15)"
    18. sSQL &= ", [TM_UserNameOpend] varChar(35)" 'Record in Edit By User
    19. sSQL &= ", [TM_UserLocked] varChar(15)" 'Record Locked = Status
    20. sSQL &= ")"
    21. Dim cmd As New OleDb.OleDbCommand("", conn)
    22. cmd.CommandText = sSQL
    23. cmd.ExecuteNonQuery()
    24. 'Bsp. Daten
    25. sSQL = "Insert Into tbl_Material (MA_Nr,MA_Text,TM_UserNameOpend,TM_UserLocked)Values(123,'Test','tragl','InEdit')"
    26. ExecuteSQL(conn, sSQL)
    27. sSQL = "Insert Into tbl_Material (MA_Nr,MA_Text)Values(13,'Test2')"
    28. ExecuteSQL(conn, sSQL)
    29. conn.Close()
    30. End Sub
    31. Public Function ExecuteSQL(ByVal Con As OleDb.OleDbConnection, _
    32. ByVal sSQL As String, _
    33. Optional ByRef ErrMessage As String = Nothing, _
    34. Optional ByVal TransAction As _
    35. OleDb.OleDbTransaction = Nothing) As Integer
    36. ErrMessage = Nothing
    37. Try
    38. Dim Result As Integer = 0
    39. Using Cmd As New OleDb.OleDbCommand(sSQL, Con, TransAction)
    40. Result = Cmd.ExecuteNonQuery
    41. End Using
    42. Return Result
    43. Catch ex As Exception
    44. ErrMessage = ex.Message
    45. Return 0
    46. End Try
    47. End Function
    48. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    49. Dim sSql As String
    50. sSql = "Select MA_Nr As [Material Nr] ,MA_Text AS [Bezeichnung],TM_UserNameOpend AS [Locked durch],TM_UserLocked AS Status From tbl_Material;"
    51. Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=E:\TestFolder\Test.mdb")
    52. Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
    53. con.Open()
    54. Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    55. Dim myDataSet As DataSet = New DataSet()
    56. myDA.Fill(myDataSet, "MyT")
    57. DataGridView1.DataSource = myDataSet.Tables("MyT").DefaultView
    58. con.Close()
    59. con = Nothing
    60. End Sub
    61. End Class


    ich kenne nicht dein Wissen mit .mdb oder .accdb aber wie @mrMo schreibt..
    Wobei Multiuser Zugriffe da schwierig sein können

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

    Also ich bin auch gerade dabei ein typisiertes DataTabel in einer Multi-User-Umgebung zu realisieren..
    ..unmöglich ist das nicht!
    Ich hab zentral auf nem shared Ordner die .exe liegen die die DataTable in nem Verzeichnis anlegt welches dann von einem FileWatcher überwacht wird!
    Ich persönlich gestalte es jetzt so das bei jeder Änderung einer Zelle die DataTable geschrieben wird..darauf feuert der Filewatcher und aktualisiert die DataGrids der anderen User.
    Naja, bei vielen Daten könnte es ja passieren, dass zwei User gleichzeitig was ändern und dann versucht wird, das in die Datei zu schreiben. Einer müsste dann rebellieren, weil er kein Zugriff auf die Datei bekommt. Und dann stellt sich auch die Frage, was mit den Daten desjenigen passiert, der den Dateizugriff eben nicht hat.
    Beispiel:
    User A speichert
    User B will speichern, A ist aber gerade noch beim Speichern
    B kann daher nicht speichern, weil er keinen Zugriff auf die XML hat
    FSW meldet B, dass es neue Daten gibt und überschreibt (?) die Änderungen, die B gemacht hat.
    Damit sind die Daten von B flöten.

    Kommt natürlich drauf an, wie viele Daten es gibt und wie lange ein Speichervorgang dauert.
    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.

    Naalicher schrieb:

    Würde dann gerne die Datenbank ohne Server nur auf einem Laufwerk speicher
    Das Problem der parallelen Bearbeitung von Records existiert unabhängig vom verwendeten DB-System immer.
    Das lässt sich nur lösen durch Sperren einzelner Records.
    Auch wenn das DB-System dies unterstützt, muss das vom Programm entsprechend gesteuert werden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ich kenne nicht dein Wissen mit .mdb oder .accdb aber wie @mrMo schreibt..
    Wobei Multiuser Zugriffe da schwierig sein können

    [/quote]

    Danke Dir erstmal, versuche mein Wissen nach und nach aufzubauen habe vorher nur per VBA programmiert. Kennst Du evtl. Tutorials / Bücher die mich bei VB.net weiterbringen, wo wirklich auch von anfang an sind mit SQL Access bzw. die Möglichkeiten die es alt gibt.

    Habebisher immer noch das Problem das ich bei Datenquellen nicht einfügen kann (siehe Bild) beiServer Explorer habe ich mittlerweile hinbekommen meine Datenbank (Access) zu finden und Verbindung ist hergestellt und die Testverbindung hat auchgeklappt.

    Nur warum funktioniert die Datenquelle nicht?
    Bilder
    • Datenquelle 3.PNG

      16,69 kB, 441×723, 90 mal angesehen
    • Server Explorer.PNG

      16,24 kB, 381×513, 82 mal angesehen
    Ich würde das ganze Designer gefummel weg lassen. Bin da nicht so der Freund von.
    @Kasi hat da oben schon was gepostet, ungefähr so kann man das machen. Hier in kurzform ungetestet:

    VB.NET-Quellcode

    1. Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\TestFolder\Test.mdb")
    2. Cmd As New OleDb.OleDbCommand(„Insert into bla...“)
    3. cmd.Connection = con
    4. con.Open()
    5. Cmd.ExecuteNonQuery
    6. con.Close()


    Wenn du auf Designer gefummel stehst, gäbe es hier wohl weitere Infos dazu docs.microsoft.com/de-de/visua…indows-forms?view=vs-2019
    "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