DB-Programmierung ohne Datenbank relationare GrundIdee

  • VB.NET

Es gibt 72 Antworten in diesem Thema. Der letzte Beitrag () ist von mularstein.

    hmm - ich glaub, wegen den leidigen nicht gesetzten Werten muss man doch die umständliche Überladung der AddArtikelRow-Methode nehmen - so ungefähr:

    VB.NET-Quellcode

    1. For Each itm In gp.Group
    2. Dim rwArtikel = typDts.Artikel.NewRow()
    3. With rwArtikel
    4. .PaletteRow = rwPalette
    5. If Not Convert.IsDBNull(itm.SKU) Then .Sku = itm.SKU.ToString
    6. If Not Convert.IsDBNull(itm.Itemname) Then .Name = itm.Itemname.ToString
    7. If Not Convert.IsDBNull(itm.Zustand) Then .Zustand = itm.Zustand.ToString
    8. If Not Convert.IsDBNull(itm.Land) Then .Land = itm.Land.ToString
    9. If Not Convert.IsDBNull(itm.VK_netto) Then .Vk_Netto = CDec(itm.VK_netto)
    10. If Not Convert.IsDBNull(itm.ASIN) Then .Asin = itm.ASIN.ToString
    11. If Not Convert.IsDBNull(itm.EAN) Then .EAN = itm.EAN.ToString
    12. End With
    13. typDts.Artikel.AddArtikelRow(rwArtikel)
    14. Next
    DBNull darf man halt nie direkt abrufen, sondern man muß so umständlich drauf testen, und darf nur abrufen, wenns nicht DBNull ist.

    naja - ich denke fast, das hilft auch nix, sondern man muß die Gruppen nochma anders einlesen

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

    also probierma so:

    VB.NET-Quellcode

    1. Private Sub FillTypDataset(ByVal ds As DataTable, ByVal typDts As PaletteDataset)
    2. Dim groupedData = From dr In ds.Rows.Cast(Of DataRow)() Where Not dr.IsNull("SKU") Select dr!SKU, dr Group By SKU Into Group
    3. For Each gp In groupedData
    4. Dim rwPalette = typDts.Palette.AddPaletteRow(gp.SKU)
    5. For Each itm In gp.Group
    6. Dim dr = itm.dr
    7. Dim rwArtikel = typDts.Artikel.NewRow()
    8. With rwArtikel
    9. .PaletteRow = rwPalette
    10. If Not dr.IsNull("Itemname") Then .Name = dr("Itemname").ToString
    11. If Not dr.IsNull("Zustand") Then .Zustand = dr("Zustand").ToString
    12. If Not dr.IsNull("Land") Then .Land = dr("Land").ToString
    13. If Not dr.IsNull("VK_netto") Then .Vk_Netto = CDec(dr("VK_netto"))
    14. If Not dr.IsNull("ASIN") Then .Asin = dr("ASIN").ToString
    15. If Not dr.IsNull("EAN") Then .EAN = dr("EAN").ToString
    16. End With
    17. typDts.Artikel.AddArtikelRow(rwArtikel)
    18. Next
    19. Next '
    20. End Sub
    ups, muss heißen: typDts.Artikel.NewArtikelRow(), damits typisiert ist, und dem Compiler also die Member bekannt sind.


    das schwierige sind diese ekelhaften untypisierten DataRows, die du da aus dem blöden Excel-Sheet erhälst - die Linq-Zeile ist einfach

    VB.NET-Quellcode

    1. Dim groupedData = From dr In ds.Rows.Cast(Of DataRow)() Where Not dr.IsNull("SKU") _
    2. Select dr!SKU, dr Group By SKU Into Group
    habe noch die Namen angepasst. Es sieht so aus, als ob es fast gschafft wäre.

    Die Fehlermeldung finde ich auch sehr gut. Für meinen Verstand musste bereits irgendwas schon in den Tabellen vorhanden sein, damit diese fehlermeldung kommt. oder nicht?

    Leider Stimmt es nicht, was in der Fehlermeldung drinne steht.
    Alles was mit P12.... anfängt ist nicht die Artikelnummer sondern die palettennr.

    Stimmt irgendwas mit den bezehnungen nicht?
    Bilder
    • seite18.png

      34,16 kB, 559×317, 63 mal angesehen
    ok. sorry mein fehler... Musste noch zusätzliche Abfrage erstellen für die ArtikelNr. Ausversehen habe ich als Zuprdnung die pallenNR angegeben.
    Jetzt passt es . Aber ....

    Ist das möglich, dass er auch leere zeilen versuchen einzulesen.
    Bei der Exceltabelle sind die Paletten mit jeweils zwei leerzeilen voneinander getrennt
    Bilder
    • seite19.png

      34,93 kB, 559×317, 64 mal angesehen
    • seite20.png

      241,06 kB, 1.366×728, 68 mal angesehen
    klar liest er das als Datensatz ein, aber das kann nicht den Fehler erzeugen, denn die Linq-Klausel

    VB.NET-Quellcode

    1. ... Where Not dr.IsNull("SKU")...
    würde eine Leerzeile aussortieren.

    naja - vlt. liester auch einen Leerstring ein - das wäre was anneres als DBNull

    nochn Versuch ins Blaue

    VB.NET-Quellcode

    1. Dim groupedData = From dr In ds.Rows.Cast(Of DataRow)()
    2. Where Not (dr.IsNull("SKU") OrElse dr("SKU") Is Nothing OrElse dr("SKU").ToString = "")
    3. Select dr!SKU, dr Group By SKU Into Group

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

    :D

    Hamma!!! Es hat funktioniert. Vielen Dank für deine Geduld und die sehr ausführliche Hilfe.
    Ich werd mal so langsam wieder schlafen gehen.
    Eine Farge aber noch.
    Wird es denn genauso kompliziert mit Spalten einfügen und berechnen? ;(
    Bilder
    • seite21.png

      93,53 kB, 1.233×484, 71 mal angesehen
    nein, der ganze Krampf ergibt sich einzig aus der miserablen Datenbasis.
    In ein ExcelSheet kannste jeden Mist reinschreiben, zB Leerzeilen, und der Abruf über OleDB tut sein bestes, das iwie hinzubiegen, aber das rät auch nur die Datentypen, und als SpaltenNamen kannst auch jeden Quatsch hinschreiben, also das ist halt rühren in amorphen Datenbrei.

    Und ich hab deine Daten nicht vorliegen, und kann auch immer nur ins Blaue raten.