Verbesserung zur "Kommunikation" von 5 Programmen mit Dts innerhalb einer Solution

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    Verbesserung zur "Kommunikation" von 5 Programmen mit Dts innerhalb einer Solution

    Hallo ihr lieben.
    In meiner Solution gibt es 5 Programme. Es gibt ein Hauptprogramm, welches alle Daten beinhaltet und 4 weitere, davon hat jedes einen bestimmten Zweck.
    1. Artikelprogramm - zeigt Artikelinfos (Name, Preis, usw.) nach EAN Suche (mittels Barcodescanner) und dient zum erstellen von Rechnungen, bzw. Quittungen, Lieferscheinen
    2. Bestellprogramm - dient zum auslösen und speichern von Bestellungen
    3. Etikettenprogramm - dient zum Erstellen von Etiketten fürs Regal
    4. Inventurprogramm - dient den Anlegen einer Inventur, also speichert zu jedem Artikel die Eingetragene Menge und errechnet Inventursumme etc.
    Alle diese 4 Programme haben ein DataSet und bekommen ihre Daten aus dem Hauptprogramm. Mit dem Hauptprogramm kann ich zum Beispiel für jede Firma eine xml Datei erstellen, welche dann vom Bestellprogramm geladen und bearbeitet wird.
    Um dabei keine Bestelldaten zu verlieren, Exportiert das Hauptprogramm die benötigten Daten in eine temporäre xml, welche vom Bestellprogramm gelesen wird.
    Nun werden die gespeicherten Daten mit der temporären Datei verglichen und entsprechend geändert.
    Sinn und Zweck der Übung ist es, dass ich meine Bestell xml auf den NAS kopiere, damit jemand anderes eine Bestellung anlegen kann. Im Anschluss muss ich diese xml dann wieder in den richtigen Ordner, innerhalb meiner Anwendung schieben, damit das Hauptprogramm diese wieder bearbeiten kann.
    Sehr ähnlich läuft es mit den anderen 3 Anwendungen.
    Das Funktioniert in der Praxis recht gut (weil größtenteils innehalb der Anwendung automatisiert), aber nervt ein wenig. Denn wenn ich nun Artikeldaten des Lieferanten "ZooLala" verändere (weil z.B. eine neue Preisliste eingepflegt wird), muss ich zusehen, dass alle anderen Anwendungen aktualisierte Daten erhalten. Also muss ich (automatisiert) die xml des Artikelprogrammes, des Inventurprogrammes, sowie des Etikettenprogrammes, bearbeiten. Ich führe also 3 Subs aus, die teilweise recht lange laufen, weil ja recht viele Daten verglichen werden.
    Welche Möglichkeiten habe ich hier, um dies zu vereinfachen? Wäre es eine Möglichkeit einfach alle Daten im Hauptprogramm zu speichern und dann nur die entsprechenden xml Dateien für die anderen Anwendungen neu zu schreiben? (was ja viel, viel schneller geht, als die Daten vorher noch abgleichen zu müssen)
    Dabei muss aber möglich sein, dass es einen PC gibt auf dem die Daten lokal gespeichert sind. Damit ich auf diesem unabhängig von Internet, oder NAS Zugriff arbeiten kann.
    Hallo,
    gleich vorweg, ich habe das Dts immer vermieden und nie verwendet - deshalb kenne ich das nicht sonderlich gut. Zwei Fragen, warum verwendet jedes Programm ein eigenes Dts? Geht das nicht anders?

    DerSmurf schrieb:

    Welche Möglichkeiten habe ich hier, um dies zu vereinfachen?

    Meiner Ansicht nach alles was mit dem Dts zu tun hat wegschmeißen und auf eine Datenbank (z.B. SQLite, MySql, MSSQL o.a.) inkl. ORM setzen. Denn alle genannten Probleme hättest du nicht, wenn deine Daten zentral für alle Programme zugreifbar in einer Datenbank liegen würden.
    Vielleicht kann man das Dts ja auch einfach "Upgraden", damit das mit einer Datenbank spricht?
    jo, so täte ich auch denken.
    Warum aber überhaupt 5 Programme? kann die Funktionalität nicht auf verschiedene UserControls ein und desselben Programms?
    Ein mir vorstellbarer Grund wäre, es handelt sich um eine Mehrbenutzer-Anwendung.
    Jo, da kommt man um eine Db nicht drumrum.

    Ja, und das Dataset natürlich aus der Db befüllen (vmtl. meint ISlice das mit "upgraden")
    Ja natürlich kann die gesamte Funktionalität innerhalb eines Programmes untergebracht werden.
    Ich habe es aus zwei Gründen damals so gehandhabt.
    1. Wollte ich die Datenmenge in meinem Hauptprogramm etwas kleiner halten. Hier weiß ich mittlerweile, dass das wohl Schwachsinn ist. Zumal sich die Datenmenge dadurch ja eigentlich nur erhöht.
    Wenn ich z.b. im Hauptprogramm 15.000 Artikel gespeichert habe, dann habe ich im Etikettenprogramm ja die gleichen 15.000 Artikel, plus Zusatzdaten zum Etiketten erstellen.
    Starte ich nun beide Anwendungen gleichzeitig (was in der Praxis natürlich passiert), habe ich meine 15.000 Artikel zweimal im Ram. Wäre alles innerhalb einer Anndwendung, sind doch dann die Datenmengen (deutlich) kleiner.
    Der einzige (minimale) Nachteil der entsteht, ist dass das laden und schreiben der xml ins Dataset und andersrum, vielleicht 2 bis 3 Sekunden länger dauert.
    Stimmt das so? Und diese Überlegung war der absolute Schwachsinn?

    Der zweite Grund ist, dass eben eine andere Person etwas bestellen kann, während ich am Programm etwas anderes mache. Also wie @ErfinderDesRades richtig vermutet eine Mehrbenutzer Anwendung.
    Allerdings sehr, sehr eingeschränkt. Denn es passiert in der Praxis nur extrem selten.
    Es lief in der Vergangenheit eigentlich den ganzen Tag mein "Artikelprogramm" auf einem separaten PC, um z. iB. mal schnell nen Artikel einzuscannen, und einen Preis zu erhalten.
    Durch eine neue Kasse, entfällt jetzt aber das Auszeichnen eines jeden Artikels (es gibt halt nur noch ein Etikett vor der Ware - wie sich das halt gehört). Der PC ist daher nicht mehr für diesen Zweck in Verwendung.
    Ab und an wird er nochmal eingeschaltet, um eine Rechnung zu erstellen, wenn ein Kunde Ware verkauft (Also wenn wir z.B. Tiere von Privat ankaufen).
    Hier ist es aber kein Beinbruch, wenn die Daten nicht Topaktuell sind und diese Anwendung speichert auch nichts, sie kann das DataSet nur lesen und nicht schreiben.
    Also hier wäre z.B. denkbar, die benötigten DataTable aus dem Dts des Hauptprogrammes beim speichern (also wenn das Hauptprogramm seine Daten in eine xml schreibt), zusätzlich in eine xml auf dem NAS zu zu speichern.

    Etwas anders sieht es beim Bestellprogramm aus. Hier habe ich mich damals entschieden (ebenfalls aus dem DatenMengeGrund oben) für jede Firma eine eigene xml Datei zu erzeugen.
    Es wird also für den Lieferanten "Futterstube" eine xml erzeugt, welche alle seine Artikel enthält. Diese kann dann entsprechend im Bestellprogramm geöffnet werden und eine Bestellung, oder ein Bestand innerhalb dieser xml gespeichert werden.
    Das Hauptprogramm hat dabei keine Möglichkeit diese "Bestell"xml zu öffnen. Damit die Artikeldaten innerhalb dieser Bestell xml aktuell bleiben wirds etwas umständlich:
    Ich habe im Hauptprogramm eine Sub erstellt, welche alle Artikel der Firma Futterstube in ein temporäres DataSet schreibt und dieses in eine xml speichert.
    Dann wird mittels Paramater das Bestellprogramm gestartet und eben diese xml eingelesen. Es wird nun jeder Artikel (anhand der Art.Nr) verglichen. Also wenn Art.Nr. in beiden DataSets vorhanden, wird ggf. der Name, der Preis, die Ve, der EAN, usw. angepasst. Außerdem werden auf diese Art neue Artikel angelegt (Wenn Artikel nur in TempDts vorhanden), oder gelöscht (wenn Artikel im TempDts nicht vorhanden).
    Diese neue xml kann nun außerdem zusätzlich automatisch auf dem NAS abgelegt werden, damit von einem anderen PC zugegriffen werden kann.
    Das funktioniert wie gesagt, alles mit einem Knopfdruck, aber dauert ein wenig und muss natürlich vor jeder Bestellung ausgeführt werden, auch wenn ich sie mache, damit die Daten aktuell sind. Also eigentlich der letzte Mist.
    Außerdem muss ich natürlich die xml manuell wieder in meine Verzeichnisstruktur kopieren, wenn sie von einem anderen PC bearbeitet wurde.

    Nun habe ich mir gedacht, wenn ich mir keine Gedanken über die Datenmenge im Dts machen muss, und mein Hauptprogramm das alles übernimmt, entfällt natürlich jegliches Daten hin- und herschubsen, weil ich ja immer mit den gleichen Daten arbeite.
    Ich brauche also kein Etikettenprogramm mehr aktualisieren, und keine Bestelldatei aktualisieren, weil alle Daten innerhalb einer Anwendung (und damit eben immer aktuell) vorliegen.
    Das würde den Bedienkomfort sehr erhöhen, das aktualisieren des Etikettenprogrammes dauert bei 15.000 Artikeln schon eine merkbare Zeit (und passiert mehrmals täglich).
    Der Nachteil ist aber dann, dass mit dieser Variante ein arbeiten auf mehreren Geräten (was wie gesagt nur höchst selten vorkommt) nicht möglich ist.

    Folgende Lösung habe ich mir dazu überlegt:
    Das Hauptprogramm macht also alles mit einem einzigen DataSet. Trotzdem gibt es noch die "Einzelanwendungen". Das Hauptprogramm erhält die Möglichkeit eine neue xml zu erzeugen.
    Also wenn nun jemand anderes eine Bestellung von Futterstube machen soll, klicke ich auf Bestellung exportieren, wähle die entsprechende Firma aus und es werden nur die benötigten Daten in eine xml geschrieben, welche dann vom Bestellprogramm (und damit auf einem anderen PC) lesbar sind. Diese xml kann ich dann innerhalb meines Hauptprogrammes öffnen, um die Daten zu importieren.
    Gleiches mache ich dann auch mit dem Etikettenprogramm. Es wird eine xml erzeugt, die vom Etikettenprogramm gelesen werden kann. Diese xml kann ich dann auch in mein Hauptprogramm einlesen, um hier die Artikeldaten ggf. um neue Daten zu ergänzen.
    Es gibt ohnehin eine Funktion um Dateien zu öffnen (auch per DragNDrop), um z.B. Rechnungen innerhalb der Programm Ordnerstruktur abzulegen. Das wäre also sogar halbwegs komfortabel. xml laden, auswählen was es ist (Bestellung, Etiketten) und die Sub schreibt die Daten ins Dts.)
    Dabei sollte ja das reine Schreiben der Daten in sehr wenigen Sekunden erledigt sein. Lediglich das Einlesen der Daten ins Hauptprogramm könnte ein wenig dauern, damit könnte ich in der Praxis aber leben.

    Und bitte nicht falsch verstehen. Ich bin nicht grundsätzlich gegen eine Datenbank. Auch wenn ich es etwas anders sehe als @ISliceUrPanties. Ein Dts ist für mich nichts was "upgegradet" gehört. Ich bin mehr als zufrieden damit.
    Dennoch würde ich natürlich auch eine Datenbank verwenden, wenn es einen Mehrwert gibt.
    Allerdings ist die Bedingung (und das ist wichtiger als der Bedienkomfort), dass meine Anwendung jederzeit und überall offline nutzbar sein muss.
    Und das ist doch mit einer Datenbank nicht möglich? Oder verstehe ich da was falsch? Mit einer Datenbank würde ich mein Dts nicht aus einer xml bespeisen, sondern eben aus dieser Datenbank - die ja irgendwo sein muss.
    Damit alle drauf zugreifen können, bleiben ja nur mein NAS, oder das Internet. Also kann ich doch mit meinem PC bei mir zuhause - hinten unterm Baum - wos kein Internet (und auch kein Handyempfang) gibt, nicht mehr arbeiten?

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

    DerSmurf schrieb:

    Damit alle drauf zugreifen können, bleiben ja nur mein NAS, oder das Internet. Also kann ich doch mit meinem PC bei mir zuhause - hinten unterm Baum - wos kein Internet (und auch kein Handyempfang) gibt, nicht mehr arbeiten?
    kannst du denn mit Dataset zuhause unterm Baum damit arbeiten?
    Und während du zuhause unterm Baum - kann währenddessen im Geschäft auch jemand damit arbeiten? (das wäre ja wunderlich - wie funktioniert denn das?)

    ErfinderDesRades schrieb:

    kannst du denn mit Dataset zuhause unterm Baum damit arbeiten?
    Mit PC meine ich meinen Laptop, auf dem sich das ganze Gedöns befindet. Also ja, kann ich ganz wunderbar.

    ErfinderDesRades schrieb:

    Und während du zuhause unterm Baum - kann währenddessen im Geschäft auch jemand damit arbeiten? (das wäre ja wunderlich - wie funktioniert denn das?)

    Die Frage verstehe ich nicht, denn die Antwort ist wohl offensichtlich. Aber nagut - in der Hoffnung, dass meine beiden Fragen, aus dem letzten Post beantwortet werden, Spiele ich Mal mit.
    Nein, während ich unterm Baum sitze, kann natürlich keiner damit arbeiten.
    Allerdings passiert es nur höchst selten, dass ich während der Öffnungszeiten nicht anwesend bin. Wenn es doch mal passiert, bleibt mein Laptop dort (und ich kann nicht - will aber auch nicht - am Programm arbeiten).
    Wenn es allerdings noch unerledigte Dinge gibt, passiert es nicht selten, dass ich dies Sonntags mache und dann gerne in Ruhe, mit ein bisschen Aussicht.
    Dann wär's trotzdem sinnvoll, du mietest dir eine Datenbank an (ms-sql oder mysql/mariadb) und packst alle 5 Programme in 1 rein.
    Die Datenbank ist dann von überall erreichbar - und wenn's nur selten vorkommt, immernoch besser als die jetzige Konstellation. Und du brauchste eben nix mehr von einer in die
    andere Anwendung verschieben etc.

    Jeder User öffnet seine Instanz und bekommt die für ihn benötigten Daten in's DataSet geladen aus der Datenbank raus - hier ist die Krux eben, nur das aus der DB zu holen,
    was auch gebraucht wird. Glaub mir, wenn du 15.000 Artikel oder meinetwegen 15.000 andere Datensätze hast und die komplett verfügbar gemacht werden, dann kommt DtsOnly
    an seine Grenzen. Da gibt's dann Ladezeiten die jenseits von gut und böse sind.

    Edit:

    DerSmurf schrieb:

    dass meine Anwendung jederzeit und überall offline nutzbar sein muss.


    Sorry, grad erst gelesen. Dann bliebe dir nur noch der Weg deinen Laptop während der Dienstzeit als "Server" bereitzustellen. Sprich Dateifreigabe auf die darauf enthaltene Access-Datenbank (die zickt allerdings gerne rum) - oder du lässt da einen SQL-Express oder MySQL-Server drauf laufen.
    Auf den Verbinden sich dann die anderen User auf der Arbeit, wenn dein Laptop vor Ort, eingeschaltet und mit dem Netzwerk verbunden ist. Wenn du zu Hause bist greifst du eben (bzw. generell mit deinem Laptop) dann über "localhost" auf den DB-Server zu.

    Von Access würde ich dir abraten, das macht gerade mit Multi-User-Zugriff gerne Probleme. Ich kann's nur derzeit nicht anders lösen mit meinem Programm (unsere IT stellt sich nach wie vor quer)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

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

    DerSmurf schrieb:

    Nein, während ich unterm Baum sitze, kann natürlich keiner damit arbeiten.
    Folglich würde eine lokale DB auf deim Laptop ja reichen, oder? Das wäre dann ja offline nutzbar.

    Aber schon ärgerlich: Was du mit deine 5 Programme erreichen wolltest - Speichersparsamkeit - verkehrt sich nu ins krasse Gegenteil, weil glaub unter 1GB geht SqlServer überhaupt nicht an.

    DerSmurf schrieb:

    in der Hoffnung, dass meine beiden Fragen, aus dem letzten Post beantwortet werden,...
    sorry - welche Fragen waren das nochmal?


    tragl schrieb:

    Glaub mir, wenn du 15.000 Artikel oder meinetwegen 15.000 andere Datensätze hast und die komplett verfügbar gemacht werden, dann kommt DtsOnly
    an seine Grenzen. Da gibt's dann Ladezeiten die jenseits von gut und böse sind.

    Also es sind aktuell 12.300 Artikel, eine handvoll andere Daten (nie sehr viel, 200 Adressen, 50 Lieferanten, 10 Warengruppen, usw.), und seid 12 jahren für jeden Tag 10 Warengruppeneinnahmen. Die xml des Hauptprogrammes ist 17MB groß.
    Es fühlt sich aber in der Bedienung nicht so an, als würde ich auch nur am Limit kratzen.
    Die xml des Etikettenprogrammes ist 5MB groß und alle Bestelldateien zusammen kommen auf 12MB.
    Also ist glaube ich auch die gesamt Menge für ein DataSet leicht handlebar, oder?

    Ich mach mal Nummern ran, dann isses vielleicht leichter:
    1. Es gibt eine Sache, die ich nicht verstehe. Warum muss ich jetzt auf einmal eine Datenbank nehmen? Ob nun lokal, oder sonstwo?
    Was spricht auf einmal gegen das DataSet?
    Als ich damals mit der Anwendung gestartet bin, hieß es vom @ErfinderDesRades "nimm Dts", wenn das an seine Grenzen kommt, melde dich und wir stöpseln ne Datenbank ran.
    Nun mache ich das Programm aus verschiedenen Gründen neu und es heißt:

    ErfinderDesRades schrieb:

    Folglich würde eine lokale DB auf deim Laptop ja reichen, oder? Das wäre dann ja offline nutzbar.

    Also, ich bin natürlich nicht grundsätzlich gegen Datenbank (wenn sie offline nutzbar ist). Aber warum ist es jetzt auf einmal anders, und es muss scheinbar eine DB her?

    Und hier nochmal meine Fragen aus dem Vorpost:
    2.
    Spoiler anzeigen

    DerSmurf schrieb:

    Wollte ich die Datenmenge in meinem Hauptprogramm etwas kleiner halten. Hier weiß ich mittlerweile, dass das wohl Schwachsinn ist. Zumal sich die Datenmenge dadurch ja eigentlich nur erhöht.
    Wenn ich z.b. im Hauptprogramm 15.000 Artikel gespeichert habe, dann habe ich im Etikettenprogramm ja die gleichen 15.000 Artikel, plus Zusatzdaten zum Etiketten erstellen.
    Starte ich nun beide Anwendungen gleichzeitig (was in der Praxis natürlich passiert), habe ich meine 15.000 Artikel zweimal im Ram. Wäre alles innerhalb einer Anndwendung, sind doch dann die Datenmengen (deutlich) kleiner.
    Der einzige (minimale) Nachteil der entsteht, ist dass das laden und schreiben der xml ins Dataset und andersrum, vielleicht 2 bis 3 Sekunden länger dauert.
    Stimmt das so? Und diese Überlegung war der absolute Schwachsinn?

    Also es gibt keinen Grund, die Daten nicht innerhalb einer Anwendung zu speichern?

    3. Was spricht gegen diese Lösung (unter der Berücksichtigung, dass das ganze Offline laufen MUSS)
    Spoiler anzeigen

    DerSmurf schrieb:

    Folgende Lösung habe ich mir dazu überlegt:
    Das Hauptprogramm macht also alles mit einem einzigen DataSet. Trotzdem gibt es noch die "Einzelanwendungen". Das Hauptprogramm erhält die Möglichkeit eine neue xml zu erzeugen.
    Also wenn nun jemand anderes eine Bestellung von Futterstube machen soll, klicke ich auf Bestellung exportieren, wähle die entsprechende Firma aus und es werden nur die benötigten Daten in eine xml geschrieben, welche dann vom Bestellprogramm (und damit auf einem anderen PC) lesbar sind. Diese xml kann ich dann innerhalb meines Hauptprogrammes öffnen, um die Daten zu importieren.
    Gleiches mache ich dann auch mit dem Etikettenprogramm. Es wird eine xml erzeugt, die vom Etikettenprogramm gelesen werden kann. Diese xml kann ich dann auch in mein Hauptprogramm einlesen, um hier die Artikeldaten ggf. um neue Daten zu ergänzen.
    Es gibt ohnehin eine Funktion um Dateien zu öffnen (auch per DragNDrop), um z.B. Rechnungen innerhalb der Programm Ordnerstruktur abzulegen. Das wäre also sogar halbwegs komfortabel. xml laden, auswählen was es ist (Bestellung, Etiketten) und die Sub schreibt die Daten ins Dts.)
    Dabei sollte ja das reine Schreiben der Daten in sehr wenigen Sekunden erledigt sein. Lediglich das Einlesen der Daten ins Hauptprogramm könnte ein wenig dauern, damit könnte ich in der Praxis aber leben.


    Edit: Wenns hilfreich ist, mache ich mal Screenshots der DataSets mit Angaben wie viel da drin gespeichert ist.

    DerSmurf schrieb:

    Warum muss ich jetzt auf einmal eine Datenbank nehmen? Ob nun lokal, oder sonstwo?
    Was spricht auf einmal gegen das DataSet?


    Das DataSet bleibt nach wie vor bestehen. Nur wird nicht mehr in eine XML gespeichert und davon gelesen, sondern es läuft über eine Datenbank. Wenn du wie ich schon geschrieben hatte
    auf deinem Laptop einen SQL-Express-Server laufen lässt dann kannst du offline drauf zugreifen, wenn der Laptop im Firmennetz hängt dann können auch deine Kollegen dran.

    DataSet-XML ist eben nicht "Mehrbenutzer-Fähig", da bleibt der Weg über Datenbank nicht aus. Ein bisschen was zu tun wäre dann schon noch, aber das "dranstöpseln" geht recht easy, wenn man
    weiß wie.

    der einzige Nachteil: Du musst die Tabellen immer im DataSet UND in der Datenbank gleich halten. Heißt fügst du eine Spalte/Relation etc. hinzu oder entfernst die, dann muss das an beiden Stellen erfolgen.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ah jetzt kommt Licht ins Dunkel.
    Also mache ich mit meiner Anwendung weiter und richte es erstmal so ein, dass alle Daten im DTS dieses Programms gespeichert werden können. (Also aus 5 Programmen mach ich erstmal 1).
    Wenn das fertig ist, richte ich den SQL Express Server lokal auf meinem Laptop ein.
    Wenn dieser im Firmennetzwerk hängt, wird die Datenbank im Netzwerk verfügbar, wenn nicht, habe ich sie nur lokal.
    Dabei gibt es nur den einen Nachteil mit DB änderungen an zwei Stellen (wobei sich die Änderungen im DTS bei einer fertigen Anwendung ja in Grenzen halten)

    Dafür spare ich mir das verteilen der Daten zwischen verschiedenen Anwendungen.
    Weitere Vorteile habe ich aber nicht.

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

    DerSmurf schrieb:

    wobei sich die Änderungen im DTS bei einer fertigen Anwendung ja in Grenzen halten


    im DTS halten sich die Änderungen in Grenzen, am Programm selbst musst doch noch an ein paar Stellen was tun.

    Prinzipiell würde ich wie folgt vorgehen:

    - Das ganze Datenbank-gewurschtel muss eingebaut werden (Stichwort: DbPersistance von @ErfinderDesRades)
    - Tabellen und Relationen in der Datenbank erstellen
    - Die bereits vorhandenen Daten aus der XML-Datei in die Datenbank übermitteln
    - XML abschalten und erstmal ALLE Daten aus der DB ziehen, nachschauen ob soweit alles komplett ist
    - wenn das passt, dann an den jeweiligen Programmstellen "Custom-Fills" bauen, die dir eben nur die benötigten Daten aus der Datenbank in's DataSet laden: du wirst ja nicht immer alle Artikel oder alle Bestellungen oder was weiß ich brauchen.


    Mach' dir am besten ne kleine Testanwendung, wo du die Persistance nachträglich einbaust und dann probier' ein bisschen mit SQL Express rum - ich hab im Kopf, dass das nicht gaaanz so Easy ist.
    Es macht da auch Sinn, dass die Berechtigungen für den DB-Server beschnitten werden (sprich du legst da am besten einen "AppUser" oder sowas an, der eben und lesen/schreiben darf). Und dann müssen deine Anwendungsinstanzen
    die IP-Adresse deines Laptops kennen, um sich auf den Datenbankserver verbinden zu können. Bei deinem Laptop musst du dann allerdings mit localhost arbeiten, denn die IP wird sich vermutlich ändern jenachdem
    ob du im Heim- oder Firmennetzwerk bist.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Jo mach das ma. Ich kann dich dann bei Bedarf unterstützen, hab den Kram ja hinter mir von Dts auf DB zu wechseln bzw. die nachträglich anzubinden.
    Nur wegen SQL Express musste dich selbst schlau machen
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ich bin noch irritiert von wegen der Mehrbenutzer. Derzeit hast du 5 Proggis auf demselben Laptop.
    Da kann doch garkeine Mehrbenutzerei auftreten - mehrere Benutzer drücken doch nicht gleichzeitig auf deiner Tastatur rum.
    Und ohne echte Mehrbenutzung biste wahrscheinlich alle Probleme bereits los, sobald du aus deine 5 Proggis eines gemacht hast.
    Ich bringe mal Licht ins dunkel :o)
    Nehmen wir das Hauptprogramm und das Bestellprogramm.
    Im Hauptprogramm (welches nur auf meinem PC ausgeführt wird), werden sämtliche Daten (also Artikel, Einnahmen, Adressen, Kundenbestellungen, etc - einfach alles) gespeichert.
    Das Bestellprogramm greift auf meine Bestell xml zu - hier gibt es für jede Firma eine.
    Ich kann natürlich einstellen, an welcher Stelle im Dateisystem nach diesen xml Dateien gesucht werden soll.
    Standartmäßig liegt das Bestellprogramm innerhalb meiner Hauptanwendung, sodass diese auf die Bestell xml zugreifen kann.
    Dabei speichert das Hauptprogramm keinerlei Bestelldaten, diese sind alle im Bestellprogramm (bzw. in den einzelnen xml).
    Der Nachteil ist nun, dass ich diese Bestell xml natürlich aktuell halten muss. Wenn ich also von der Firma HansiFutter 5 neue Artikel im Hauptpgoramm anlege und von zwei anderen Artikeln den EK ändere, muss ich diese Änderungen auch in die Bestell xml exportieren. Das ist sehr lästig.
    Vorteil ist aber, dass ich eben eine xml auf den NAS schieben kann (hierfür habe ich auch eine Funktion im Hauptprogramm, welches die Daten aktualisiert und die xml kopiert), damit jemand anderes (mit einem anderen PC auf dem das Bestellprogramm vorhanden ist) hier eine Bestellung machen kann. Im Anschluss kopiere ich die xml vom NAS wieder in den Ordner wo sie hingehört und habe "eine Art Mehrbenutzeranwendung".
    Und Punkt 2, warum das so ist wie es ist, ist eben der Gedanke, das DataSet im Hauptprogramm kleiner zu halten (weil eben z.B. keine Bestellungen dort gespeichert sind).

    Nun ist wohl aber diese "DatensparÜberlegung" mehr als fraglich. Und auch der praktische Nutzen des "Bestell xml aktuell halten" ist mehr als fraglich, bzw. in der Regel sehr lästig.

    ErfinderDesRades schrieb:

    Und ohne echte Mehrbenutzung biste wahrscheinlich alle Probleme bereits los, sobald du aus deine 5 Proggis eines gemacht hast.

    Das ist absolut korrekt. Wenn ich alle Programme in eine Anwendung gebracht habe (wo ich gerade bei bin), bin ich zumindest das Aktuell halten Problem los.
    Dann ist es aber nicht mehr möglich auf einem anderen PC zu bestellen. Dafür muss noch eine Lösung her.

    Hier gibt es nun zwei Ansätze.
    1. Der Vorschlag von @tragl: Die SQL Express Datenbank lokal auf meinem PC - auf die dann auch andere PCs zugreifen können.
    Nachteil ist aber, dass das ganze ja nur funktioniert, wenn mein PC in der Firma vorhanden ist (was er aber während der Öffnungszeiten eigentlich immer ist)
    Wobei hier die Frage ist, ob ich den Standort der DB nicht auch zwischen lokal und NAS wechseln könnte.

    2. Eine Speicherung aller Daten im DataSet. Und zusätzlich eine Exportfunktion (ähnlich wie es jetzt schon ist). Wenn jemand anderes eine Bestellung machen soll, exportiere ich die benötigten Daten in eine xml, die dann von einem anderen PC gelesen werden kann. Anschließend, lade ich diese xml in mein Hauptprogramm, um die dortigen Daten ins eigentliche DataSet (des Hauptprogrammes) zu schreiben.

    Mein Hauptproblem ist leider, dass ich von Datenbank 0 Ahnung habe. Ich weiß also nicht wie praxistauglich das für meinen Fall wäre.
    Denn es ergeben sich daraus ja auch weitere Vorteile. Meine Frau könnte auf ihrem PC die gleiche Anwendung wie ich verwenden. (Was ja aktuell einfach nicht geht)

    DerSmurf schrieb:

    Eine Speicherung aller Daten im DataSet. Und zusätzlich eine Exportfunktion (ähnlich wie es jetzt schon ist)

    jo dann haste den Quatsch wieder an den Hacken

    DerSmurf schrieb:

    Wobei hier die Frage ist, ob ich den Standort der DB nicht auch zwischen lokal und NAS wechseln könnte.

    Einen Tod wirst du sterben müssen. Käme jetzt drauf an, was für einen NAS ihr nutzt. Wenn das was namhaftes ist, kann man auf dem NAS ggf. einen DB-Server installieren (als Docker meistens) - dann hast du eben den Nachteil, dass du von deinem Baum-Platz wo's kein Internet gibt nicht arbeiten kannst.

    Du kannst allerdings ohne Internet arbeiten, wenn der Datenbank-Server auf deinem Laptop liegt - der Nachteil ist, dass die Leute in der Firma dann nicht mehr arbeiten können. Die o.g. Methode (einen DB-Server im Firmennetz) ist die wohl praktikabelste. Dann mach auf der Firma, was du eben zu machen hast
    und an deinem Baum-Platz schalte ab und genieß deine Freizeit - so sollte es eigentlich auch sein. Btw. könntest du an deinem Baum-Platz ja trotzdem programmieren. Dazu machste dir nen Abbild der Datenbank auf deinen Laptop und nimmst die als Entwicklungs-Datenbank ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ich habe das nochmal ausgeführt, will ich den Post von @ErfinderDesRades als Frage verstehen habe.

    Mein NAS ist ein billiger USB Stick an der Fritz Box. Das reicht bei mir aus, um mal schnell nen Lieferschein auf anderen PC verfügbar zu machen, oder eben eine XML hin und her zu schubsen.
    Ich glaube die Version mit der DB auf meinem PC ist mir am angenehmsten. Aber ich habe noch ein bisschen Zeit abzuwägen, bis mein Programm fertig ist.

    Kannst du mir sagen, ob es Performance Unterschiede gibt, ob die DB auf meinem PC ist, oder auf einem schnellen Laufwerk an der Fritz Box als NAS, oder meinetwegen noch auf einem separaten PC, der nur dafür da ist, die DB zu halten?
    Ich denke Performanceunterschiede wird's wohl kaum geben. Wird bei dir am PC wohl am "schnellsten" laufen - ich denke aber die Datenmengen halten sich hier in Grenzen.
    Den DB-Server auf den Stick funktioniert nicht - da muss ja ne Maschine dahinter stecken (PC, VM, Server etc.). Ein separater Rechner (somit Server) würde natürlich auch funktionieren.

    Aber man kann auch erstmal die Kirche im Dorf lassen und mit dem arbeiten, was man hat -> dein Laptop in dem Fall. Was mich daran ein bisschen stört bzw. mir stellt sich die Frage:
    Machst du regelmäßig Backups?
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: