Laden...

Ständig ändernde Daten wo Speichern?

Erstellt von GeneralKampfKeks vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.256 Views
G
GeneralKampfKeks Themenstarter:in
39 Beiträge seit 2013
vor 11 Jahren
Ständig ändernde Daten wo Speichern?

verwendetes Datenbanksystem: <Sql Server Ce>

Hallo,
ich hab mal wieder ein Problem. Meine Tabelle sieht so aus:
id Datum Betrag Kontostand
1 19.5.2012 100 100
2 20.5.2012 400 500
3 21.5.2012 50 550

Also der der Kontostand wird immer so berechnet: Betrag + Kontostand des vorherigen Eintrags.
Es sollte aber immer der Kontostand des Eintrags mit dem nächstgeringeren Datums addiert werden.

So sieht es jetzt aus:

id Datum Betrag Kontostand
1 19.5.2012 100 100
2 21.5.2012 400 500
3 20.5.2012 50 550

So sollte es aussehen:

id Datum Betrag Kontostand
1 19.5.2012 100 100
2 21.5.2012 400 550
3 20.5.2012 50 150

Wie löst man das Am besten?

Ich hätte diesen Lösungsvorschlag:


            DataView view = new DataView(dataset.Tables["Kontostand"]);
            view.Sort = "datum";

                        for (int i = 0; i < view.ToTable().Rows.Count; i++)
            {
                if (i <= 0)
                {
                    view.ToTable().Rows[i]["kontostand"] = view.ToTable().Rows[i]["betrag"].ToString();
                }
                else
                {
                    view.ToTable().Rows[i]["kontostand"] = Convert.ToDecimal(view.ToTable().Rows[i - 1]["kontostand"].ToString()) + Convert.ToDecimal(view.ToTable().Rows[i]["betrag"].ToString());
                }
            }
            
            dataset.Tables["Kontostand"] = view.ToTable(); //Hier liegt das Problem. Eigenschaft ist schreibgeschützt.

Gibt es noch bessere Wege dieses Problem zu lösen?

Gruss Niklas

Achtung: Ich bin Anfänger! Es besteht die Möglichkeit auf falsche Antworten!

A programmer is just a tool which converts caffeine into code.

C
2.121 Beiträge seit 2010
vor 11 Jahren

Wie soll dein Lösungsvorschlag mit dem Problem zusammenhängen?
Du sortierst da die Tabelle. Deswegen ist die aber noch nicht auch in dieser Reihenfolge abgespeichert.

mit dem nächstgeringeren Datums

nächsthöherem...

Und wie hängt das ganze mit dem Thema dieses Beitrags zusammen?

Ich könnte mir nach mehrmaligem lesen vorstellen, du hast die Beträge und möchtest anschließend zu jeder Zeile den Betrag ausrechnen?
Dazu würde ich mir die Rows alle sortieren so wie du das schon machst. Dann durchläufst du sie und rechnest jeweils den Kontostand aus, trägst ihn ein und lässt am Ende wieder die Tabelle abspeichern.

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo GeneralKampfKeks

Ehrlich gesagt würde ich den Kontostand nicht ausgerechnet abspeichern, ausser du hast Millionen von Datensätzen.

Vorgeschlagene Möglichkeiten:

1.
Tabelle Einnahmen, Tabelle Ausgaben.

2.
Boolean Flag ob Einnahme oder Ausgabe....

3.
Ausgaben mit einem (-) versehen.

Du hättest dann den Vorteil, den Betrag dynamisch auszurechnen :
Du kannst dann sowas machen wie Sum(Einnahmen)-Sum(Ausgaben).

Beste Grüsse

Diräkt

G
GeneralKampfKeks Themenstarter:in
39 Beiträge seit 2013
vor 11 Jahren

Ich könnte mir nach mehrmaligem lesen vorstellen, du hast die Beträge und möchtest anschließend zu jeder Zeile den Betrag ausrechnen?
Dazu würde ich mir die Rows alle sortieren so wie du das schon machst. Dann durchläufst du sie und rechnest jeweils den Kontostand aus, trägst ihn ein und lässt am Ende wieder die Tabelle abspeichern.

Ja so habe ich es bis jetzt gemacht, nur ich weis nicht wich ich die neue Tabelle in die alte schreibe wie im beispiel oben.

dataset.Tables["Kontostand"] = view.ToTable(); //Hier liegt das Problem. Eigenschaft ist schreibgeschützt.

Achtung: Ich bin Anfänger! Es besteht die Möglichkeit auf falsche Antworten!

A programmer is just a tool which converts caffeine into code.

C
2.121 Beiträge seit 2010
vor 11 Jahren

Das hier
view.ToTable().Rows_["kontostand"] = view.ToTable().Rows_["betrag"].ToString();
schreibt doch schon die Daten in deine Table. Die müsstest du dann nur wieder in die DB schreiben.

Ganz dringender Tip. Lass diese ständigen To... Aufrufe weg.
Eine View hat auch Rows.
...["kontostand"] = ....ToString(); ein Kontostand ist ganz sicher kein String.

Convert.ToDecimal(view.ToTable().Rows[i - 1]["kontostand"].ToString())

Die Row lässt sich sicher in decimal oder double oder so casten. Aber dochnicht in String umwandeln und den dann wieder in was anderes zurückwandeln.
Wenn Cast nicht geht, ist was falsch geplant.
Ich weiß das wird sicher wieder auf offtopic gesetzt, aber ich kann sowas einfach nicht sehen 😃