Dataset Only - Datensatz Kopieren bzw Verschieben

  • VB.NET

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

    Dataset Only - Datensatz Kopieren bzw Verschieben

    Huhu,

    wollte euch erstmal loben, Ist ein tolles Forum und habe schon viel hier gelesen und Infos gesammelt.

    Nun aber zu meinem Problem. Arbeite mit VB2010 Express und habe dort ein Projekt erstellt in dem sich ein Datagridview befindet in welches ich mittels xml Zugriff, Daten Speichern,Ändern und wieder lesen kann.

    Nun möchte ich aber einen dieser Datensätze aus dem DGV in ein andere DGV verschieben bzw kopieren und bekomme das einfach nicht hin.
    Hintergrund ist der das ich einen Pool aus ca 1000 Datensätzen habe. Diese Datensätze stellen Potenzielle Abholaufträge da welche mittels Knopfdruck an Speditionen wie "DHL" oder "DPD" übergeben werden müssten. Dazu folgendes Bild:



    Nachdem ich nun am Tagesende alle Datensätze die ich brauche in die dem entsprechenden DGV bzw Listboxen(wird jenachdem was einfacher ist geändert) übertragen habe, wird auf "Durchführen" gedrückt und die Datensätze an die jeweilige Spedition übergeben.
    Wie kann ich dies also nun am besten realisieren?

    Wenn ihr da was wüsstet wäre ich euch echt dankbar^^
    Anbei noch der Code den ich momentan habe:

    Quellcode

    1. Imports System.IO
    2. Imports System.ComponentModel
    3. Public Class Form2
    4. Private _DataFile As String = ("C:\Users\matthias\Desktop\DBSample.DataSet.xml")
    5. Private Sub Form_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    6. If (e.KeyCode = Keys.Escape) Then
    7. Me.Close()
    8. End If
    9. End Sub
    10. Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
    11. Dim sr As New System.IO.StreamReader("C:\Users\matthias\Desktop\Lieferschein.txt")
    12. Dim line As String, lineSplitted() As String
    13. Dim firstLine As Boolean = True
    14. DataSet1.tbl_Lieferscheine.Clear()
    15. 'AbholportalDataSet.Clear()
    16. Do While Not sr.EndOfStream
    17. line = sr.ReadLine()
    18. lineSplitted = line.Split(";")
    19. 'MsgBox(lineSplitted(5))
    20. If Mid(lineSplitted(5), 1, 1) = "a" Then
    21. GoTo hierhin
    22. End If
    23. If Mid(lineSplitted(5), 1, 1) = "g" Then
    24. GoTo hierhin
    25. End If
    26. 'Dim newCustomersRow As DataSet1.tbl_LieferscheineRow
    27. 'newCustomersRow = DataSet1.tbl_Lieferscheine.Newtbl_LieferscheineRow
    28. DataSet1.tbl_Lieferscheine.Rows.Add(lineSplitted)
    29. hierhin:
    30. Loop
    31. sr.Close()
    32. sr.Dispose()
    33. End Sub
    34. Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
    35. Me.DataSet1.WriteXml(_DataFile)
    36. End Sub
    37. Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
    38. Me.DataSet1.Clear()
    39. Me.DataSet1.ReadXml(_DataFile)
    40. End Sub
    41. Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    42. 'Hier soll jetzt nach z.B. DHL übertragen werden.
    43. End Sub
    44. End Class


    Bin für jede Hilfe echt dankbar :)

    // Anbei noch ein Bild des Datasets. Einen Primärschlüssel habe ich nicht definiert da es keine Spalte gibt die nicht doppelt vorkommen könnte. Alles kann quasi doppelt vorkommen.

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

    1. pls keine Fremdhoster - Anleitung (Bild-)DateiAnhänge
    2. was soll das Bild eiglich? Viel wichtige wäre ein Bild des Datenmodells, also ein Screenshot des typisierten Datasets


    Du könntest zb. einen Joiningview basteln, wo du im DGV per Combobox die Aufträge einem Abhol-Dienst zuordnest.
    gugge etwa "JoiningView" auf Movie-Tuts
    Hey erstmal danke für deine Antwort.!
    Hab das mit den Bildern nun editiert und auch ein Bild des Datasets angehängt.
    Wie das mit dem Iner Join gemeint ist, weiss ich allerdings nicht so wirklich.
    Hatte das Bild von dem Form deshalb auch hochgeladen, damit man nachvollziehen kann wie das von mir gemeint ist mit dem Verschieben der Datensätze an die jeweiligen Speditionen.
    Könntest du meine Möglichkeiten eventuell etwas genauer erleutern wenn das nicht zu viel verlangt ist? :)
    naja - eine Tabelle ist als Datenmodell für deine Anforderung zuwenig.

    In deiner Anforderung kommen Aufträge vor, und Auftragnehmer.
    Und was du machen willst ist, jeden Auftrag an einen Auftragnehmer deiner Wahl zuzuweisen.
    Am Ende also hat jeder Auftragnehmer zwischen 0 und viele Aufträge.

    Sowas nennt man eine 1:n - Relation in der Datenbänkerei, und dafür muß man 2 Tabellen anlegen: Auftrag und Spedition, und eine Relation zw. den beiden.

    Ich kanns nicht besser erklären, du kannst dir ein paar beispiele angucken, zB DB-Programmierung ohne Datenbank.

    Oder Grundlagen-Theorie: die relationale GrundIdee

    oder vlt. auch "DatasetOnly" auf Movie-Tuts
    Okay danke.Vom Denkansatz bin ich schonmal weiter allerdings weiss ich nun nicht wie ich die Beziehungen zueinander herstellen soll.

    Klar ist: Ich habe eine Tabelle mit allen Verfügbaren Datensätzen. Diese wiederrum müsste ich dann irgendwie an die 2 Tabelle koppeln in der quasi alle Aufträge stehen. Im Datagridview könnte ich ja dann einfach so Filtern das im DGV von "DHL" nur die Datensätze angezeigt werden, für die als Spedition "DHL" ausgewählt wurde.
    Welche Felder müsste ich nun allerdings miteinander verknüpfen und wie bekomme ich die Datensätze aus Tabelle 1 in Tabelle 2 angezeigt?
    Ich hab damals in der Schule wohl Access gehabt und ich weiss auch was eine Relationale Datenbank ist aber dies ist auch schon länger her und gerade bei diesem Projekt habe ich echt eine Denkblockade.
    Das ganze Projekt hatte ich in Excel ja schon realisiert gehabt. Da hab ich einfach mehrere Tabelle angelegt und die Datensätze aus der ersten Tabelle in die jeweiligen Tabelle kopiert und dann aus der ersten Tabelle wieder gelöscht. Das ganze per VB2010 zu realisieren scheint mir irgendwie echt kompliziert zu sein. Dachte immer das wäre irgendwie einfacher :(

    Finde es aber gut dass du den Leuten hier immer so gut hilfst :thumbsup:

    Anbei mal mein angepasstes Dataset mit der 2ten Tabelle.

    Das sind die falschen Tabellen - die unterscheiden sich ja garnet - oder was ist der Unterschied zw. einem Auftrag und einem Lieferschein?

    Und wo sind die Speditionen, in deinem Datenmodell? Kein Wunder, dass du nicht weißt, wie die Relation setzen.

    und wichtig finde ich: mein Benamungs-Schema für DB-Entitäten
    Eine kryptische Benamung führt zu kryptischem Code, eine Benamung mit zu langen Namen führt zu unleserlichem (und meist un-schematischem) Code, eine "lügende" Benamung führt zu lügendem Code.
    Also bei Benamung im Datenmodell: Entitäten singular, und die Schlüsselspalten konsequent nach dem angegebenen Schema.
    Soo ich habe nun ein meiner Meinung nach vernünftiges Datenschema erstellt mit dem man nun auch Arbeiten können sollte.

    Ich sollte an dieser Stell nun vielleicht nochmal erklären worum es genau geht :

    Bei uns in der Firma werden täglich ca 35 Teile verschickt also Lieferscheine erstellt. Am Abend werden genau dieser Lieferscheine als Datensatz in einem gebündelten Textdokument (Semikolon getrennt) aus unserer Warenwirtschaft Exportiert. Da es sich bei uns in der Firma um Austauschteile handelt ist also jeder dieser Lieferscheine, automatisch auch ein Potenzieller Abholauftrag, da das ausgetauschte Teil von uns wieder beim Kunden abgeholt werden muss.

    Gleichzeitig bekomme ich einen Export aller Kundenstammdaten und aller Artikelstammdaten aus der Warenwirtschaft um selbst Aufträge die nicht automatisch exportiert wurden, erfassen zu können.

    Ziel ist es nun per Lieferscheinnummer, Kundennummer oder Artikelnummer nach genau diesen Potenziellen Abholaufträgen zu Suchen. Anschließend wird der gefundene Datensatz entweder an DHL, DPD oder Hellmann übergeben. Um zu kontrollieren wieviele nun exakt mit welcher Spedition abgeholt werden, war mein Gedanke das ganze aufzuteilen. Heisst:
    Ich hab ein DGV mit allen Abholaufträgen von DHL eins mit allen von DPD und so weiter. Nachdem alle Abholaufträge des Tages erfasst wurden. Werden diese mittels Knopfdruck an die jeweiligen Speditionen übergeben.

    Meine Frage ist nun wie ich das jetzt anhand des bestehenden Datenschemas am besten realisieren kann.

    Tut mir leid wenn ich mich wiederhole aber so wirklich weiter komme ich momentan trotzdem noch nicht leider. ;(

    also ich versteh Artikel und Kunde und Transport.
    Ein Kunde beauftragt einen Transport, und das kann ein Hin-Transport sein oder ein Rück-Transport - is ja egal. Nee, ist nicht egal, sondern jeder Transport ist Hin und Rück, nur dass Rück evtl noch offen ist.

    ABer so wies jetzt modelliert ist, kann ein Transport an mehrere Speditionen gleichzeitig verteilt werden, und das verstehe ich nicht.

    Deine Such-Abfrage wird kein Thema sein: Alle Transporte in ein DGV, und dann der BindingSource einen Filter geben.

    Nur Transport würde ich anders modellieren, nämlich ein Transport hätte 2 ForeignKeys auf Spedition: eine für den Hinweg und eine für Zurück.

    ABer ich lege dir nochmal dringlich mein Benamungs-Schema für DB-Entitäten ans Herz.

    Ansonsten findich, du kommst ganz gut voran.
    Als nächstes müssteste 4 DatagridViews auf ein Form schmeißen, und je an eine eigene Tabelle binden. Damit du schonmal einen Test-Datenbestand eingeben kannst.
    Und natürlich eine Laden und Speichern-Methode, am besten die aus Phonebook, die Region "Wiederverwendbares".
    Die Eingabe für den Transport wird dabei komplizierter, weil das muß ein m:n-View werden, oder mindestens ein JoiningView, also da müssen Combobox-Columns ins DGV eingebastelt werden.

    Ich vermute, das wird noch nicht recht gehen, weil mir deine Relationen sehr verdächtig vorkommen - was haben die für eigenartige Namen? Da denke ich, du hast nicht die richtigen Spalten miteinander verknüpft, und auch nicht "Beziehung + FremdschlüsselEinschränkung" aktiviert etc. - guck dir nochmal genau an, wie die beiden Tabellen aus Phonebook miteinander verknüpft sind: Immer den Primkey mit dem ForeignKey.
    Okay danke werde ich mir angucken. :)

    Aber nur zur Info. Der Hintransport ist nicht nötig.
    Es geht nur um den Rücktransport und quasi darum, dass man eine Liste hat in der Grundsätzlich nachvollzogen werden kann, welcher Kunde was bekommen hat damit man weiss welches Austauschteil vom Kunden noch abgeholt werden muss.
    Kurz um, ich gebe ins Datagridview die Kundennummer von XY ein uns sehe z.B 4 Datensätze. Diese 4 Datensätze bedeuten dann, dass der Kunde bei uns 4 Teile gekauft hat, für die wir noch das Austauschteil abholen lassen müssen. Um dann nicht jeden Kunden mit Anschrift selber nochmal eingeben zu müssen werde diese halt von vorne rein aus der Warenwirtschaft exportiert.

    Der Hintransport ist in dem Warenwirtschaftssystem schon geregelt und alles was als Lieferschein am Tagesende exportiert wird. Ist auch schon gelaufen bzw auf dem Weg zum Kunden.

    Heisst also dass das Textdokument mit den Datensätzen die Abends Exportiert werden genau die Datensätze sind die früher oder später ( sobald der Kunde bescheid sagt dass sein Austauschteil abholbereit ist) mit der jeweiligen Spedition abgeholt wird.

    Holistiker schrieb:

    Kurz um, ich gebe ins Datagridview die Kundennummer von XY ein uns sehe z.B 4 Datensätze. Diese 4 Datensätze bedeuten dann, dass der Kunde bei uns 4 Teile gekauft hat, für die wir noch das Austauschteil abholen lassen müssen.

    Naja, du hättest ein DGV mit allen Kunden, und da wähltest du einen aus, und sähest, welche Teile bei ihm rumstehen.
    Und wenner dann eins abgeholt haben will, dann würde eben ein Datum drangemacht, und eine Spedition festgelegt.
    Jepp genau das möchte ich :)
    Zusätzlich sollten dann halt in 3 zusätzlichen DGV's ( Für jede Spedition eins ) in echtzeit angezeigt werden für wieviele Aufträge ich jetzt die jeweilige Spedition gewählt habe.
    Ist mein Tabellenschema dann jetzt doch irgendwie zu kompliziert oder wie soll ich das angehen?
    Du scheinst aufjedenfall verstanden zu haben welchen Ausgangspunkt ich nun benötigte aber blöderweise bin ich jetzt doch wieder verwirrt und weiss gerade nicht wo ich anfangen soll :(

    Sorry wenn ich dich so nerve damit :S
    wie gesagt, imo passtes nicht, dass ein Transport an mehrere Speditionen aufgeteilt werden kann.
    Die MittlerTabelle, die bei dir den abartigen Namen "tbl_Auftrag" trägt, muß fort, und stattdessen wird Transport direkt mit Spedition verknüpft (Spedition übergeordnet)

    also insgesamt die Relationen:
    Spedition->Transport
    Kunde->Transport
    Artikel->Transport

    Damit ist klar abgebildet, welcher Artikel mit welcher Spedition von welchem Kunden abgeholt wird.

    Aber guck dir unbedingt noch meine Argumentation zu mein Benamungs-Schema für DB-Entitäten

    Sorry wenn ich dich so nerve damit ;)

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

    Okay ich glaube das Datenbankschema ist nun richtig. Vorrausgesetzt ich kann in der tbl_Transport die "Lieferscheinnummer", "Beleggruppe" und die "Menge" so stehen lassen.
    Ich wüsste zumindest nicht wie ich diese noch explizit auseinander ziehen sollte um die Beziehungen zueinander zu gewährleisten.
    Lieferscheinnummern können ja auch doppelt vorkommen wenn ein Kunde mehrere verschiedene Artikel gleichzeitig bestellt hat.

    Sind es mehrere Artikel von der selben Sorte sehe ich das leider in meinem Exportierten Textdokument aus das Warenwirtschaft nur anhand des Gewichts.
    Heisst also ich muss über jeden Auftrag eine Schleife laufen lassen die das Gewicht mit dem eingetragenen Gewicht aus dem Artikelstamm vergleicht. Ist dieses Doppelt so hoch waren es 2 Artikel von der selben Sorte u.s.w.

    Kann ja mal ein Beispiel aufführen wie mein Datensatz den ich verarbeiten muss ueberhaupt aussieht:

    Quellcode

    1. Belegart(brauch ich nicht); Beleggruppe( 10 heisst PKW,11 LKW und 15 heisst Garantieantrag);Lieferscheinnummer;Warenausgangsdatum;Kundennummer;Artikelnummer;Gewicht;Firmenname1;Firmenname2;Firmenname3;Straße;Plz;Ort;Land;Kontakt;Telefon
    2. L;10;31023144;25.10.2012;49874;41120;240;MusterFirma;GmbH & Co. KG;;Landhausweg 17;35216;Biedenkopf-Wallau;DE;;


    und?
    hast du inzwischen ein Form mit mindestens 3 DGVs, um den übergeordneten Tabellen Datensätze eintragen zu können?

    Und Load + Save? (gugge Phonebook)

    Was hälst du eiglich von meinem Vorschlag, bei der Benamung von Tabellen und Spalten möglichst schematisch vorzugehen, etwa nach dem hier angedeuten Schema: mein Benamungs-Schema für DB-Entitäten
    ?

    Insbesondere wozu sind diese tbl_ - Prefixe gut, ausser dass sie deinen Code unleserlicher machen werden?


    also wenn du soweit bist, mit laden und speichern, kannsteja versuchen, Comboboxen einzufrickeln, auf die in "JoiningView" bzw. "m:n-View" auf Movie-Tuts gezeigte Vorgehensweise.

    Unanimiert gibts die Erklärung auch hier: vier Views

    Ansonsten das Projekt anhängen, das kannich auch in 5 min einfrickeln. Hauptsache, es ist erstmal lauffähig unds gibt schoma TestDaten.
    Bastel ich gleich mal zusammen :)

    Das mit dem tbl habe ich damals so in der Schule gelernt als wir uns mit Access Datenbanken beschäftigt haben. In meinen Access Büchern die ich hier rumliegen habe wird das auch so gemacht um deutlicher zu machen dass es sich um eine Tabelle handelt. tbl_für Tabelle, qry_ für Abfragen, frm_ für Formulare usw.
    Jo, aber im typDataset gibts nur Tabellen, deshalb sind hier prefixe sinnlos, weils nix zu unterscheiden gibt.

    Prefixe sind ja immer hässlich, unleserlich und umständlich (aber oft eben nützlich zur Unterteilung in verschiedene Gruppen). Nur halt im typDataset sind sie nicht nützlich, weil es gibt nur eine Gruppe: DataTables.
    Okay lass ich demnächst weg ;)

    Hab jetzt mal mein Projekt plus die .xml datei als Rar angehängt. Im Projekt selber muss natürlich der Pfad zur .xml noch angepasst werden.

    Allerdings ist mir nun immer noch schleierhaft wie ich aus dem von mir vorgegeben Datensatz ( Siehe einige Posts oben ) mit Lieferscheinnummer etc. in dem Projekt arbeiten soll?

    Ich habe es wie gesagt mal angehangen in der Hoffnung das ich dir nicht all zu viele Umstände bereite. Großes Danke an dieser Stelle schonmal!

    Projects.rar
    Das Dataset noch immer voll der Horror: Schlüsselspalten immer Integer (normalerweise), Primärschlüssel mit AutoIncrement, und habich eiglich schon mein Benamungs-Schema für DB-Entitäten erwähnt?
    Es gibt normalerweise keinen Grund, warum eine Primkey-Spalte anders als kurz und knapp "ID" heißen sollte, und eine Fremdschlüsselspalte heißt dann eben zB. "KundeID", und damit ist ganz klar und in jedem Fall ersichtlich, was wie mit wem verknüpft ist.
    Und Singular!

    Aber wirklich schlimm ist, dass bei dir ühaupt kein anderer Datentyp als String verwendet wird (das macht man auch in Access nicht so).
    Es ist absolut zwingend, eine Mengenangabe numerisch zu deklarieren, also Stückzahlen sind Integer, Gewicht ist Double, Währung ist Decimal, DAtumse sind Date und so weiter.

    Zum Layout beschäftige dichma ausgiebig mit Layout in WinForms
    Also mit SplitContainern und TabControl kriegt man recht flott zwar keine Schönheit hin, aber ein leistungsfähiges Arbeitstier.
    Dateien