Autor Beitrag
27sharp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 22.01.14 22:22 
Hallo Community ,

Ich versuche mit nummericUpDown einen Dezimalwert in die Datenbank zu schrieben , doch ich bekomme nur Integerwerte angezeigt.

Meine Tabelle:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  private  SQLiteCommand  creattable()
        {
            SQLiteCommand command = new SQLiteCommand(connection);
            command.CommandText = String.Format("create table if not exists {0} (" +
                "  ID integer not null primary key autoincrement," +
                "  Datum  date  ," +
                "  Stunde decimal (10,2)  )",

                "Times");
             return command;


Mit Werten Füllen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 public SQLiteCommand InsertValue(string date , decimal time)
        {
            SQLiteCommand command = new SQLiteCommand(connection);

            command.CommandText = String.Format("insert into Times (Datum,Stunde) values ('{0}','{1}')", date ,time);
            command.ExecuteNonQuery();

            return command;


Die Gui:

ausblenden C#-Quelltext
1:
 dba.InsertValue(Datepicker.Text, timeChoose.Value);					


Vielen Dank im voraus.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 22.01.14 23:00 
Wo zeigst du den Wert den wie an?

Warum gibst du die Commands aus den Methoden zurück? Hab da Vorstellungsprobleme das man mit dem Command danach noch was sinnvolles anstellen könnte. Bei InsertValue würde ich eher den Return Wert von ExecuteNonQuery() zurückgeben. Aus dem kann man zumindest ableiten ob was in der Datenbank angekommen ist.
27sharp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 22.01.14 23:03 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Wo zeigst du den Wert den wie an?

Warum gibst du die Commands aus den Methoden zurück? Hab da Vorstellungsprobleme das man mit dem Command danach noch was sinnvolles anstellen könnte. Bei InsertValue würde ich eher den Return Wert von ExecuteNonQuery() zurückgeben. Aus dem kann man zumindest ableiten ob was in der Datenbank angekommen ist.


Die Werte werden in einem Datagridview angezeigt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
 private void Datenbank_Load(object sender, EventArgs e)
        {
            database dba = new database();
            dba.con.Open();
            
            dataGridView1.DataSource = dba.Auslesen.Tables["Times"];
        }
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 22.01.14 23:11 
Also weißt du gar nicht ob aus der Datenbank ein Decimal oder was anderes zurückkommt oder ob das Grid einfach nur als Integer formatiert.
Schau dir denn Wert direkt in dba.Auslesen.Tables["Times"] an. Zum Beispiel während dem Debuggen im Debugger. Danach weißt du zumindest besser wo der Fehler zu suchen ist.

Ich kenne SqlLite zu wenig. Gibt es kein Tool mit dem man direkt platt nachsehen kann was da drin ist? Um zu unterscheiden ob das Einfügen in die Datenbank oder das Lesen aus der Datenbank das Problem ist (unter der Annahme das es nicht am Grid liegt)?
27sharp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 23.01.14 00:42 
Hallo ,

also ich habe jetzt die Datenbank mit einem Externen Programm geöffnet und tatsächtlich werden die Werte als decimal gespeichert.
Anscheinend verändert das Datagridview die Zahl.
Doch warum bekomme ich dann beim addieren mit SUM einen Intege Wert zurück bzw. bei 0,5 sogar eine 0 ?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 23.01.14 09:01 
Speicher den aufsummierten Wert doch erstmal in einer lokalen Variablen(natürlich mit einem Typ, der auch Nachkommastellen aufnehmen kann) und schau mit dem Debugger nach, was dort drin steht.

Ist es dort richtig, macht deine weitere Verarbeitung etwas falsch.
Ist es dort falsch, machst du eine falsche Übergabe, die DB macht beim Sum möglicherweise etwas falsch oder deine Feld-Deklaration in der DB ist fehlerhaft.

Auf diese Weise kannst du zumindest den Fehler eingrenzen.

Tipp am Rande:
Wenn etwas nicht läuft wie die es erwartest, die Programmschritte immer weiter verfeinern, um die Fehlerstelle eingrenzen zu können.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 23.01.14 11:34 
Bevor ich hier noch weiter helfe. Heimliches Crossposting ist sche****. Hast du diese Geschichte auch noch irgendwo anders gepostet?

Edit: Und Autozensur ist auch sche****.