VB Projekt, Prozessorientierte Datenbank-Oberfläche

  • VB.NET

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

    VB Projekt, Prozessorientierte Datenbank-Oberfläche

    Hall zusammen,

    vor knapp einer Woche habe ich schonmal einen Thread hier aufgemacht #mce_temp_url#, und wie bereits angedroht habe ich jetzt noch einige, weitere Fragen zu meinem kleinen Projekt (Da ich gerade gemerkt habe, dass der Text doch etwas länger wurde, hoffe ich, ich bin noch im richtigen Forum, falls nein, bitte verschieben).

    Zuerst sollte ich vielleicht etwas weiter ausholen und darlegen, was ich eigentlich vor habe. Und zwar möchte ich einen Prototypen für ein kleines System erstellen, dass eine Art Workflow-Verwaltung bietet. Konkret sieht das ganze so aus, dass ich verschiedene Anwendungsfälle habe, die in Teilen auch die gleichen Schritte durchlaufen wie andere Anwendungsfälle. In jedem Workflow wird dabei ein Objekt bearbeitet, einfach gesagt z.b. ein Auto, Flugzeug, Schiff, was auch immer. Der Anwender wird dabei durch die einzelnen Bearbeitungsprozesse geleitet, wie bei einem Assistenten so üblich. Der Anwender soll auch einen laufenden Workflow pausieren können, zurück zur Übersicht gelangen, und einen weiteren Workflow starten können.

    Soweit dann mal mein Konzept:

    Ich habe bereits eine Access Datenbank, die Vorlagen für die bearbeiteten Objekte (Also eigentlich eher Klassen, wenn man sich OOP-Terminologie bedient) liefert, diese müsste ich also auf jeden Fall einbinden. Diese "Klassen" werden durch den Assistenten dann quasi instanziert und als Objekte ebenfalls in einer Datenbank gespeichert. Daneben brauche ich wohl noch etwas zur Verwaltung der Workflow-Definitionen und Workflow-Instanzen. Über Sachen wie Benutzer/Rollenverwaltung habe ich mir auch bereits Gedanken gemacht, allerdings wird die Umsetzung dann wohl zu aufwändig und dieses Feature wird wohl nur rudimentär ausgeprägt sein.

    Wie bereits im anderen Thread angesprochen, habe ich mich jetzt dazu entschlossen - falls das ganze so durchführbar ist - die Benutzerführung auf TabControls mit ausgeblendeten Tabs aufzubauen. Da ich verschiedene Workflows in dem Programm unterbringen muss, die auch teilweise die gleichen Schritte erfordern, hab ich mir überlegt, in einer Datenbank die Defintionen für die einzelnen Workflows zu hinterlegen, diese dann zur Laufzeit auszulesen, sobald der Anwender einen neuen Ablauf startet und dadurch die entsprechenden Tabs anzuwählen ("Als Erstes kommt Schritt A, zweitens Schritt B, drittens Schritt C etc.")

    Und jetzt noch ein paar Verständnisfragen:
    • Ich habe mich bereits etwas in DataSets eingelesen. Wenn ich das richtig verstanden habe, sind das quasi VB-interne Repräsentationen von angeschlossenen Datenbanken (wobei die Datenbanken nicht unbedingt nötig sind, es kann auch nur intern damit gearbeitet werden)?!
    • SqlDataAdapter stellen dann die Verbindung zwischen Datenbanken und DataSets her?
    • Heißt das, ich führe über die DataAdapter SQL-Abfragen aus, welche die DataSets mit Daten befüllen, welche wiederum mit Steuerelementen verknüpft sind, die diese Daten dann anzeigen/sie bearbeiten lassen?
    • Designe ich erst mein DataSet im VS und verknüpfe dieses dann mit der Datenbank oder anders herum? Geht auch beides? (Nachdem ich bereits eine Datenbank voll mit Daten habe)
    • Noch konkret eine Frage: Die Datenbank, die mir bereits befüllt zur Verfügung steht (Access 2007) enthält berechnete Werte. Gibt es dabei Probleme mit VS 2010? Ich kann zu dieser nämlich nicht verbinden, wenn die betroffene Tabelle enthalten ist, und bekomme einen Fehler "unrecognized database format"

    Fragen über Fragen...

    Das ganze soll, wie bereits gesagt, ein Prototyp sein. Ich bin selber kein Softwareentwickler. Mich würde nur gerne interessieren, wie ich das ganze jetzt am besten angehe, und ob das Konzept so überhaupt Sinn macht. Mir schwirren nur momentan zahllose Ideen und Gedanken durch den Kopf, da würde ich gern noch mal andere Meinungen hören. :)
    ich finde deine Fragen sehr abstrakt, da kann man nur zu sagen: Es wird wohl eine Datenverarbeitung werden, und bei Datenverarbeitungen ists natürlich äusserst sinnvoll, die für Datenverarbeitung vorgesehene Technologie (etwa typisierte Datasets) anzuwenden.
    Zum Einstieg rate ich dringend, eine Datenbank erstmal wegzulassen - kann man später immer noch hinterlegen. Im Grunde wiederhole ich immer nur dasselbe, was zB auch hier gesagt ist.

    Verwirrend findich, dass du noch ganz schwammig am herum-konzepteln bist, aber gleichzeitig steht schon eine ausgearbeitete Datenbank mit vielen Daten Gewehr bei Fuß.
    Also entweder programmierst du für diese Datenbank (wenn sie gut designed ist, und deine Ansprüche erfüllt), oder du kannst sie schlicht vergessen.
    Das liegt daran, dass diese Datenbank mir von meinem Vorgänger hinterlassen wurde und ich nun auf ihr aufbauen soll.

    Ok, konkret geht es um ein Assistentensystem zur Bearbeitung von Produktmodellen. Die Datenbank enthält die Vorlagen dafür. Der Anwender soll also einen Modelltyp auswählen, dann durch den Anwendungsfall geführt werden, den er ausgewählt hat (inklusive Dokumentation der ausgeführten Arbeit etc.), wodurch er am Ende ein konkretes Produktmodell erhält. Diese Modelle können ziemlich unterschiedlich sein, die groben Schritte im Ablauf sind allerdings immer ähnlich.

    Dabei ist nun die erste Hürde, wie gehe ich beim Entwurf der einzelnen DataTables im Designer vor (nicht die Handwerklichen Schritte, sondern mehr vom Konzept her)? Ich habe bereits relativ konkrete Vorstellungen von den jeweiligen Inhalten, jetzt gehts mir vor allem darum, wie ich diese Umsetze. Fasse ich Daten eher in Tables zusammen wie ich sie später in der Anwendung "sehe" (also z.B. in DataGridViews) Oder gehe ich eher wie bei einer relationalen Datenbank vor, d.h. mehrere, verschiedene Tables, die über Schlüssel miteinander verbunden sind? (So wie ich es - bisher - verstanden habe eher ersteres, und die Anbindung der Datenbank "lasse" ich dann mittels DataAdapter geschehen)

    radioactive_mc schrieb:

    Fasse ich Daten eher in Tables zusammen wie ich sie später in der Anwendung "sehe" (also z.B. in DataGridViews) Oder gehe ich eher wie bei einer relationalen Datenbank vor, d.h. mehrere, verschiedene Tables, die über Schlüssel miteinander verbunden sind?

    ich weiß halt nicht, wie du die Daten hinterher siehst.
    Auf jeden Fall legt man allerlei Tabellen an, die über Beziehungen miteinander verknüpft sind.

    radioactive_mc schrieb:

    und die Anbindung der Datenbank "lasse" ich dann mittels DataAdapter geschehen
    erwähnte ich zufällig mal, dass man sich über den Datenbank-Zugriff erstmal besser keinen Kopf machen solle?
    Weil prinzipiell habich kein Problem damit, mich ständig zu wiederholen, nur gewinne ich dabei mit der Zeit den Eindruck, mir werde ühaupt nicht zugehört.
    Und mit Begriffen binnich kleinlich, denn nur mit präzisen Begriffen kann man sich überhaupt etwas ausdenken.
    Also

    radioactive_mc schrieb:

    Anbindung der Datenbank "lasse" ich dann mittels DataAdapter geschehen
    ist ziemlich wirr.
    Korrekt ist, dass DataAdapter Daten aus der DB ins Dataset laden bzw. annersrum - es sind eben Adapter. Aber - noch mal wiederholt: das ist zunächstmal uninteressant oder gradezu gefählich, denn sich damit beschäftigen ohne das vorrauszusetzende KnowHow in Sachen Dataset und Databinding führt in den Murx-Wald hinein.
    ok, gut, dann erstelle ich jetzt mein Datenmodell bzw. baue mein DataSet, vergesse die Datenbank und speichere alles einfach als XML, danke soweit! Und es macht die Sache tatsächlich etwas einfacher, wer hätts gedacht ;)

    Nun mal eine konkrete Frage: Du hast in deinem DBExtensions bzw. in den WinFormHelpers eine Methode erwähnt, von mehreren Forms bzw. Objekten aus auf die gleiche Instanz eines DataSets zuzugreifen. Ich versuch nun schon seit geraumer Zeit (anhand der DatasetOnly-Sample-Solution) nachzuvollziehen, wie das ganze praktisch angewendet wird, aber ich komm nicht drauf. Kannst du mir da noch ein wenig Hilfestellung geben?

    VB.NET-Quellcode

    1. Me.DataSetName.Register(Me)


    Soweit bin ich schon gekommen, aber wie wende ich das nun genau an? Einfach in der Load-Routine jeder Form/im Konstruktor einer Klasse? Muss man dann im weiteren Verlauf bei der Arbeit mit dem Dataset noch was beachten?