SQL View Daten bearbeiten

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Kim.

    Neu

    Habe jetzt die Spalte geändert Trotzdem kommt noch weiterhin die andere Fehlermeldung.

    "Fehler bei der Überladungsauflösung, da keine zugreifbare "AddDruckRow" diese Anzahl von Argumenten akzeptiert"

    VB.NET-Quellcode

    1. ​Private Sub ExportPrinteds(printedRows As IEnumerable(Of dtsHuelse.SteinfeldItemRow))
    2. Dim rwDruck = DtsDruck.Druck.AddDruckRow(Date.Now, "")
    3. For Each rwItem In printedRows
    4. DtsDruck.PrintedItem.AddPrintedItemRow(rwDruck, rwItem.Prod__Order_No_)
    5. Next
    6. End Sub

    Neu

    hmm - dann ist wohl die DataTable nicht so wie ich dachte.
    Ich dachte, Druck.ID sei Primkey mit AutoIncrement.
    AutoIncrement-Spalten müssen beim Adden nicht extra angegeben werden - bleiben also übrig anzugeben die beiden Spalten Timestamp und Bemerkung - was ich denn ja auch tutete:

    VB.NET-Quellcode

    1. Dim rwDruck = DtsDruck.Druck.AddDruckRow(Date.Now, "")


    Aber du kannst auch mit dem Cursor die öffnende Klammer wegnehmen und wieder hinmachen - dann sollte Intellisense dir angeben, welche Argumente erwartet werden.

    Oder du setzst den Cursor auf AddDruckRow, und springst mit KontextMenü-"zu Definition gehen" dorthin, wo die Methode deklariert ist. Da steht ja, welche Argumente erwartet werden.

    Neu

    Die Eindeutige ID in der Spalte "Product_ Order No_" ist ein String, da die Werte Zahlen mit Bindestrich (123456-1) sind.

    Gibt das ein Problem? Bei deinen Beispiel Videos ist es immer ein "INT32 Auto Increment True"

    Muss ich diesen Wert vllt. als Zahl umwandeln (1234561 ohne Bindestrich) und in eine Extra Spalte schreiben?

    Neu

    ich habe in der Mastertabelle ein Spalte ID hinzugefügt. wusste leider nicht, dass diese ja Automatisch Nummern vergibt und dachte ich muss diese mit Werten füllen.

    Zu dem anderen Problem, nein konnte das noch nicht beheben. Denke bin noch viel zu Grün in Sachen VB.NET oder das Projekt ist für einen Anfänger wie mich zu schwer.
    Kann ich selber so gar nicht beurteilen.

    Neu

    Hmm - ich finds zum Aufgeben noch zu früh - aber musst du wissen.
    Allerdings bin ich sehr dafür immer erst ein Problem zu lösen, bevor man das nächst angeht.
    Als ich bin noch bei

    ErfinderDesRades schrieb:

    VB.NET-Quellcode

    1. Dim rwDruck = DtsDruck.Druck.AddDruckRow(Date.Now, "")
    "Fehler bei der Überladungsauflösung, da keine zugreifbare "AddDruckRow" diese Anzahl von Argumenten akzeptiert"
    Da kann man nun zwei Dinge dran lernen
    1. Normalerweise ists ein Kinderspiel, die Argumentliste per Intellisense zu Gesicht zu bekommen, und damit ablesen, welche Argumente (inkl. ihres Datentyps) die Methode haben will
      Wenn du weiter Prgogrammieren willst, ist das ein unverzichtbares KnowHow.
      Leider habich speziell dazu kein Video verfasst, sondern nur welche, bei denen sowas ähnliches vorkommt: Video-Tut: Welchen Datentyp hat das Objekt? , VisualStudio richtig nutzen (Google ist nicht deine Mami)
    2. Richtig modellieren - wie gesagt: Die Spalte Druck.ID sollte Primkey sein (ist sie ja), und sollte dann auch AutoIncrement haben - und dann sollte der Code allerdings korrekt durch den Compiler gehen.



    Kim schrieb:

    ich habe in der Mastertabelle ein Spalte ID hinzugefügt. wusste leider nicht, dass diese ja Automatisch Nummern vergibt und dachte ich muss diese mit Werten füllen.
    Ich weiss nicht, was bei dir die 'MasterTabelle' ist, und weiss jetzt nicht mehr, wie dein Datenmodell aussieht.
    Nach meim Dafürhalten ist das Datenmodell wie in post#12 gezeigt gut geeignet, und dem sollte nix hinzugefügt werden.
    Nur die Primkeyspalten sollten AutoIncrement bekommen - wenn sie es nicht haben.

    Neu

    Nein Aufgeben möchte ich auch noch nicht.

    So habe das ganze noch einmal Modelliert und siehe da der Fehler ist weg.
    Mit Mastertabelle meinte ich die Datatable aus dem Dataset "dtsHuelse" wo ich die Daten aus der SQL View Anzeige.
    Wenn das nicht notwendig ist eine dann nehme ich die Spalte wieder raus.

    Neu

    Ja genau Tabelle SteinfeldItem. Dachte nur vllt. benötigt diese auch eine ID. Aber wir hatten ja gesagt wir nehmen dann die Product_ Order_ No.

    Druck.ID ist Primär und AutoIncrement, sowie auch die PrintedItem.ID.
    Printed.Druck ID ist Autoincrement und PrintedtItem.SteinfeldItemID ist String.
    Eine Druck.SteinfeldItemID habe ich nicht.
    Bilder
    • dtsDruck.png

      143,23 kB, 1.922×1.080, 5 mal angesehen
    • Dataset dtsHuelse.jpg

      240,4 kB, 1.923×1.080, 7 mal angesehen

    Neu

    Leider funktioniert noch gar nichts der Sachen.

    Die Datatables sind noch komplett leer, da tut sich leider gar nichts.
    Das Schreiben macht er aber natürlich alles leer, da er keine Daten in den Tables hat.(er schreibt eine XML Datei ohne Daten)

    Möchte ich denn die ganze Zeile der SteinfeldItem Tabelle schreiben oder nur die Prod_ Order_ No_, PrintedOut und Timstamp Spalte?

    Ich habe es bissher nur geschaft die über die Datagridview die Zeilen zu markieren und zu schreiben.

    Du hattest ja am Anfang gesagt so macht man das nicht, da ich ja mit den Zeilen der Datatable arbeiten möchte. Stimmt ja auch.

    Nur leider ist mir das noch nicht gelungen.
    Ich hatte dein Schleife vom Anfang mal ausprobiert aber er meckert spätes Binden ist nicht möglich wenn ich

    VB.NET-Quellcode

    1. ​Private Sub cmd_Drucken_Click(sender As Object, e As EventArgs) Handles cmd_Drucken.Click
    2. Dim sfis = New List(Of dtsHuelse.SteinfeldItemRow)
    3. For Each dgvRow In Me.SteinfeldItemDataGridView.SelectedRows
    4. Dim sfi = DirectCast(DirectCast(dgvRowDataBound, DataRowView).Row, dtsHuelse.SteinfeldItemRow)
    5. sfis.Add(sfi)
    6. Next
    7. End Sub


    benutze.
    Bilder
    • 1.png

      180,26 kB, 1.956×1.080, 5 mal angesehen

    Neu

    Hmm - da musste einfach nochmal post#8 gucken - ich gab dir einen anderen Code - insbes. Zeile #5.
    Und bitte die sinnlosen Leerzeilen entfernen.
    Code soll kurz sein - und sinnlose Leerzeilen rauswerfen ist die einfachste Übung, das zu erreichen.

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

    Neu

    Habe den Code jetzt aus Post 8# genommen und der wirft einen Fehler aus. "Option Strict On" lässt spätes Binden nicht zu.

    markierte stelle ist dgvRow.DataBoundItem.

    VB.NET-Quellcode

    1. Private Sub cmd_Drucken_Click(sender As Object, e As EventArgs) Handles cmd_Drucken.Click
    2. Dim sfis = New List(Of dtsHuelse.SteinfeldItemRow)
    3. For Each dgvRow In Me.SteinfeldItemDataGridView.SelectedRows
    4. Dim sfi = DirectCast(DirectCast(dgvRow.DataBoundItem, DataRowView).Row, dtsHuelse.SteinfeldItemRow)
    5. sfis.Add(sfi)
    6. Next
    7. End Sub​