VisualBasic Werte aus Datenbank werden immer gerundet

KingLM97

Lieutenant
🎅Rätsel-Elite ’18
Registriert
Mai 2012
Beiträge
927
Hallo,

ich habe hier eine kleine lokale Datenbank mit Access 2012 erstellt. Die Zahlen dort sind auch auf Währung eingestellt. Wenn ich diese Werte einlesen möchte, rundet er immer ab und lässt das €-Zeichen weg. Damit lese ich die Werte ein und packe sie in eine List:
Code:
'Umsatz vom Vertrieb in eine Liste packen
        Dim vertriebUmsatz As New List(Of String)
        Dim umsatz As Integer
        For i As Integer = 2 To vertriebDT.Columns.Count - 1
            For i2 As Integer = 0 To vertriebDT.Rows.Count - 1
                umsatz = vertriebDT.Rows(i2)(i)
                vertriebUmsatz.Add(umsatz)
            Next
        Next
Komplett egal ob ich List of String, Integer, Double, Single mache, er lässt die Nachkommastellen weg und rundet einfach. Weiß einer eine Lösung?

lg
 
Umsatz ist eine Ganzzahl, also werden die Nachkommastellen abgeschnitten. Ich kenn die Sprache jetzt nicht, aber das ist zumindest meine Vermutung. Die Währung würde ich übrigens in Cent als Integer speichern, sofern es keine halben Cent oder so gibt, um Ungenauigkeiten von float/double zu vermeiden (19,99€ lässt sich zum Beispiel nicht genau als 19,99€ in float/double speichern, allerdings kannst du es als 1999 (Cent) als Integer speichern und als 19,99€ darstellen).
 
Nein, keine halben Cents. Von daher ist das nicht nötig.
Auch wenn ich in der Datenbank als Single, Double, schlag mich tot einstelle, wird es immer gerundet.
 
Mit Access VBA ist das gar kein Problem! Versuche doch einmal folgende Codeänderung:
umsatz = Format(vertriebDT.Rows(i2),"Currency")(i)

Ich hätte das zwar völlig anders gelöst; doch vielleicht funktioniert es ja. Falls Du das wünscht, sende ich Dir gerne einen Codevorschlag - dann bitte eine PN an mich.
 
Stimmt denn die Formatierung der Zielzellen ? Oder sind die auf "Standard" gesetzt? Oder ist diese "Liste" nicht Excel?
 
@DocWindows
Das Format ist aktuell Währung. Aber auch alle anderen Formate funktionieren nicht :(

@ella_one
Der Code funktioniert leider nicht. PN ist raus :)
 
Ich würde mal auf das von ella_one tippen. Was passiert denn wenn du die Variable umsatz als String definierst?
 
Hat sich schon erledigt. ella_one hat mir per PN einen funktionierenden Code gesendet:
Code:
Sub UmsatzVertrieb()
On Error GoTo UmsatzVertrieb_Error
Dim dbDAO As DAO.Database
Dim rstDAO As DAO.Recordset
Dim strSQL As String
Dim intCnt As Integer
Dim avntUmsatzVertrieb() As Variant
strSQL = "SELECT Umsatz FROM tblUmsatz"
Set dbDAO = CurrentDb()
Set rstDAO = dbDAO.OpenRecordset(strSQL, _
dbOpenDynaset)
With rstDAO
.MoveFirst
intCnt = 0
Do Until .EOF
ReDim Preserve avntUmsatzVertrieb(intCnt)
avntUmsatzVertrieb(intCnt) = Format(!umsatz, "Currency")
.MoveNext
intCnt = intCnt + 1
Loop
.Close
End With
UmsatzVertrieb_Exit:
Set rstDAO = Nothing
Set dbDAO = Nothing
Exit Sub
UmsatzVertrieb_Error:
Resume UmsatzVertrieb_Exit
End Sub
(Es muss natürlich für jeden selbst editiert werden)
Ich habe aber auch nochmal eine Lösung gefunden:
Code:
 Dim vertriebUmsatz As New List(Of Double)
        Dim umsatz As String
        For i As Integer = 2 To vertriebDT.Columns.Count - 1
            For i2 As Integer = 0 To vertriebDT.Rows.Count - 1
                umsatz = vertriebDT.Rows(i2)(i).ToString
                vertriebUmsatz.Add(umsatz)
            Next
        Next
Die Liste als double und umsatz als String. Schon funktioniert es wie gewünscht :) Danke an alle :)
Kann geclosed werden :)
 
Zurück
Oben