Laden...

Accessdatenbank Double auslesen

Erstellt von DaSuckOOr vor 17 Jahren Letzter Beitrag vor 16 Jahren 6.301 Views
D
DaSuckOOr Themenstarter:in
17 Beiträge seit 2007
vor 17 Jahren
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

F
10.010 Beiträge seit 2004
vor 17 Jahren

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.

D
DaSuckOOr Themenstarter:in
17 Beiträge seit 2007
vor 17 Jahren

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);
B
1.529 Beiträge seit 2006
vor 17 Jahren

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.

F
10.010 Beiträge seit 2004
vor 17 Jahren

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(); 
}

D
DaSuckOOr Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

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

F
10.010 Beiträge seit 2004
vor 16 Jahren

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.