Programmerstellung - wie geht man das Projekt am besten an?

  • VB.NET

Es gibt 385 Antworten in diesem Thema. Der letzte Beitrag () ist von stevez.

    hänge jetzt wieder einmal.. habe die zwar aussagekräftige fehlermeldung

    Quellcode

    1. Das Element "obj\x86\Debug\XT_Testprogramm.Form1.resources" wurde im Resources-Prameter mehrmals übergeben. Blabla nicht möglich
    Aber wo finde ich die Codezeile? Doppelklicken geht nicht, eine Datei im Projekt mit "resources" gibt es, da steht das Testprogramm allerdings nur 1x drinnen?!
    sooo hab alles nochmal neu geschrieben und es läuft :) gleich mal gesichert.


    kann man mit DataSets auch SQL-Abfragen stellen? -> Wenn in ComboBox eine Version (als String) ausgewählt ist, die Zeile in dem DataSet/Versionen finden und löschen?

    SQL-Abfrage

    1. SELECT * FROM Versionen WHERE VersionsNr = Cbx_versions.Text

    oder so ähnlich

    Quellcode

    1. Dim rw_XT_Versionen = DataSet.Versionen.Rows.Remove(txt_NewVersion.Text)

    geht natürlich nicht, weil er ja die Zeile habe will


    EDIT: bin etwas weiter, aber gehen tuts trotzdem noch nicht ;)

    Quellcode

    1. DataSet.Versionen.Rows.RemoveAt(Int(DataSet.Versionen.Rows.Find(Cbx_versions.SelectedItem)))


    EDIT: oder was mit select, geht aber auch nicht ;)
    [/code]DataSet.Versionen.Rows.Remove(DataSet.Versionen.Select("* WHERE VersionsNr = '72.0.0.2'"))[/code]

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „stevez“ ()

    ErfinderDesRades (post#4) schrieb:

    vergiß Sql (erstmal).

    Sql holt und schreibt Daten in eine externe DB.
    Im Dataset hast du die Daten aber intern vorliegen. Also vergiß Sql (erstmal). vergiß Sql (erstmal). vergiß Sql (erstmal).

    Das Dataset hat eigene Mechanismen, um die Daten zu verarbeiten, die besser in den Kontext von VB passen, denn Sql passt garnet rein

    Also vergiß Sql (erstmal).

    Welchen Datensatz möchtest du aus deinem Dataset bearbeiten?

    Oder guck dir einfach ein paar meiner Samples aussem DB-Tutorial-Bereich an, dass du einen Eindruck bekommst, was man alles treiben kann,, ohne Sql.
    Ich möchte aus der Combobox, in welcher alle Versionsnummern (aus dem Dataset) stehen, eine Version selektieren und dann auf einen Button "Version löschen" klicken, welcher diesen gesamten Datensatz (Zeile) löscht. Dafür muss die String aus der Combobox mit dem Inhalt der Tabelle "Versionen" aus dem DataSet verglichen, besagte Zeile gefunden und gelöscht werden.

    Ich wühle mich mal durch dein Tutorial! Thx LG

    edit was mir grade einfällt: in deinem "Datasetonly" Paket hast du ja beschrieben, wie man eine Zeile löschen kann, das ist nicht das Thema. Es geht wie gesagt um das Herausfinden der richtigen zu löschenden Zeile ohne SQL.
    nochmal eine grundlegende Frage zu der Datenstruktur (siehe Bild). Ist das so korrekt & wie muss ich in VB die bestimmten Beziehungen einstellen (also dass sie auch genau so funktionieren, wie ichs aufgemalt habe ^^) -> Was verstehe ich unter "übergeordneter und untergeordneter Tabelle", was unter "Fremdschlüsseleinschränkung/Beziehung/beides" oder "geschachtelter Beziehung"?

    -> Mit einer Version können mehrere Tests durchgeführt werden
    -> bei einem Test können beliebig viele Fehler auftreten
    -> es kann mehrere Tests pro Testsuite geben
    -> eine Testsuite besteht aus beliebig vielen Einzeltests, welche aber auch mehrmals in verschiedenen Suites benutzt werden können
    Bilder
    • Unbenannt.JPG

      69,92 kB, 1.052×572, 159 mal angesehen
    Warum machst du nicht direkt im Dataset die entsprechenden Verknüpfungen der Tabellen?
    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
    weil ich erst sicher gehen will, dass die beziehungen korrekt sind, und ich nicht weiß, wie ich es in VB einstellen muss, um z.B. "Versionen" mit "Durchgefuehrte_Tests" 1-n zu verknüpfen? (siehe Anhang)



    und gleich noch eine Frage, mit welchem Befehl kann ich alle Tabellennamen eines DataSets auflisten?

    VB.NET-Quellcode

    1. For Each i As DataTable In DataSet
    2. cbx_tabellen.Items.Add(i)
    3. Next i
    so ungefähr
    Bilder
    • Unbenannt.JPG

      65,56 kB, 700×661, 133 mal angesehen
    in "DatasetOnly" auf Movie-Tuts wird das detailliert vorgeführt.

    Zum Einrichten eines typisierten Datasets
    Schlüsselspalten, sowohl ForeignKey als auch Primkey, müssen denselben Datentypen haben. Int32 ist am günstigsten, weil man dann bereits im Dataset-Designer am Primkey Eindeutigkeit mittels "AutoWert=True" einstellen kann.
    Alle Relationen müssen mit Beziehungs- und Fremdschlüssel-einschränkung, und deleterule.cascade, acceptrule.none, updaterule.Cascade eingestellt sein. (im "DatasetOnly"-Tut habich noch updaterule.None eingestellt - egal - .Cascate ist erst beim Speichern in Datenbanken notwendig, also bei "Not-DatasetOnly";))

    Zur Benamung im Datenmodell:
    wähle kurze Namen, und im Singular.
    Aus den Namen werden viele Klassen- und Methoden-namen generiert, die meisten beziehen sich auf einzel-Objekte, sodass die Plural-Flexierung zu einer Fehl-Information führt.
    Du möchtest doch nicht solche Sachen coden wie

    VB.NET-Quellcode

    1. dim rwVersion as VersionenRow=Directcast(Directcast(VersionenBindingSource.Current, DataRowViw).Row,VersionenRow))
    2. dim rwSuitInhalte as SuitInhalteRow=Directcast(Directcast(rwSuitInhalteBindingSource.Current, DataRowViw).Row,SuitInhalteRow))
    3. dim rwNewDurchgefüuehteTests as Durchgefuerhte_TestsRow = me.versioniertesTestingDataset.Durchgefuerhte_Tests.AddNewDurchgefuerhte_TestsRow(rwVersion, rwSuitInhalte, 9)
    nichtwahr eine Durchgefuerhte_TestsRow läßt erwarten, dass da mehrere Tests drinne sind, aber es ist nur ein Test. oder bei "SuitInhalteRow" ist die Fehlleitung noch schlimmer.

    Auch die Spalten: bennene alle Primkeys einfach mit ID. (im "DatasetOnly"-Tut habich noch die Primkeys namensgleich mit den ForeignKeys gemacht, aber günstiger ist, der Prim heißt immer "ID". So sieht man schon an der Benamung, welche Spalte einer DataRelation die übergeordnete ist.
    Und die ForeignKeys mit "TableNameID", aber das haste ja schon im großen und ganzen.
    Was ich giftig finde, ist von diesem Schema abzuweichen:
    SuiteInhalte hat ein ForeignKey auf Durchgefuerhte_Tests, der heißt aber nicht Durchgefuerhte_TestsID, sondern (was ja eiglich sinniger ist) TestID. Da merkst du, wie der bescheuerte Name "Durchgefuerhte_Tests" dich verleitet, unschematisch vorzugehen, wo ein schematisches Vorgehen eine enorme Hilfe wäre. Also Durchgefuerhte_Tests dringend umbenennen in Test.

    Das Dataset kennt übrigens keine m:n - Relationen, sondern nur 1:n.
    ich notiere diese Relation gerne konkret, und mit Pfeil, also zb die Relation Version->Test
    eine m:n - Relation besteht einfach aus zwei 1:n - relationen, mit gemeinsamer n - seite. Anders gesagt: Eine Mittler-Tabelle ist beiden Tabellen untergeordnet.

    Bei dir etwa ist Version->Test<-SuitInhalt eine m:n zwischen Version und SuitInhalt.

    In deim Modell fehlt also die mittlertabelle zw SuitInhalt und Liste_Einzeltests (der zweit-bescheuertste Name des Datasets).

    Eine 1:1 - Relation kennt Dataset auch nicht - was soll das bedeuten, eine 1:1 - Relation?

    Also dein Datenmodell ist stimmig, wenn du es mir erklären kannst. Zu verstehen bilde ich mir ein, dasses Tests gibt, und jeder Test kann mehrere Fehler ergeben. Scheinbar gibts Tests in verschiedenen Versionen - aber das ist mir schon fragwürdig. Sind es wirklich die Tests, die versioniert sind, oder sind es nicht die getesteten Programme, die eine Version haben?
    was ist eine Suit? ist das so ein zu testendes Programm?

    Also bei mir kommt derzeit noch eine ganz primitive Kaskade als DAtenmodell heraus:

    Dabei habe ich die Spalte "Fehler" in "Einzeltest" hineingemacht, als nullable Feld.
    Also ein Einzeltest ergibt eine Fehlerbeschreibung (und welche) oder nicht.

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Wie am Anfang erzählt mache ich mein BPS bei einer Firma, die Wawi-Software entwickelt, in der Qualitätssicherung. Dort werden TESTS an der verschiedenen PROGRAMMVERSIONEN durchgeführt, welche momentan in Pharmaunternehmen am laufen sind, um eventuelle Fehler vorzeitig zu erkennen. Ein TEST ist beispielsweise eine Bestellung über ein Rezept. Eine TESTSUITE ist eine Art Gruppe von TESTS, die alle diese Tests hintereinander ausführt (damit man sie z.B. nachts laufen lassen kann). Am folgenden Tag wird dann eine XML generiert, welche die Testergebnisse enthält bzw. habe ich schon abgeändert: nur die dort aufgetretenen Fehler. -> die müssen dann bearbeitet und behoben werden -> fehlgeschlagener test läuft erneut durch usw.

    Natürlich erfasst eine SUITE nur einen Teil aller Tests, da der Testlauf dann mehrere Wochen dauern würde. Daher einzelne SUITES auf verschiedenen parallel laufenden virtuellen Maschinen auf verschiedenen Rechnern mit verschiedenen OSs.


    EDIT: habe mal ein neues Schema mit geänderten Namen erstellt
    Bilder
    • Unbenannt.JPG

      62,96 kB, 856×412, 140 mal angesehen

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „stevez“ ()

    gibt es mehrere zu testende softwares, oder bezieht sich alles auf nur eine Software in versch. versionen

    also nach deiner erklärung käme ich nun bei sowas raus


    Version->TestSuite->Test

    da hast du jetzt eine tabelle mit TestSuiten, und in jede kannst du einen haufen tests reinpacken und abfahren. Fehler ist weiterhin ein einzelnes Feld im Test, denn ich gehe davon aus, dass nach Auftreten eines Fehlers der dieser Test nicht fortgesetzt wern kann.
    Ich habe Version der TestSuite zugeordnet, weil ich annehme, eine Suite testet nur eine Software-Version
    Die Software, die getestet wird - jedenfalls im Standort Passau - ist EINE Software in verschiedenen VERSIONEN. MEHRERE SUITES testen MEHRERE VERSIONEN.

    Nacht werden TESTSUITES gestartet. Schlägt dort ein TEST fehl, wird mit dem darauf folgenden weiter gemacht. Also die SUITE läuft komplett durch, auch wenn Fehler auftreten!


    EDIT: Jetzt fängts mit den Beziehungsproblemen an (siehe Anhang)...
    Bilder
    • Unbenannt.JPG

      87,7 kB, 1.237×311, 116 mal angesehen
    was bedeutet "MEHRERE SUITES testen MEHRERE VERSIONEN."?

    Die frage ist, ob eine Suite mehrere Versionen testet, oder ob sie nur eine Version testet. Davon hängt ab, wem Version übergeordnet wird: dem einzelnen Test, oder der ganzen Suite.

    Dass die Suite durchläuft ist klar. Nur der einzelne Test kann maximal einen Fehler finden. Deshalb ist Fehler ein nullable Feld von Test.

    jdfs. mein Vorschlag.
    Bsp:

    Suite1 beinhaltet TestA, B und C
    Suite2 beinhaltet TestA, D und H

    Version71
    Version72
    Version73

    Mit jedem der beiden Suites kann man alle Versionen testen, also erhält man ein Ergebnis "Suite1-Version71", "S1-V72", ... , "S2-V71", "S2-V73", ...

    also eine Suite kann mehrere Versionen testen.
    jut - also version dem Test überordnen.

    dabei fällt auf: es müssen Test-Ergebnis-Datensätze generiert werden - das mit meim Fehler als nullable Feld ist zu einfach

    zu überlegen wäre, ob die Verhältnisse nicht noch anners liegen, nämlich so:

    Suite->Test->Fehler<-Version

    also man stellt eine Version ein, und fährt die Suite ab. Im Fehlerfall eines Tests wird ein FehlerDatensatz generiert, der die Version mit angibt.

    In diesem Sinne erzeugt ein Test ggfs doch mehrere Fehler, nämlich je nach Version

    findich grad sehr plausibel das modell ;)
    hab jetzt ein problem mit den beziehungen (siehe anhang oben). Wenn man die beziehungspfeile löscht, bestehen die beziehungen irgendwie trotzdem noch... wo kann man den den "beziehungs-code" einsehen und bearbeiten? weil sonst ist alles wieder vermurkst..

    EDIT: Problem gelöst -> Datenbank hatte noch die alten Spaltenbezeichnungen..


    noch etwas:
    wie bekomme ich eine Liste aller Tabellennamen im Dataset in eine Combobox? Und wie kann ich dann entsprechend der Auswahl in der Box einen DataGridView mit der entsprechenden ausgewählten Tabelle füllen? Zweiteres habe ich mir so ähnlich gedacht (geht natürlich nicht..)

    VB.NET-Quellcode

    1. Dim tabellen = cbx_tabellen.Text
    2. DataGridView.DataSource(start.DataSet.Tables(cbx_tabellen))

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „stevez“ ()

    stevez schrieb:

    hab jetzt ein problem mit den beziehungen (siehe anhang oben). Wenn man die beziehungspfeile löscht, bestehen die beziehungen irgendwie trotzdem noch...
    das wäre mir neu. - wie äussert sich dieses wundersame "Überleben"?

    wie bekomme ich eine Liste aller Tabellennamen im Dataset in eine Combobox?
    Ähm - bevor das DAtenmodell nicht geklärt ist, brauchst du keine Combobox zu programmieren.

    kannstes endgültige Datenmodell nochmal posten?
    ersteres Problem ist gelöst
    EDIT: Problem gelöst -> Datenbank hatte noch die alten Spaltenbezeichnungen..


    Aktuelles Datenmodell ist angehängt!

    Vielen Dank erstmal für deine Hilfe, war wirklich top und sehr kompetent! Ich fahre jetzt erstmal das Wochenende in die Heimat, bis wahrscheinlich Montag dann ^^
    Bilder
    • Unbenannt.JPG

      49,29 kB, 827×356, 131 mal angesehen
    ach - du hast immer noch die DB dahinter!

    wie gesagt (und wie du siehst): DB-Programmierung ohne Datenbank ist einfacher. Aber weil wassich sage, scheinbar immer nur ankommt, wenn ich groß und fett schreibe: DB-Programmierung ohne Datenbank ist einfacher!

    zum Datenmodell:
    Versionen ist immer noch plural. aber ein Version-Datensatz ist doch keine Versionen, sondern ist nur eine Version!
    Test hat zwar eine Spalte VersionenID, aber keine zugehörige Relation.

    Was zum Kuckuck ist nun der Unterschied zw. TestSuite, SuitInhalt, Einzeltest, und Test??

    Oder sind Einzeltest und SuitInhalt Altlasten, die weg kommen? Dann entspräche es nämlich so ziemlich meinem Vorschlag.

    Übrigens das mit dem doppelten Primkey ist auch für Fehler die vorzugsweise Option. Denn die Identität eines Fehlers ist ja tatsächlich definiert durch den (fehlergenerierenden) Test in verbindung mit der eingestellten Version.

    Was bedeutet das Feld "Test.Durchlaeufe"?
    Wenn mehrere Durchläufe mit derselben Version geplant sind, dann ist das Datenmodell noch zu einfach. Aber ich hoffe ja, dass ein Test mit einer Version immer dasselbe Ergebnis bringt, und daher nicht mehrfach durchlaufen muß.

    Ah - noch richtig Fehler im Modell: Du sagtest ja, dass derselbe Test menrereh Suiten zugeordnet sein kann (und eine Suite hat natürlich mehrere Tests) - also eine m:n Relation, und da fehlt die mittler-Tabelle.

    also neu:
    Version->Fehler<-Test->TestSuite->Suite

    ABer dann muß Fehler natürlich zusätzlich noch angeben, in welcher Suite er entstanden ist, also:
    Version->Fehler<-Test->TestSuite->Suite
    Suite->Fehler

    Fehler hat nun also sogar 3 Foreignkeys auf übergeordnete Tabellen, (die einen dreifachen Primärschlüssel bilden sollten)

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