DB Tabelle umsortieren und nach CSV exportieren

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von softi.

    DB Tabelle umsortieren und nach CSV exportieren

    Hallo zusammen,

    ich müsste eine Datenbank Tabelle die in etwa so aussieht:

    ID|Zeitstempel|Prozessid|Value
    x xxx.uhrzeit 10 1
    x xxx.uhrzeit 15 30

    in eine CSV Datei exportieren die dann so aussehen soll:

    Zeitstempel, Prozessid 10, Prozessid 15, xxx
    xxx.uhrzeit, value (pid 10), value (pid 15), value (pid xxx),

    Leider fehlt mir der ansatz wie ich die Daten richtig auslese und sortiere.
    Das ganze würde ich dann in einer Datatable ablegen und die nach CSV exportieren.

    Kann mir evt. jemand einen Tip geben?

    Grüße
    Softi
    Was heißt du hast sie in einer DB?
    Hast du die Daten schon in nen Dataset oder ähnlichem von deiner DB geladen?

    Prinzipiell kannst du ja schon beim SELECT Befehl die Reihenfolge angeben....
    Aber auch beim herausschreiben... Was hast du denn schon?
    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
    Die Daten sind schon in der Datenbank (obere Tabelle).
    Ich kann die Daten auch in ein Dataset laden und exportieren.

    Mein Problem ist vielmehr die Daten richtig auszulesen und abzulegen.
    Also aus der Spalte der Prozessids eine Kopfzeile in der CSV zu erstellen
    und die Value Werte dann in den nächsten Zeilen einzutragen.
    Du sagst du kannst die Daten in ein Dataset laden...
    Dann kommt jetzt die wichtigste Frage:
    Wie tust du das?
    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
    So (hier nur mals 10 Prozesswerte)

    VB.NET-Quellcode

    1. Dim dt As New DataTable
    2. Dim da As New SQLiteDataAdapter
    3. Using conn As New SQLiteConnection
    4. Using cmd As New SQLiteCommand
    5. If conn.State = ConnectionState.Open Then
    6. conn.Close()
    7. End If
    8. conn.ConnectionString = Global_Const.ConnStrSqlite
    9. cmd.Connection = conn
    10. cmd.CommandText = "SELECT * FROM LogDOx WHERE Zeitstempel <= @DateEnd AND Zeitstempel >= @DateStart AND PWID = @pw OR PWID = @pw1 OR PWID = @pw2 OR PWID = @pw3 OR PWID = @pw4 OR PWID = @pw5 OR PWID = @pw6 OR PWID = @pw6 OR PWID = @pw8 OR PWID = @pw9"
    11. cmd.Parameters.AddWithValue("@DateStart", Zeit_von)
    12. cmd.Parameters.AddWithValue("@DateEnd", Zeit_bis)
    13. cmd.Parameters.AddWithValue("@pw", CShort(xPWIDLine_1.Item(0)))
    14. cmd.Parameters.AddWithValue("@pw1", CShort(xPWIDLine_1.Item(1)))
    15. cmd.Parameters.AddWithValue("@pw2", CShort(xPWIDLine_1.Item(2)))
    16. cmd.Parameters.AddWithValue("@pw3", CShort(xPWIDLine_1.Item(3)))
    17. cmd.Parameters.AddWithValue("@pw4", CShort(xPWIDLine_1.Item(4)))
    18. cmd.Parameters.AddWithValue("@pw5", CShort(xPWIDLine_1.Item(5)))
    19. cmd.Parameters.AddWithValue("@pw6", CShort(xPWIDLine_1.Item(6)))
    20. cmd.Parameters.AddWithValue("@pw7", CShort(xPWIDLine_1.Item(7)))
    21. cmd.Parameters.AddWithValue("@pw8", CShort(xPWIDLine_1.Item(8)))
    22. cmd.Parameters.AddWithValue("@pw9", CShort(xPWIDLine_1.Item(9)))
    23. conn.Open()
    24. da.SelectCommand = cmd
    25. da.SelectCommand.Connection = conn
    26. da.Fill(dt)
    27. conn.Close()
    28. End Using
    29. End Using


    welche Prozesswerte geladen werden, kann der user vorher angeben.

    Gruß
    Softi
    Guten morgen,

    ok. Dann bekomm ich jede Zeile seperat.
    Ich steh aber immer noch aufm Schlauf mit dem umsortieren.
    Also aus der einen Spalte Prozessid die erste Zeile in der CSV Datei als "Header" zu machen und
    unterhalb dann die betreffenden Value.
    ich hab keinen Plan, wie man aus einer Id-Spalte einen csv-Header (was immer das sein mag) machen sollte - klingt ein bischen, als wollest du die Daten nach Id gruppiert ablegen oder anzeigen oder was auch immer.
    Oder als wollest du mehrere Tabellen in die csv packen - dann wärs aber kein csv mehr.

    Generell gilt: Für Datenverarbeitung gibts um Welten bessere Datenformate als Csv. Aber kommt drauf an, was du machen willst.
    aber das ist immer noch Nonsense:

    softi schrieb:

    Also aus der einen Spalte Prozessid die erste Zeile in der CSV Datei als "Header" zu machen


    vlt. willst du ja aus den Spalten-Namen die Header machen?

    Aber ich peile grad nicht, welche Spalten-Namen sich aus deinem Sql-Command ergeben - das find ich eh total eigenartig das Command.
    Hallo,

    das SQL Command gibt mir ja nur die Values der Prozessids von bis zurück und da nur die, die der
    Benutzer auswählt.

    In die Datenbank wird quasi immer der Zeitstempel, die Porzessid und der zugehörige Value eingetragen.

    Ich möchte die CSV dann daraus erstellen:

    CSV Zeile 0 (Header) |Zeitstempel | Prozessid 1 (ID aus der DB Tabelle) | Prozessid 2 (ID aus der DB Tabelle) | ....
    CSV Zeile 1 (Daten) | 01.01.2014 | 10 | 20
    CSV Zeile 2 (Daten) | 02.01.2014 | 15 | 25
    CSV Zeile X (Daten) | .... | ...
    ich versteh noch nicht, wie das ergebnis sich zusammensetzen soll.

    zu jeder ProcessID gibts viele Zeitstempel.

    Wenn 2 Zeitstempel verschiedener ProcessIds identisch sind, dann kann man die theoretisch in einer Tabellenzeile unterbringen, die PIds in zusätzlichen Spalten.

    Aber die meisten Zeitstempel treffen doch nur auf eine einzige PId zu - dann sollen alle anneren Spalten leer sein?

    also ich kapier nix.

    Zeige mal 30 Datensätze, wie sie inne DB stehen, und wie die Daten dann im csv angeordnet sein sollen.
    deine Übertragung scheint mir fehlerhaft - warum taucht der Zeitstempel 13.12.13 11:48:00 mehrfach auf? Sollten diese Werte nicht in eine Zeile?

    Ansonsten könnte man die Daten in eine Liste von Datenklassen einlesen, und diese nach Zeitstempel gruppieren, und innerhalb der Gruppe nach PWId sortieren.

    Dann könnte man die Gruppen durchlaufen, darin die PWIds durchlaufen, und entsprechend die csv-Zeilen wegschreiben.

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