Announcement

Collapse
No announcement yet.

Datum abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datum abfragen

    Hi,
    .
    ich möchte die Anzahl der Datensätze mit einem Geburtsdatum zählen lassen, aber bekomme von VB immer wieder Fehlermeldungen. Kann mir jemand sagen, wo mein Fehler liegt und wie ich es richtig machen kann?
    .
    For i = 0 To anzahl_datensaetze - 1
    If Me.DsKuenstler1.Kuenstler.Rows(i)("Geburtsdatum") <> "dbnull" Then
    geb_datensaetze += 1
    End If
    Next i

  • #2
    Hallo,
    das DataSet arbeitet (so wie ein SQL Server) mengenorientiert, so dass der "richtige" Weg für diese Aufgabe darin besteht, eine spezielle Sichtweise (View) auf die Datenmenge (DataSet) abzufordern. Dazu wird ein <b>DataView</b> verwendet, um dort in der <b>RowFiler</b>-Eigenschaft noch <i>IS NOT NULL</i>-Datensätzen im Feld <i>Geburtsdatum</i> zu suchen. Über die Eigenschaft <b>Count</b> liefert das DataView die Anzahl der Datensätze zurück, die das Filterkriterium erfüllen.
    <pre>
    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">Dim</span> aDVGeburtsdatum <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataView(aDS.Tables(0))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDVGeburtsdatum.RowFilter = <span style="color: maroon;">"Geburtsdatum IS NOT NULL"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(aDVGeburtsdatum.Count.ToString())</p></div></pre>

    Dies hat zudem den Vorteil, dass automatisch die Datensätze (DataRow-Instanzen der DataTable-Instanz im DataSet) mit einer Löschmarkierung nicht in die Quere kommen. Das vollständige Beispiel (das die Testdaten im Arbeitsspeicher anlegt) sieht folgendermaßen aus:
    <pre>
    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' neue DataTable erzeugen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aDT <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataTable()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.Columns.Add(<span style="color: maroon;">"Nachname"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.Columns.Add(<span style="color: maroon;">"Vorname"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.Columns.Add(<span style="color: maroon;">"Geburtsdatum"</span>, <span style="color: blue;">GetType</span>(DateTime))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.PrimaryKey = <span style="color: blue;">New</span> DataColumn() {aDT.Columns(<span style="color: maroon;">"Nachname"</span>), aDT.Columns(<span style="color: maroon;">"Vorname"</span>)}</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.MinimumCapacity = 10</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Testdaten eintrag</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Mustermann"</span>, <span style="color: maroon;">"Manfred"</span>, DateTime.Now})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Musterfrau"</span>, <span style="color: maroon;">"Gerda"</span>, <span style="color: blue;">Nothing</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Test"</span>, <span style="color: maroon;">"Test"</span>, DateTime.Now})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Dem DataSet hinzufügen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aDS <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataSet</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDS.Tables.Add(aDT)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' DataView erzeugt eine spezielle Sichtweise auf die Daten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aDVGeburtsdatum <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataView(aDS.Tables(0))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDVGeburtsdatum.RowFilter = <span style="color: maroon;">"Geburtsdatum IS NOT NULL"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataGrid1.DataSource = aDVGeburtsdatum</p></div>
    </pre&gt

    Comment


    • #3
      hi,

      danke für die schnelle Antwort. Aber gibt es nicht die Möglichkeit, einfach zu fragen, ob in einem Dateifeld ein Geburtsdatum steht oder obe es leer ist? Und wenn ja, wie

      Comment


      • #4
        Hallo,
        selbstverständlich steht auch noch der Weg über die For Each-Schleife zur Verfügung. Jede DataRow-Instanz (also jeder Datensatz) wird über die Methode <b>IsNull</b> untersucht:
        <pre>
        <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">For</span> <span style="color: blue;">Each</span> aRow <span style="color: blue;">As</span> DataRow <span style="color: blue;">In</span> aDS.Tables(0).Rows</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">If</span> aRow.IsNull(<span style="color: maroon;">"Geburtsdatum"</span>) <span style="color: blue;">Then</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(<span style="color: blue;">String</span>.Format(<span style="color: maroon;">"{0} hat kein Geburtsdatum"</span>, aRow(<span style="color: maroon;">"Nachname"</span>)))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">If</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Next</span></p></div>
        </pre&gt

        Comment

        Working...
        X