operator + für db null nicht definiert

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Fonsi.

    operator + für db null nicht definiert

    Hallo,

    bin blutiger Anfänger und versuche in VB2008 express Daten aus einer Accesstabelle einzulesen.
    Da in einzelnen Zellen 0,00€ steht bekomme ich die Fehlermeldung dass der operator + für dbnull nicht definiert ist.

    Die Zeile 'sum = sum + (reader("hwprov"))' soll die eingelesenen Werte aufsummieren, so dass ich am ende der listbox die summe als item auswerfen kann.

    Der Codeschnipsel:

    VB.NET-Quellcode

    1. Do While reader.Read()
    2. lsthw.Items.Add(reader("hwprov"))
    3. sum = sum + (reader("hwprov"))
    4. Loop



    Ich kann leider nirgends etwas über die nichtdefinition des +Zeichen etwas finden.

    Wer weiss abhilfe?


    Vielen Dank
    Harry

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

    Erst Lesen!
    Vielen Dank für den Hinweis, aber so schlau war ich auch schon.
    Dummerweise steht im
    nichts davon drin.

    Ich gebe zu dass ich noch nicht drei Bücher vollständig auswendig rezitieren kann, und vielleicht auch zu blöd bin im Internet die Lösung zu finden.

    Schade dass Du mir zwar den Hinweis

    0 ist nicht NULL.
    0 + 1 = 1
    NULL + 1 = error
    gibst, aber nicht wie ich mein Problem lösen kann.

    Warum antwortest Du denn überhaupt?

    Nur um mir vorzuhalten ich wäre zu faul selbst nach der Lösung zu suchen?

    Sorry für den Ton, aber ich dachte hier würde konstruktiv gearbeitet.

    haco schrieb:

    Warum antwortest Du denn überhaupt?

    Weil ich dir die Lösung gegeben habe.
    In den/einigen Feldern steht eben nicht 0,00, sondern NULL (also nix) drin. Das musst du entweder abfangen oder in die DB tatsächlich 0,00 eintragen, wenn ein Feld NULL ist. Bei den meisten DBs gibt's ja auch extra sowas wie "allow null" für Felder. Das setzt man auf false und vermeidet damit solche Fehler.
    Hallo Picoflop,

    vielen Dank dass du mir noch mal geantwortet hast.

    Ich habe durch

    VB.NET-Quellcode

    1. Private Sub txthwm_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txthwm.TextChanged
    2. If txthwm.Text = "" Then
    3. txthwm.Text = 0
    4. End If
    5. hw = Val(txthwm.Text.Replace(",", "."))
    6. End Sub


    Dann sende ich hw


    schon versucht auszuschliessen, dass ein leeres textfeld Null erzeugt.

    Ich arbeite mit Access, dort wird aber im Feld (Felddatentyp Währung) immer 0,00 € eingetragen, egal ob Null oder 0 gesendet wird.
    Hat geklappt, vielen vielen Dank.

    Vielleicht erbarmt sich ja noch jemand und hilft mir noch einmal.

    Ich lese Werte aus einer Access DB aus und lasse diese in einem listfeld anzeigen.
    - Wie kann ich diese Werte aufsummiert ebenfalls in diesem Listfeld unten anzeigen lassen?
    - Wie kann ich Werte im Listfeld als €-Betrag, 2 Nachkommastellen rechtsbündig anzeigen lassen?

    Wäre echt super, hab schon überall gesucht und bin noch nicht weitergekommen.
    "Listfeld" finde ich nicht unter meinen controls. Ist das was neues?
    Heißt: Bitte korrekte Bezeichnungen verwenden, damit es keine Missverständnisse gibt!

    Wo ist das Problem?
    Nach dem "Loop" halt noch ein blup.items.add(sum.tostring)? Oder meinst du was anderes?
    Also ich hab für mich einen Weg gefunden:

    Do While reader.Read()

    lstkund.Items.Add(reader("kunde"))

    lsthw.Items.Add(IIf(reader.IsDBNull(0), 0, reader("hwprov")))
    a += (reader("HWProv"))

    lstbox.Items.Add(IIf(reader.IsDBNull(0), 0, reader("boxprov")))
    b += (reader("boxProv"))

    lstdl.Items.Add(IIf(reader.IsDBNull(0), 0, reader("dlprov")))
    c += (reader("dlprov"))

    lstppp.Items.Add(IIf(reader.IsDBNull(0), 0, reader("pppprov")))
    d += (reader("pppprov"))

    lstneuk.Items.Add(IIf(reader.IsDBNull(0), 0, reader("neukprov")))
    i += (reader("neukprov"))

    lstfleet.Items.Add(IIf(reader.IsDBNull(0), 0, reader("fleetprov")))
    f += (reader("fleetprov"))

    lstfleeteinm.Items.Add(IIf(reader.IsDBNull(0), 0, reader("fleeteinmprov")))
    g += (reader("fleeteinmprov"))

    lstsumme.Items.Add(IIf(reader.IsDBNull(0), 0, reader("sumprov")))
    h += (reader("sumprov"))

    Loop

    reader.Close()
    con.Close()
    Catch ex As Exception
    MsgBox(ex.Message)

    End Try
    Danach die Summen in die Listbox hinzufügen und alles stimmt.

    Die Profis unter euch schlagen jetzt sicher die Hände über dem Kopf zusammen, aber ich bin soweit mal stolz so weit gekommen zu sein 8o :D

    Wenn mir jetzt noch jemand sagen kann wie ich die zahlen in der listbox rechtsbündig als Eurobetrag mit € Zeichen und zwei Nachkommastellen ausgebe, dann bin ich schon ein ganz gutes Stück voran gekommen.

    Vielen vielen Dank für Eure Hilfe.

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

    Hallo,

    ich habe das gleiche Problem, aber bekomme den Fehler irgendwie nicht weg. Ich habe schon mehrere Möglichkeiten getestet, aber es klappt einfach nicht.


    VB.NET-Quellcode

    1. cmd.CommandText = "select * from Objekte where Objekt='" & My.Settings.Einsatz_Straße & "'"
    2. Try
    3. con.Open()
    4. reader = cmd.ExecuteReader()
    5. Do While reader.Read()
    6. lblAnfahrt1.Text = reader("Anfahrt1")
    7. lblAnfahrt2.Text = reader("Anfahrt2")
    8. 'lblAnfahrt4.Text = IIf(reader.IsDBNull(0), 0, reader("Anfahrt4"))
    9. lblAnfahrt4.Text = (IIf(reader.IsDBNull(0), 0, reader("Anfahrt4")))
    10. lblAnfahrt4.Text = reader("Anfahrt4")
    11. Loop
    12. reader.Close()
    13. con.Close()
    14. Catch ex As Exception
    15. MsgBox(ex.Message)
    16. End Try


    Das Datenbankfeld "Anfahrt4" ist leer. In den anderen steht überall etwas drin. Als Datenbank verwende ich Access. Wäre nett, wenn mir jemand einen Gedankenanstoß geben könnte.

    Axel schrieb:

    ich habe das gleiche Problem

    Da ich keinen "+" Operator sehe, glaube ich das nicht ...

    btw:
    IsDBNull(0) ????

    Der Index des Anfahrt4 Feldes ist 0? Auch das kann ich kaum glauben!
    Und da du Textfelder füllst, macht iif(foo,0,bar) nicht viel Sinn. Sinnvoller wäre wohl iif(foo, String.Empty, bar)
    Das Porblem was ich habe ist, dass ich durch eine Datenbankabfrage 8 Labels fülle. Es kann aber sein, dass nur für 3 Label was in der Datenbank steht. Daher es darf in die Labels 4 bis 8 nicht eingetragen werden. Da aber in der Access-Datenbank die Felder leer sind, erhalte ich immer eine Fehlermeldung das DB Null nicht definiert ist, und mein Programm stürzt ab. Ich verstehe aber noch nicht so ganz, wie ich den Fehler beseitigen kann.

    picoflop schrieb:

    IsDBNull ist doch schon mal ok. Man muss allerdings den richtigen Feldindex verwenden!!!!

    Dann bin ich ja garnicht soweit weg von der Lösung.

    Ich habe es mit:

    VB.NET-Quellcode

    1. lblAnfahrt3.Text = (IIf(reader.IsDBNull(7), 0, reader("Anfahrt4")))
    2. lblAnfahrt3.Text = reader("Anfahrt4")

    versucht, habe aber leider keinen Erfolg.

    Bei dem Beispiel steht "Anfahrt4 in der 8. Spalte in der Datenbank.


    Eine Frage noch. Kann mir jemand erklären, was hier genau passiert?

    VB.NET-Quellcode

    1. (IIf(reader.IsDBNull(7), 0, reader("Anfahrt4")
    Ich komme einfach nicht weiter. Über das ganze Wochenede habe ich etliche Kombinationen durchprobiert. Aber leider bekomme ich immer den Fahler das DBnull nicht definiert ist. Es wäre nett, wenn mir jemand eine Lösung präsentieren und erklären könnte.