Datenbank für mehrere Benutzer

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von jocutus.

    Datenbank für mehrere Benutzer

    Hallo zusammen,
    ich habe ein VB.Net-Programm geschrieben, welches derzeit eine SQL LocalDB als Datenbank hat. Nun soll das Programm aber auf mehreren PCs gleichzeitig laufen, und somit gleichzeitig auf die DB zugreifen. Somit soll die DB (Datenbankdatei) auf einem Netzlaufwerk liegen, auf das alle PCs zugreifen. Leider kann LocalDB das nicht. Ein Server steht auch nicht zur Verfügung, sodass kein SQL Server installiert werden kann. Mit Access wäre das recht einfach. Da können alle PCs auf die Access-Datei zugreifen. Access kommt allerdings nicht mehr in frage, da es durch die permanenten MS-Updates immer wieder zu Fehlern kam, und die AccessDatabaseEngine immer wieder neu installiert werden musste, da die Updates diese zerschossen bzw. überbügelt haben.
    Nun die Frage an euch: Kennt ihr eine Möglichkeit bzw. ein Datenbanksystem, bei dem die Datenbankdatei auf einem Netzlaufwerk liegen kann, und von jedem PC abgerufen werden kann (gleichzeitig)?
    Danke für Eure Hilfe.
    Dieter
    Man kann einen SQL Server auch lokal installieren. Nur muss dann der PC auf dem dieser installiert ist immer an sein.
    "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
    Danke für eure Antworten.
    Eine SQL-Server-Installation, wobei der eine PC immer an sein muss, kommt leider nicht in Betracht.
    SQLLite klingt recht interessant, kenne ich nicht. Aber so wies aussieht scheint das genau das zu sein, was ich suche. Werds gleich mal testen.
    Microsoft SQL Server Compact ist (so weit ich das sehe) dasselbe wie SQL LocalDB. Und da funktioniert der gleichzeitige Zugriff nicht. Oder sehe ich das falsch?
    So, ich habe jetzt SQLite installiert, und muss leider feststellen, dass das wohl nicht so das Wahre ist. So lange die Datenbankdatei auf dem PC liegt, funktioniert alles bestens. Sobald ich die DB aber auf ein Netzlaufwerk verschiebe, bricht die gesamte Performance vollkommen ein. Datenbankzugriff dauert fast eine Minute (Daten abrufehn, speichern etc.). Während dieser Zeit friert das komplette Programm ein. Habe ich einen Fehler bei der Installation gemacht?

    Dank für eure Hilfe.

    Viele Grüße
    Dieter
    Sobald mehrere Benutzer gleichzeitig darauf zugreifen sollten (schreibend) kannst du SQLite etc. vergessen.
    Dir bleibt nur die Möglichkeit einen Server zu installieren der eine Schnittstelle für die Clients anbietet.


    Ekelhafter Workaround:
    Du könntest ein Art "Lock" System implementieren, heißt sobald ein Benutzer (B1) die "Datenquelle" zum bearbeiten öffnet, können alle anderen nur lesend zugreifen und erst wenn B1 den Schreibprozess beendet hat, kann ein anderer schreiben.
    Antivirus 2.0: Der perfekte Schutz gegen Malware > Weitere Informationen :whistling:

    derdieter schrieb:

    Aber selbst reine Leseabfragen dauern unter SQLite ewig


    ​Wie gibst du denn den Pfad an. Ich nehme an du hast ein Netzlaufwerk wo das liegt. In etwa T:\.....

    ​Probiers mal mit UNC Pfaden: Also \\RECHNERNAME\......... oder noch besser mit IP 192.168.0.50\......

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)

    derdieter schrieb:

    Access kommt allerdings nicht mehr in frage, da es durch die permanenten MS-Updates immer wieder zu Fehlern kam, und die AccessDatabaseEngine immer wieder neu installiert werden musste, da die Updates diese zerschossen bzw. überbügelt haben.


    Ich möchte hier noch mal nachhaken.
    Ich nutze in einigen Anwendungen Access(2000er mdb) als Datenbank und habe noch nie Probleme mit den MS Updates gehabt.
    Welche Version benutzt du?
    Falls accdb, könnte es Sinn machen auf "nur" mdb umzustellen.

    Thomas2705 schrieb:

    Darf ich fragen warum du keine MySQL Datenbank verwendest?


    Vielleicht liest du mal den Ausgangspost, dann erklärt sich das von alleine.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Nein, ich kenne keine Datenbank die das kann.
    Ich persönlich würde die Daten in XML-Dateien speichern, auf die kann jeder problemlos zugreifen auf dem Netzlaufwerk.
    Ohne Server bleibt dir allerdings keine andere Wahl, als alle möglichen Kollisionen selbst zu behandeln...
    Ich hab mal vor 20 Jahren sowas gemacht. Eine Kollisionstabelle, die entsprechend die "Doppel-Nutzung" unterbunden hat.
    Bei sehr wenigen Nutzern und recht geringem Zugriff mag das noch funktionieren...

    jocutus schrieb:

    Nein, ich kenne keine Datenbank die das kann.
    Naja, SQLite kann das ja.
    Nur ist sie dem TE nicht performant genug.
    Das entspricht zwar absolut nicht meiner Erfahrung, aber solange @derdieter sich nicht wieder meldet und wir keine genaueren Angaben haben, können wir höchstens im Nebel stochern.

    jocutus schrieb:

    Ohne Server bleibt dir allerdings keine andere Wahl, als alle möglichen Kollisionen selbst zu behandeln
    Das halte ich für keine gute Idee.
    Früher oder später, gibt es da Dreck-Effekte in die eine oder andere Richtung.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Ja, ich gebe zu: es ist wirklich keine gute Idee die Kollisionen selbst zu behandeln. Ich wollte das jetzt auch nicht damit fördern.
    Aber ich kenne das Problem: Man kriegt 2 Bretter und ein Stück Schnur und soll daraus ein Schlachtschiff machen...