Datum - Einträge im DataTable

  • VB.NET

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

    Datum - Einträge im DataTable

    Hallo

    ich habe einen DataTable mit einem Feld 'Datum', Format DateTime

    ich möchte nun alle Einträge vom 1.6.2017 aus diesem DataTable rauslesen.

    Kann mir da jemand helfen? Alles, was ich ergoogelt habe, funktioniert nicht.

    hier mein Code:

    Dim dtDatum As DataTable
    Dim dsDatum As DataSet

    dsDatum = New DataSet("dsDatum")
    dtDatum = New DataTable("Datum")
    dtDatum = dsDatum.Tables.Add("Datum")
    dtDatum.Columns.Add("Datum", GetType(System.DateTime))

    Dim dtStartMerker As DateTime = Nothing
    Dim dtEndeMerker As DateTime = Nothing

    For Each eintrag In log.Entries
    drDatum = dtDatum.NewRow
    drDatum("Datum") = eintrag.TimeGenerated
    dtDatum.Rows.Add(drDatum)
    Next

    Dim foundRows() As Data.DataRow
    foundRows = dtDatum.Select("Datum = '1.6.2017'")

    For Each dr As DataRow In foundRows
    If dtStartMerker > dr!Datum Then
    dtStartMerker = dr!Datum
    End If
    If dtEndeMerker < dr!Datum Then
    dtEndeMerker = dr!Datum
    End If
    Next
    @samosnabrueck verwende in deinem Projekt mal Strict on. Es werden bei dir einfach wilkürlich Tabellen, Cellen, values und Dates durcheinander geworfen.
    So kann das nicht funktionieren.

    Die "Fehlermeldung" Funktioniert nicht ist übrigens für eine mögliche Hilfestellung denkbar ungeeignet.
    Unterteil dein Problem erst einmal in Unterprobleme und lass die die Zwischenschritte immer mal anzeigen.
    Eine Datatable lässt sich z.B. gut in einem DataGridView anzeigen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    ich formulieren meine Frage nochmal um, da sie wohl nicht verstanden werden kann:

    ich habe einen DataTable mit einem DateTime Feld!

    in diesem DataTable stehen 10 Einträge von vorgestern, 12 von gestern und 5 von heute.

    Ich möchte wissen, wie die Zeile

    'foundRows = dtDatum.Select("Datum = '1.6.2017'")'

    lauten muss, damit ich die Einträge von gestern herausfiltern kann.

    in foundrows sind natürlich keine Daten drin, denn sonst würde sich meine Frage ja von selber beantworten.
    Ich formuliere meine Antwort noch einmal um, da Sie wohl nicht verstanden wurde.
    Stell dein Projekt auf Option Strict ON um.
    Du vergleichst Äpfel mit Birnen und das kann nicht funktionieren.
    Dann gehst du deinen bereinigten Code im Einzelschritt durch und schaust dir an wo nicht mehr das erwartete Ergebnis angezeigt wird.
    Ich habe z.B. keine Ahnung was in log.Entries drin steht und ob in deinem DtDatum überhaupt was drin ist.
    Das ' zeichen in einem Select steht für einen Text nicht für ein Datum
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @xtts02 Das Beispiel ist nicht wirklich hilfreich solange wir nicht wissen was in log.Entries drin steht. Es könnte auch 2017/01/06 oder 6.1.2017 00:00:15 sein. Das ist aber alles nur geraten und hilft nicht, solange @samosnabrueck Äpfel mit Birnen vergleicht.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    samosnabrueck schrieb:

    dtDatum.Columns.Add("Datum", GetType(System.DateTime))


    Schamash schrieb:

    Es könnte auch 2017/01/06 oder 6.1.2017 00:00:15 sein.

    Das Feld ist als DateTime deklariert, nicht als String!
    Wie man DataColumnExpression anwendet bzw. wo man es nachlesen kann, habe ich bereits geschrieben.

    Nachtrag (für all diejenige, die nicht in der Lage sind, einen Link zu öffnen)
    ...
    Datumswerte müssen in Nummernzeichen (#) oder einfache Anführungszeichen ('), basierend auf den Datenanbieter eingeschlossen werden. Dezimalwerte und wissenschaftliche Schreibweise sind für numerische Werte zulässig. Zum Beispiel:
    ...
    "Birthdate < #1/31/82 #"
    ...
    @xtts02 wir wissen aber nicht ob überhaut etwas in dtDatum drin steht. Den "Fehler" mit ' im select hatte ich schon vorher angemakelt und daher nicht erneut aufgeführt.

    alleine schon der erste Teil des Codes ist Blödsinn:

    VB.NET-Quellcode

    1. Dim dtDatum As DataTable
    2. Dim dsDatum As DataSet
    3. dsDatum = New DataSet("dsDatum")
    4. dtDatum = New DataTable("Datum")
    5. dtDatum = dsDatum.Tables.Add("Datum")

    Hier wird eine DataSet und eine DataTable erstellt dann wird beides neu erstellt und zum schluss wird die DataTable ein 3. mal neu erstellt.

    Warum wird hier überhaupt ein DataSet erstellt wenn nur eine DataTable benötigt wird?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Schamash“ ()

    im DataTable stehen solche Werte:

    Datum: 01.06.2017 10:44:32
    Datum: 01.06.2017 10:44:50
    Datum: 01.06.2017 14:30:13
    Datum: 01.06.2017 14:30:32
    Datum: 01.06.2017 17:23:46
    Datum: 06.06.2017 06:49:31
    PS.: Das Wort 'Datum' und der : stehen nicht im DataTable drin

    Diese Zeile brachte auch keinen Erfolg:

    foundRows = dtDatum.Select("Datum = '6/1/2017'")
    @samosnabrueck wie auch?
    '6/1/2017' ist ja auch nicht gleich 01.06.2017 14:30:13
    das erste ist ein Text das zeite ein Datum.

    hast du dir die Beiträge 7,8,9 und 10 überhaupt angeschaut?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @samosnabrueck
    Nach MSDN wird eine Datumangabe mit '#' eingegrenzt.
    siehe Beispiel mit der Methode .Select bei einer DataTable...

    VB.NET-Quellcode

    1. Dim foundRows = dt.Select("Datum = #6/1/2017#") ' Monat/Tag/Jahr

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

    @VB1963 Das versuchen wir nun schon den ganzen Tag dem TE zu erklären. Bisher ohne erfolg.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @samosnabrueck
    Natürlich berücksichtigt die Filterexpression ("Datum = #6/1/2017#") nur das Datum alleine und nicht den Zeitteil.
    Seine Einträge haben aber auch einen Zeitteil - also muss die Expression wie folgt ausschauen, damit gewünscht gefiltert wird:

    VB.NET-Quellcode

    1. Dim foundRows = dt.Select("Datum >= #6/1/2017# And Datum < #6/2/2017#") ' Monat/Tag/Jahr