Laden...

Accessdatenbank Double auslesen

Letzter Beitrag vor 17 Jahren 7 Posts 6.419 Views
Accessdatenbank Double auslesen

Hallo,

ich lese mittels OLEdbAdapter von einer access Datenbank aus, unteranderem auch ein Währungsfeld, welches ich als double konvertiere und zu einem Betrag aus einem Textfeld addiere... Der Gesamtbetrag soll dann wiederrum in die Datenbank geschrieben werden.. Problem ist jetzt nur das er nicht tut, da er irgendwie mit dem Währungsformat aus access probleme hat!

Ich hab schon versucht den ausgelesenen String mit .replace(',','.') von Komma nach Punkt zu transferieren... aber wenn ich dann in Double umwandele dann fällt die Stelle ganz weg und 25,05 wird zu 2505 (/100 hab ich auch probiert.. t net)

thx
mfg

Du wirst wohl fälschlicherweise statt Double das Format decimal benutzt haben, das macht dieses Problem.

Und etwas code deinerseits könnte auch helfen bei der Fehlerbehebung.

ne ich wüsste nicht... hier hab ich mal den code:

   
double bestand = 0;
double ab = Convert.toDouble(anfangsBestand.Text);
            
 cmd.CommandText = "SELECT SUM(einnahme-ausgabe) FROM " + monat + jahr + " WHERE belegnr<="+i+"";
                da.SelectCommand = cmd;
                da.Fill(ds, "summe");

                bestand = Convert.ToDouble(ds.Tables["summe"].Rows[0][0])+ab;

                cmd.CommandText = "UPDATE " + monat + jahr + " SET bestand=" + bestand + " WHERE belegnr=" + i + "";
                da.SelectCommand = cmd;
                da.Fill(ds);

Vielleicht wird in einem Währungsfeld einfach in der kleinsten Währungseinheit gespeichert?
Also 2,53€ als 253 Cent ?
Das wäre doch eine sehr einfache Erklärung deines Problems.

Dein Problem sind eher fehlendes Grundverständnis von ADO.NET.

  1. Niemals Parameter in den Sql-String einbauen, siehe Sql-Injection.

  2. Summe ist bereits ein Double, den brauchst Du nicht noch per Convert umbauen.

  3. Für einzelne Selects, Inserts und/oder Updates benutzt man nicht den Adapter,
    sondern ein Command.

  4. Tabellen so zu benennen ( monat+jahr ) ist ziemlich unüblich.

Besser und deutlich einfacher ist:


double ab = Convert.toDouble(anfangsBestand.Text);
            
cmd.CommandText = "SELECT SUM(einnahme-ausgabe) FROM " + monat + jahr + " WHERE belegnr<="+i+"";

object value = cmd.ExecuteScalar();
if( value != null )
{
  bestand = Convert.ToDouble(value)+ab;
  cmd.CommandText = "UPDATE " + monat + jahr + " SET bestand=@bestand WHERE belegnr=" + i + "";
  cmd.Parameters.AddWithValue( "@bestand", bestand ):
  cmd.ExecuteNonQuery(); 
}

hallo, vielen Dank nochmal hat jetzt alles super geklappt aber der verständnisshalber wollte ich nochmal nachfragen was folgende Zeile zu bedeuten hat?!?

cmd.Parameters.AddWithValue( "@bestand", bestand ):

mfg

Ist nicht dein ernst,oder?

Die hilfe ist da schon "hilfreich".
Wenn du ausserdem zu 1. gesucht hättest, wären dir die zusammenhänge dazu auch klar.