Richtige Deklaration von Dataset und Tabellen

  • VB.NET
  • .NET 4.5

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

    Richtige Deklaration von Dataset und Tabellen

    Neu

    Guten Abend,

    ich habe die Tage schonmal zu einem anderen Thema geschrieben, bin noch Neuling was die ganze Sache betrifft. Ich habe viel (grade zu den Basics) gelesen und scheitere nun doch an einer wahrscheinlich total einfachen Sache...

    Folgende Ausgangslage. Ich habe ein Dataset welches mehrere Tabellen enthält. Alle Tabellen habe eine Spalte die gleich benannt ist ("Col"). Ich möchte eine Tabelle mit einer For... each schleife durchlaufen lassen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Projekt
    3. sub durchlauf
    4. Dim ds As New DataSetName
    5. Dim _DataFile As New FileInfo("Datei.xml")
    6. ds.ReadXml(_DataFile.FullName)
    7. For Each row In ds.Tabelle1
    8. MsgBox(row.col) 'Die msgbox ist bloß ein Beispiel.
    9. Next
    10. End Sub
    11. End Class


    Das mag jetzt noch nicht die perfekteste Lösung dafür sein, aber zumindest funktioniert es für mich zufriedenstellend.

    An Stelle der msgbox passiert noch ein bisschen mehr, der teil funktioniert aber für mich auch zufriedenstellend.

    Nun will ich mit dem gleichen Code nicht nur Tabelle1 sondern auch Tabelle2 Tabelle3,... durchlaufen.

    Was ich jetzt noch brauche, ist das ich den Teil in Zeile 11 des codes "ds.Tabelle1" als "variabel" hinterlegen kann die ich vorher abfragen kann (z.B. über einen select case o.ä.) Wäre super wenn mir da fix jemand auf die Sprünge helfen könnte auch wenn es wahrscheinlich eine zimliche Anfängerfrage ist...

    Vielen Dank.

    Grüße Philipp

    Neu

    Sowas evtl in der Richtung. Achtung pseudo Code.

    VB.NET-Quellcode

    1. For each tbl as DataTable in DataSet.Tables
    2. For each row as DataRow in tbl.rows
    3. Debug.Print(row(“col“).toString())
    4. next
    5. next


    "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

    Neu

    Nun, Du könntest das z.B. in eine Function auslagern und als Parameter ne DataTable übergeben, also z.B.

    VB.NET-Quellcode

    1. Private Sub Scan(CurrentTable As DataTable)
    2. For Each Row In CurrentTable
    3. 'whatever
    4. Next
    5. End Sub


    Aber: Was soll das werden, wenn's fertig ist? Warum sollten viele Tabellen die gleichen Columns haben? Nenn mal bitte ein Beispiel, damit wir ggf. passende(re) Lösungen aufzeigen können. Da Du mit diesem String-Gesuche untypisiert arbeitest, kann es ganz schnell mal murks werden.
    Ich selbst habe sowas noch nie gebraucht, da außer der Spalte ID bei mir selten eine Column mit gelichem Namen in mehreren Tables vorkommt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    VaporiZed, da hast du genau die richtige Frage gestellt. Denn als ich sie dir beantworten wollte ist mir aufgefallen, was ich besser machen kann und muss.

    Ich kratze es nur kurz an, ich habe eine Menge Fragen in den Tabellen gespeichert von denen der Nutzer einen Ausschnitt (einen Tabellenblock) gestellt bekommt. Bisher habe ich intuitiv die Antworten zu den Fragen zugeordnet in eine extra spalte ("Antwort"), die hatten dadurch alle Tabellen gleich. Aber das kann man ja viel galanter lösen indem die Antworten eine eigene Tabelle bekommen und damit brauche ich dann auch kein hin und her gewechsel veranstalten...

    Ist natürlich auch nicht der Sinn, dass es doppelte Spalten gibt... Für mich sollte das Thema damit erledigt sein.

    Neu

    Ich glaub ich versteh das Datenmodell noch nicht ganz. Du hast Fragen und passende Antworten. Wozu braucht es da mehrere Tabellen? Da reicht doch eine. Die hat dann die Spalten ID, Frage, Antwort. Und dann eben x Zeilen, wobei jede Zeile eine Frage und die dazugehörige Antwort enthält. Aber es scheint wohl komplizierter zu sein, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Im grunde genommen ist es nicht viel komplexer: Man muss nur schauen welche Fragen gestellt werden müssen und schon kann man alles in eine Tabelle packen. Das könnte man sicherlich über eine zusätzliche Spalte lösen in der die Zuordnung zu einem Fragenszenario vermerkt ist. Ich bekomme die Daten allerdings pro Szenario als Block (eine Tabelle mit Fragen für Szenario 1, eine Tabelle mit Fragen für Szenario2,... ) Und wollte dieses Schema gerne beibehalten (ob das so sinnvoll war stelle ich momentan in Frage).

    Neu

    Philipp schrieb:

    Was ich jetzt noch brauche, ist das ich den Teil in Zeile 11 des codes "ds.Tabelle1" als "variabel" hinterlegen kann
    Das ist zunächstmal so nicht vorgesehen.
    Für das Programm sind Tabelle1 und Tabelle2 unterschiedliche Klassen - ganz egal, ob eine deren Spalte denselben Namen trägt.

    Sauber programmiert ist also, wenn du deine Schleife tatsächlich für jede Tabelle ausformulierst, für die du es brauchst.

    Man kann auch mit untypisierten "Hacks" ankommen, aber das würde ich einem Anfänger nicht unbedingt empfehlen.
    Wichtiger finde ich die Lern-Erkenntnis, dass die Tabellen und Rows in einem typDataset verschiedene Klassen sind, die sich nicht über einen Kamm scheren lassen.

    Neu

    meine dringende Empfehlung: Lass die Datenbank weg - wenn das möglich ist.
    Das ist möglich, solange du keine Mehrbenutzer-Anwendung in einem Netzwerk programmierst, oder solange weniger als mw. 20000 Datensätze vorhanden sind.

    Grad Umbauarbeiten am Datenmodell - wie jetzt von dir anvisiert - können viel einfacher direkt im typDataset vorgenommen werden - da muss man nicht jedesmal mit dem Datenbank-Management herumhampeln.

    Was ich auch empfehle:
    Erklär mal, was deine Anwendung soll, und zeige Screenshot von deim Dataset (damit zeigst du das Datenmodell, was du zu diesem Zwecke konzipiert hast).
    Dann kann man dich sofort auf Datenmodell-Design-Fehler hinweisen, was dir u.U. Monate sinnloser Arbeit ersparen kann.
    Weil das Datenmodell ist die Grundlage einer Datenverarbeitung, und wenn das fehlerhaft ist, kann am Ende nix brauchbares rauskommen.

    Neu

    Ich habe mich falsch ausgedrückt: Es gibt keine Datenbank. Es gibt nur ein Dataset und ein xml dokument welches den Inhalt des Datasets zu beginn bereitstellt. Dementsprechend musste ich auch nur das Dataset etwas umstricken und keine Datenbank. Ich habe das Dataset fälschlicherweise als Datenbank bezeichnet.