Autor Beitrag
dlt
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 14.09.10 18:50 
Hallo Forum!

Ich bin ein neuer: Thomas, starte erst mit C# und hab schon ein Problem

will eine Access-Db einbinden ->OK
kann mit dem Bindingnavigator durchzappen->OK

aber leider die geänderten Werte nicht ins Access zurückschreiben und suche schon LANGE nach der Ursache

wird ein kleines Verständnisproblem sein, hier der ges.code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.OleDb;

namespace Test4db
{
    public partial class Form1 : Form
    {
        private OleDbDataAdapter da;
        private BindingSource bs;
        private DataTable dt;

        public Form1()
        {
            InitializeComponent();
            //verbindung herstellen: (vor Datenadapter!)
            string s = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = db1.mdb";
            OleDbConnection con = new OleDbConnection(s);
            con.Open();//musste zielplattform auf x86 stellen da treiber nicht fuer 64bit!!
            // ->erstellen ->zielplattform ->x86 !!!!
            //datenadapter herstellen:
            OleDbDataAdapter da = new OleDbDataAdapter("select * from Tabelle1", con);
            //oledbcommands definieren:
              //update
            OleDbCommand cmd = new OleDbCommand("update Tabelle1 set name = ? where ID = ?", con); // Beispiel für Update und nur für Vorname
            da.UpdateCommand = cmd; // Beispiel für Update
            cmd.Parameters.Add("@name", OleDbType.VarChar, 50"name");
            OleDbParameter p = new OleDbParameter("@ID",OleDbType.UnsignedInt, 4"ID");
            p.SourceVersion = DataRowVersion.Original;
            cmd.Parameters.Add(p);
              //insert:
            OleDbCommand cmdi = new OleDbCommand("insert into Tabelle1 (name) values (?)", con); // Beispiel für Update und nur für Vorname
            da.InsertCommand = cmdi; // Beispiel für insert
            cmd.Parameters.Add("@name", OleDbType.VarChar, 50"name");
            OleDbParameter q = new OleDbParameter("@ID", OleDbType.UnsignedInt, 4"ID");
            p.SourceVersion = DataRowVersion.Original;
            cmdi.Parameters.Add(q);
              //delete:
            OleDbCommand cmdd = new OleDbCommand("delete from Tabelle1 where ID = ?", con); // Beispiel für Update und nur für Vorname
            da.DeleteCommand = cmdd; // Beispiel für insert
            cmd.Parameters.Add("@name", OleDbType.VarChar, 50"name");
            OleDbParameter r = new OleDbParameter("@ID", OleDbType.UnsignedInt, 4"ID");
            r.SourceVersion = DataRowVersion.Original;
            cmdd.Parameters.Add(r);
            //datenadapter fertig erstellt:
            con.Close();
            //datenspeicher erzeugen
            DataTable dt = new DataTable("Tabelle1");
            //access in datenspeicher:
            if (dt != null) da.Fill(dt);
            //bindingsource:
            BindingSource bs = new BindingSource();
            bs.DataSource = dt;
            textBoxname.DataBindings.Add(new Binding("Text", bs, "name",true)); // Beispiel für Vorname
            bindingNavigator1.BindingSource = bs;//navigator einbinden!!
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                bs.EndEdit();///hier kommt exception!! da bs=NULL ????
                da.Update(dt);
                dt.Clear();
                da.Fill(dt);
            }
                catch ( System.Exception ex ) 
            {
                MessageBox.Show("Fehler");
            }         
        }

        private void Form1_Load(object sender, EventArgs e)
        {



        }
        
    }
}


Die ACCESS-Db besteht nur aus "ID" und "name"

bei bs.EndEdit gibts ne Exception ab da bindingssource NULL ist, und was nun? wieso gehts nicht?

kann mir weiterhelfen?

DANKE!!!
Thomas

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 14.09.10 19:05 
:welcome: !

ausblenden C#-Quelltext
1:
BindingSource bs = new BindingSource();					
Damit deklarierst du eine neue lokale Variable im Konstruktor. Lass das erste "BindingSource" weg und schon beschreibst du stattdessen das gleichnamige Klassenfeld :) .

PS: Benutzt du nicht VS2010? Da sollte x86 schon der Standard sein.
PPS: Ich sollte wohl noch hinzufügen, dass es nur einen Grund gibt, Access zu benutzen: Wenn die Datenbank älter als das Projekt ist.

_________________
>λ=

Für diesen Beitrag haben gedankt: dlt
dlt Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 14.09.10 19:19 
DANKE!!

da haett ich ja noch lange suchen koennen!!

lg
Thomas
dlt Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 14.09.10 19:38 
Eine Kleinigkeit stört mich noch:

wenn ich mit dem navigator einen neuen datensatz anlege und gleich mit text fuelle
wird beim anschliessenden "Übernehmen-knopfdruck" nur das anlegen dieses Datensatzes ins ACCESS uebernommen
aber nicht die Werte

sprich ich muss dies jetzt noch in zwei schritten erledigen
1. anlegen
2. fuellen

wie geht das unter einmal?

Danke!