Frage bezüglich der Herangehensweise zum Daten laden. (Datenbank? Welche)

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Black-Mage.

    Frage bezüglich der Herangehensweise zum Daten laden. (Datenbank? Welche)

    Huhu ich bin ganz neu hier und hoffe in das richtige Forum geschrieben zu haben. :)

    Ich hatte bisher nur in VB in Excel gearbeitet und erweitere nun meine Arbeit auf VB in Visual Studio 15 das müsste dann VB.net sein oder?
    Bevor ich mein Problem oder die Anfrage stelle, beschreibe ich was ich vor habe, um evtl. durch besseres Verständnis auf die richtige Antwort zu kommen.


    Es geht bei der Sache um folgendes:

    Meine Freunde und ich spielen ein Pen & Paper Rollenspiel zu dem ich einen Charakter und Raumschiff Generator basteln möchte. Um das wälzen in den Büchern und das zusammen tragen der Werte zu erleichtern.
    In dem Programm kann man dort durch Auswählen der Rassen, Attribute und Fertigkeiten eben alles zusammen gestellt bekommen, ohne die Bücher zu bemühen. Am Ende soll alles in ein bearbeitetes Excel Dokument
    exportiert werden was dann das fertige Charakterblatt ist, das man eben ausdrucken kann. Soweit so gut. Bei dem Char editor ist es denke ich nicht notwendig diesen Schritt hier zu machen, jedoch bei dem Tool das
    für die Raumschiffe ist wohl schon. Denn wir sind dort mehr oder minder noch im testen und dort ändern sich Werte von Gegenständen, also Gewicht, schaden der Waffen, kosten etc.

    Mein Gedanke ist nun das ich eine externe Datei hernehme bei dem ich diese ganzen Werte eintrage, dort kann man einfach Änderungen machen und diese werden einfach beim starten des Programms geladen.
    Nun ist es nicht einfach eine Tabelle die ich irgendwie laden müsste sondern es sind in verschiedenen Forms an unterschiedlicher Stelle, eben Irgendwelche Daten.

    (sorry für den ganzen Text)

    Nun zur Frage. Was soll ich da am besten nehmen. Eine XML datei wäre nicht so Übersichtlich, da wäre eine Excel Datei besser (in Bezug auf das spätere lesen und ändern der Datei) wie sollte ich sowas angehen?
    Arbeitet man da mit diesem Dataset von dem ich schon gelesen habe. Ich bin da leider noch sehr neu was das angeht. Und frage hier lieber nach, ehe ich mich da in etwas verrenne, was anders besser wäre.

    Wie gesagt ich möchte nicht einfach nur aus der "Datenbank" eine komplette Tabelle einlesen, sondern vielmehr verschiedenste Werte an unterschiedlichen Stellen und in verschiedenen Form einlesen, so als wären das
    alles Variablen die ich nutzen kann (sag ich mal ganz platt).


    Ich hoffe ich konnte das halbwegs rüber bringen was ich hier meine *g*

    lg

    Benny

    Black-Mage schrieb:


    Nun ist es nicht einfach eine Tabelle die ich irgendwie laden müsste sondern es sind in verschiedenen Forms an unterschiedlicher Stelle, eben Irgendwelche Daten.


    Hi,
    prinzipiell lässt sich sowas recht gut über XML abbilden. Der Witz ist dabei, dass du die Rohdatei garnicht anfasst sondern alle Bearbeitung über das Programm selbst statt findet.

    Zu der von mir zitierten Stelle: Genau umgekehrt wird ein Schuh draus. Du hast immer eine "zentrale Tabelle" in der die Daten liegen und diese werden dann auf verschiedenen Forms an unterschiedlichen Stellen angezeigt.
    Ansonsten wird das Laden und Speichern der Daten unnötig kompliziert und fehleranfällig.

    Die Frage die sich mir allerdings stellt ist, ob sich das ganze für dich lohnt. Wenn das dein erstes Programm mit Visual Studio werden soll kannst du mal locker 50-60 Stunden dafür einplanen bis alles halbwegs ordentlich funktioniert. Und es wird dich einige Nerven kosten, da manche Fehler partout nicht weggehen wollen werden.
    Daher solltest du dir gut überlegen, ob sich das Ganze nicht doch über Excel abbilden lässt. Wenn du dich geschickt anstellst kannst du aber im Endeffekt eine deutlich bessere Anwendung bauen als es mit Excel möglich ist, im Forum hier wirst du garantiert jede Menge Hilfe zu konkreten Fragen bekommen.
    Aber wie gesagt, sowas als Erstlingswerk zu bauen dauert locker 10-20 mal länger als mit Excel eine Tabelle mit Relationen zu bauen.

    Grüße
    Nils
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Nils_Kr schrieb:

    über XML abbilden
    ist imo nicht ganz die richtige Beschreibung.
    Abbilden sollte man das in einem Datenmodell, jo, und das Datenmodell lässt sich dann mit Leichtigkeit als Xml auf Platte speichern/laden ("persistieren", um den Begriff zu nennen).

    Was aber ist ein Datenmodell?
    Das ist eine Gruppe von Klassen, mit Eigenschaften, die quasi ein Abbild dessen bilden, was modelliert werden soll.
    Also da mag es eine Klasse Waffe geben, mit Eigenschaften wie Name, Schaden, Kosten, RegenerierZeit und dergleichen.
    Oder es gibt eine Klasse Charakter geben, mit Eigenschaften wie Name, Lebenspunkte, Rüstung und dergleichen.
    Interessant wird die Klasse Spieler, mit Eigenschaften wie Name, Waffe, Charakter. Weil wie man sieht, verweist die Klasse Spieler auf andere Klassen, und so entsteht ein verknüpftes Gebilde, das Datenmodell.



    Jo, das ist meist das Problem, zu dieser Denkweise zu kommen.
    Dann hat man noch hauptsächlich 2 Möglichkeiten, aus diesem Konzept Code zu machen
    1) man codet die Klassen selber
    2) man erstellt ein typisiertes Dataset, wo die genannten Klassen als "Tabellen" angelegt werden. Diese Vorgehensweise entspricht dem Anlegen einer Datenbank, aber es ist keine Datenbank, sondern ist wesentlich leichter zu handhaben.

    Hat man ein Datenmodell, so ists kein Problem, dieses zu persistieren, und auch das Anzeigen und vom User bearbeiten lassen ist dank Databinding eine Kleinigkeit.

    Aber es ist eine ganz neue Denkweise, insbesondere Databinding ist für Anfänger ganz unvorstellbar, und daher versuchen sie meist irgendwelchen Murx.



    Also 50-60 Stunden findich auch nicht gesponnen.
    Dabei ist das nicht eiglich Programmier-Zeit, sondern v.a. Lernen von Grundlagen.



    Die Geschichte dann mit Excel zu verheiraten ist nochmal ein Problem, und lösbar mit verschiedenen Strategien.
    Huhu und danke für die Antworten schon mal. Mir war wohl schon klar das es eine menge Arbeit gibt, aber da ich nicht so unter Zeitdruck stehe, denke ich wird es die Mühe Wert sein.

    Also habe ich das richtig verstanden, das ich mit dem Datasets zu denen es ja einige Erklärungen gibt arbeiten sollte? Und gar nicht über externe (ich sags mal einfach) Datenbanken?

    Ich müsste also ncht die exe jedesmal nach einer Änderung die ich "intern" an den Werten mache neu Compilieren? Und auch jemand aus unserer Runde, der nun kein Plan von VB hat, könnte diese Änderung

    vollziehen? Denn ich würde das Spätere nachbearbeiten von den Werten so einfach wie nur möglich gestallten. Denn am Programm selber würde sich wenn überhaupt man ne kleinigkeit ändern.

    Black-Mage schrieb:

    Also habe ich das richtig verstanden, das ich mit dem Datasets zu denen es ja einige Erklärungen gibt arbeiten sollte? Und gar nicht über externe (ich sags mal einfach) Datenbanken?


    Kommt drauf an was genau du vorhast. Es kann sein dass du für deine Zwecke ohne eine Datenbank auskommst. Eine Sql DB bietet natürlich mehr möglichkeiten, bedarf aber auch mehr Arbeit.
    Hier könnte meine Signatur stehen.
    Ein DataSet ersetzt keine Datenbank. Das DataSet legt Daten nur programmintern ab. Zum Programmende wird es gelöscht. Daher braucht man einen Speicher um Daten
    zu Programmbeginn laden zu können und am Ende wieder abzuspeichern. Das kann dann eine Datenbank oder eine Datei wie beispielsweise eine XML sein.

    Der Vorteil von XML + DataSet ist, dass man nur wenige Zeilen Quellcode braucht. Für kleinere lokale Projekte wie das hier beschriebene reicht das auch vollkommen aus.
    Eine Datenbank ist absolut unnötig.

    Dein Programm musst du dann logischer Weise nicht jedes mal neu kompilieren. Nur wenn du an der Datenstruktur selbst etwas ändern möchtest.

    Ich empfehle dir das relationale Datenmodell zu lernen, das hilft dir enorm dabei eine Datenstruktur zu generieren.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Nils_Kr schrieb:

    Ein DataSet ersetzt keine Datenbank.
    Ja, es ersetzt sie nicht, aber ich glaub hier braucht man sie einfach nicht.
    Also Dataset braucht man, Datenbank nicht.

    Oder anders, nochmal von vorn.
    1) Du brauchst ein Datenmodell
    2) typisiertes Dataset kannste gut nehmen als Datenmodell (es gibt allerdings noch 2 Alternativen)
    3) Datenbank brauchst du wahrscheinlich nicht.
    4) falls du eine Datenbank brauchst, so brauchst du sie zusätzlich zum typDataset.
    5) Also das Dataset brauchst du so oder so, die Datenbank brauchst du allenfalls vielleicht.
    6) Wenn du eine Datenbank brauchst, kannst du sie auch noch später hinterlegen
    7) Die Datenbank ist nur eine Daten-Senke, wo sich das Dataset abspeichert - dem Dataset ists egal, obs direkt auf Platte geschrieben wird, oder in eine DB.

    Beachte insbes. 2) typisiertes Dataset ist eine von mehreren Möglichkeiten, ein Datenmodell umzusetzen.
    Es gibt auch die Alternativen, dass du ein selbstgebasteltes Set an Klassen programmierst, die dein Rollenspiel modellieren - so ein Modell kann man mit Serialisierung auch recht leicht abspeichern. Allerdings sind selbstgebastelten Klassen engere Grenzen gesetzt, was sie modellieren können und was nicht.
    Oder du setzst auf Entity-Framework, das ist aber auf Datenbanken angewiesen, und arbeitet mit verschiedenen DB-Systemen verschieden gut zusammen, bzw. bei manchen gibts sehr häufig Installations-Probleme, unds funzt alles nicht richtig.



    Black-Mage schrieb:

    Desweiteren schau ich mal wie ich das mit dem XML Weg verwirklichen kann.

    Was meinst du mit XML-Weg?
    Sowohl typisiertes Dataset als Datenmodell als auch selbstgebastelte Klassen serialisieren persistiert in Xml-Dateien. Ist also beides "XML-Weg".
    Wenn du meinst, es gebe noch einen weiteren Weg, nur mit Xml, ohne Datenmodell, da mussichdich enttäuschen.

    ErfinderDesRades schrieb:

    Nils_Kr schrieb:

    Ein DataSet ersetzt keine Datenbank.
    Ja, es ersetzt sie nicht, aber ich glaub hier braucht man sie einfach nicht.
    Also Dataset braucht man, Datenbank nicht.

    Nils_Kr schrieb:

    Für kleinere lokale Projekte wie das hier beschriebene reicht das auch vollkommen aus.
    Eine Datenbank ist absolut unnötig.

    Schön, dass wir da einer Meinung sind ;)
    Option strict = on

    If it's stupid and it works it ain't stupid.
    Was meinst du mit XML-Weg? Sowohl typisiertes Dataset als Datenmodell als auch selbstgebastelte Klassen serialisieren persistiert in Xml-Dateien. Ist also beides "XML-Weg". Wenn du meinst, es gebe noch einen weiteren Weg, nur mit Xml, ohne Datenmodell, da mussichdich enttäuschen. huhu nur ums richtig zu verstehen. Klar ihr sagt eine Datenbank braucht man nicht. Ich hatte die xml Datei nur einfach mal als Datenbank beschimpft. Meint ihr nun das man nicht mal eine XML ( oder sonst wie auch immer eine Datei in der die Werte stehen) braucht?

    Denn ich würde mir das schwer vorstellen, wenn ich keine Externe Datei hätte, in der Werte stehen, diese einfach zu ändern. Man darf ja auch nicht vergessen, es würde nichts bringen, wenn das Tool am ende auf meinem PC irgend eine Config Datei anlegt in der es die von mir eingetragenen Werte hinterlegt, wenn ich dann das Tool auf einem anderen PC ausführe und diese dort fehlen. Es muss also eine möglichkeit geben, entweder eine (bsp. xml Datei) in der die Werte stehen. Oder das Tool müsste in der exe selber (was glaub ich so nicht geht) änderungen speichern.

    Für meinen aktuellen Kenntnisstand sehe ich nur 2 Wege.
    1.) Das Tool speichert wie auch immer in der exe selber Änderungen (die ich dann in dem Tool direkt selbst vornehmen kann (das aber glaube ich geht ncht mit dem speichern)
    2.)Ich liefere eine wie auch immer Datei mit. ini xml oder sonstwas, in der die Werte stehen. Die ich in der Datei, oder evtl. in Tool ändere (was aber eigtl. auch nur wieder eine Änderung in der xml wäre)

    Option 3 Datenbank über internet oder xml über internet scheidet aus, weil ich nicht auf jedem PC auf dem das Tool benutzt würde, Internet verfügbar ist.

    kurzes Update. Mein erster Versuch, was ich auf die schnelle Gefunden hatte, um Änderungen zu machen (die man auch direkt im Tool machen könnte) wären über die Me.Settings. aber ich glaube das muss ich verwerfen. Denn diese Möglichkeit ist nur für den PC auf dem ich die Werte überhaupt mal eintrage. Stelle ich auf Scope Anwendung ist das nur read only, Und führt so denke ich zu Punkt 1 wieder. Man kann in der exe wohl keine Änderungen direkt machen.

    Ich bitte mein Kauderwelsch zu entschuldigen. Und hoffe das ihr da durch steigt *g*


    Was meinst du mit XML-Weg?
    Sowohl typisiertes Dataset als Datenmodell als auch selbstgebastelte
    Klassen serialisieren persistiert in Xml-Dateien. Ist also beides
    "XML-Weg".
    Wenn du meinst, es gebe noch einen weiteren Weg, nur mit Xml, ohne
    Datenmodell, da mussichdich enttäuschen.


    Ich meinte damit, das ich eine XML als "Speicher" für meine im Tool verwendeten Werte nutze, die ich im Dataset einlese, und die ich extern ändern kann (oder im Tool, das in die xml zurück schreibt)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Black-Mage“ ()

    na dann ists ein Missverständnis, weil du "Datenbank" sagst, wenn scheints "Xml-Datei" meinst.
    Also da würd ich dich bitten, lieber "Xml-Datei" zu sagen, wenn du "Xml-Datei" meinst ;)

    Ja, und natürlich braucht man eine Daten-Datei, zB eine Xml-Datei, und die muss mitgeliefert werden (es sei denn, man hat sie iwo im INet zum Download eingerichtet - wär ja auch denkbar).
    @Black-Mage ich bitte dich dringendst darum dir noch einmal das hier anzusehen:
    Frage bezüglich der Herangehensweise zum Daten laden. (Datenbank? Welche)

    Das Dataset (Also Tabellen Relation usw.) definierst bevor die Anwendung läuft, musst deine Anwendung halt eben so schreiben, dass ohne bestehende xml das Dataset leer ist. Wenn du dieses nun auffüllst und das Speichern möchtest, benutzt du die WriteToXml Methode und schon haste dein DataSet als XML vorliegen. Mit einem ReadFromXml haste dann wieder alles in deinem Programm. So hast du ein statisches Datenmodell, dem du jedoch verschiedene Datensätze unterjubeln kannst (solange die xml konform zum Dataset ist, und der Name gleich ist.)
    huhu ihrs ich hab nen bisschen rumgesucht was es so an Möglichkeiten gibt eine XML zu laden

    z.B. in dem Video hier
    Spoiler anzeigen

    sollte der Timed link nicht gehen es wäre grob ab 22:00


    nutz er z.b.

    VB.NET-Quellcode

    1. xmlr.ReadStartElement("Myinfo")
    2. xmlr.ReadStartElement("name")
    3. Dim NME as String = xmlr.ReadString
    4. xmlr.ReadEndElement()
    5. xmlr.ReadStartElement("age")
    6. Dim AG as Integer = integer.Parse(XMLR.ReadString)
    7. xmlr.ReadEndElement()


    Ich kann mir vorstellen, wenn man nun ka 120 Werte hat die man haben möchte gibt das nen haufen Code
    nur wegen Paar Werte... Gibt es denn keine Einfache Variante bei der ich sage (Beispiel)
    Lade Datei xyz (ohne Auswahl des Users, sie soll einfach geladen werden)

    das ich dann definiere: ich brauche nun die werte aus Rollenspiel / Rasse / Mensch

    XML-Quellcode

    1. <Rollenspiel>
    2. <Rasse>
    3. <Mensch>
    4. <str>10</str>
    5. <int>8</int>
    6. <ges>11</ges>
    7. </Mensch>
    8. ...
    9. ..
    10. </Rasse>
    11. <Ausrüstung>
    12. <Waffen>
    13. <wert1>bla</wert1>
    14. <wert2>blub</wert2>
    15. </Waffen>
    16. </Ausrüstung>
    17. </Rollenspiel>


    das ich nun sagen kann
    textbox1.text = str
    textbox2.text = int
    textbox3.text = ges...
    Klar stimmt das mit text und integer nun nicht, das war auch hier nun ein beispiel.

    an nächster stelle würde ich in Ausrüstung / Waffen gehen und könnte sagen

    textbox2.text = <wert1>

    so nun mal billig eben ^^

    Ich kann mir nicht vorstellen, das es so umständlich sein kann um nen ollen Wert auszulesen mehrere Zeilen Code zu machen beginne lesen,... manövriere da hin,.... lese den wert,... beende das lesen,....

    Ich stelle mir das halt so vor, das ich das xml einmal einlese und dann sagen kann

    Element / Element / Element auswählen
    textbox1 = wert1
    textbox2 = wert2
    textbox3 = wert3

    fertig

    Hat da jemand eine Idee für mich?

    Andernfalls wenn das alles so doof ist nutze ich eben my.settings da kann ich wirklich einfach sagen diese Textbox bekommt nun den Wert my.settings.name

    Black-Mage schrieb:

    Am Ende soll alles in ein bearbeitetes Excel Dokument exportiert werden was dann das fertige Charakterblatt ist, das man eben ausdrucken kann.
    Ein Charakterblatt ist ein Datensatz. Wenn es mehrere Charakterblätter geben soll - was ich aus deinen Ausführungen vermute - wirst du wohl oder übel ein gescheites Datenmodell aufziehen müssen. Wenn du dieses Modell in einem DS abbildest, kannst du alle deine Datensätze dort behandeln und ganz leicht in ein .XML-File speichern und wieder laden (wie weiter oben schon beschrieben). Da wirst du mit den Settings nicht recht weit kommen.

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

    Ich würde DRINGEND davon abraten selber mit dem XML-Reader zu hantieren.
    MAL alles im Datasetdesigner in Visual Studio und speicher wie im Video vom Erfinder gezeigt ANSCHLIESSEND mit EINER ZEILE! die Daten weg.
    Und lad sie danach auch wieder MIT EINER ZEILE.
    Das funktioniert! Und du bleibst bei einem Standard den hier auch jeder versteht!

    Ich predige gerne... Nicht versuchen das Rad neu zu erfinden... Ich denke dass die guten Damen und Herrchen die sich bei Micorsoft hingesetzt haben um diese Funktionen anbieten zu können, durchaus verstehen was sie da tun und zumeist weit besser als du oder ich.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Huhu, nein ich habe nichts verworfen. Ich bin wohl nur etwas abgeschreckt denke ich weil die Daten aus den Datasets weitestgehenst immer in einer Tabelle in einem Grid oder so angezeigt bzw. benutzt werden.

    Ich allerdings müsste eher eine Variante nutzen, die ich am um es zu vereinfachen mit den My.settings mal vergleiche. (ich übertreibe mal ein klein wenig) ... 5 Forms am Ende habe auf dem unterschiedlich, aber bis zu 30 verschiedene Contros sind. Textboxen oder Checkboxen oder Labels, diese müssten eigtl. alle einzlen einen Wert aus der Dataset bekommen. Es hörte sich also für mich einfacher an, den Weg gehen zu wollen das mit Settings zu machen, oder mit einem kurzen Code der mir einzlene Tags aus einer xml holt.

    Ich kann mir vorstellen, das es sicher leicht ist irgendwie einen Wert aus der Dataset zu nehmen mit wenig Code, oder hier zu sagen wenn das ausgewählt wurde nimm bitte hier 3 Werte aus dem Dataset. Aber alles was ich bisher so fand, hat sich nicht so um die Art gedreht mit der Dataset umzugehen, wie ich annehme das man es tun sollte. Bzw ich auch nicht so das Wissen habe um zu sagen, ja klick da was an und Füge da eine Zeile in das Projekt ein, und schon hast was du braucht.

    P.S. Es ist wohl eher so das ich erschlagen bin von der Sache und nun am rumrudern. Ich aber nun auch nicht aufgeben will. :)