Der.Andi
-
Gesamte Inhalte
28 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von Der.Andi
-
-
Hey,
ArtikelgruppenAufrufen();
DataTable tabelle = datencontainer.Tables["tabelle"];
DataRow zeile = tabelle.NewRow();
zeile["Artikelgruppe"] = textBox5.Text;
zeile["Beschreibung"] = textBox1.Text;
tabelle.Rows.Add(zeile);
abfrage.CommandText = "Insert into Artikelgruppe(Artikelgruppe, Beschreibung) Values (@Artikelgruppe, @Beschreibung)";
parameter = abfrage.Parameters.Add("@Artikelgruppe", OleDbType.LongVarChar);
parameter.SourceColumn = "Artikelgruppe";
parameter = abfrage.Parameters.Add("@Beschreibung", OleDbType.LongVarChar);
parameter.SourceColumn = "Beschreibung";
adapter.InsertCommand = abfrage;
verbindung.Open();
adapter.Update(datencontainer, "tabelle");
verbindung.Close();
Aber das mache ich hier doch auch und da kommt kein Fehler. Hier speichert er alles vernünftig ab.
-
Erstmal ein herzliches Hallo an alle!
Da ich ab August mit meiner Ausbildung als Fachinformatiker Anwendungsentwicklung anfange, dachte ich mir melde ich mich hier schonmal an. Denn es gibt bestimmt öfters mal Situationen wo man hier nachlesen/nachfragen kann.
Jetzt aber mal zum Topic:
Da ich wie schon gesagt bald mit meiner Ausbildung anfange wollte ich mich etwas mit Datenbanken beschäftigen, da dies ein Thema war, was bei meinem Fachabitur (Elektrotechnik - Schwerpunkt Informationstechnik) nur kurz mal angeschnitten wurde. Um es genau zu sagen haben wir eigentlich nur Modelle entworfen (ERM) und etwas mit SQL ausprobiert.
Ich wollte, bzw. mache gerade, nun ein Programm, welches mit einer Acess Datenbank kommuniziert, um verschiedene Daten abzufragen.
Im folgenden Stelle ich es einfach mal eben vor und mein Problem kommt dann danach.
Vorstellung:
Also das Programm soll eine kleine Lagerverwaltung sein. Man kann die Artikelliste aufrufen (nacher auch drin suchen) und auch neue Artikel hinzufügen.
Um diese Sachen abzuspeichern dient die Access-Datenbank, in der es eine Tabelle mit dem Namen Artikel und eine Tabelle mit dem Namen Artikelgruppe gibt. Diese stehen in einer 1:n Beziehung zueinander.
Also meine bisherige Errungenschaft ist, dass ich die Tabelle Artikelgruppe in einem DataGridView ziegen kann. Außerdem kann ich auch neue hinzufügen, welche sich in der Access-Datenbank auch abspeichern.
OleDbConnection verbindung = new OleDbConnection();OleDbCommand abfrage = new OleDbCommand();
BindingSource bindingSource = new BindingSource();
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbParameter parameter = new OleDbParameter();
DataSet datencontainer = new DataSet();
Methode die die Artikelgruppen-Tabelle ins Datagrid stellt:
private void ArtikelgruppenAufrufen()
{
datencontainer.Clear();
// Festlegen des Kommandos
abfrage.CommandText = "Select * from Artikelgruppe";
// Zuweisen des Kommandos an das DataAdapter-Objekt
adapter.SelectCommand = abfrage;
verbindung.Open();
adapter.Fill(datencontainer, "tabelle");
verbindung.Close();
// BindingSource-Objektes mit der Datenquelle verbinden
bindingSource.DataSource = datencontainer;
bindingSource.DataMember = "tabelle";
// Eigentliche Datenanbindung an das DataGridView
dataGridView1.DataSource = bindingSource;
}
Neue Artikelgruppe hinzufügen:
ArtikelgruppenAufrufen();
DataTable tabelle = datencontainer.Tables["tabelle"];
DataRow zeile = tabelle.NewRow();
zeile["Artikelgruppe"] = textBox5.Text;
zeile["Beschreibung"] = textBox1.Text;
tabelle.Rows.Add(zeile);
abfrage.CommandText = "Insert into Artikelgruppe(Artikelgruppe, Beschreibung) Values (@Artikelgruppe, @Beschreibung)";
parameter = abfrage.Parameters.Add("@Artikelgruppe", OleDbType.LongVarChar);
parameter.SourceColumn = "Artikelgruppe";
parameter = abfrage.Parameters.Add("@Beschreibung", OleDbType.LongVarChar);
parameter.SourceColumn = "Beschreibung";
adapter.InsertCommand = abfrage;
verbindung.Open();
adapter.Update(datencontainer, "tabelle");
verbindung.Close();
Das funktioniert wie gesagt alles Einwandfrei. Doch bei der Tabelle Artikel stoße ich auf ein Problem. Das Aufrufen an sich klappt. Also man sieht, was alles in der Tabelle drin steht. Doch das hinzufügen von neuen Artikel klappt nicht.
Methode, die die Tabelle Artikel im Datagrid darstellt:
private void ArtikelAufrufen()
{
datencontainer.Clear();
// Festlegen des Kommandos
abfrage.CommandText = "Select * from Artikel";
// Zuweisen des Kommandos an das DataAdapter-Objekt
adapter.SelectCommand = abfrage;
verbindung.Open();
adapter.Fill(datencontainer, "tabelle1");
verbindung.Close();
// BindingSource-Objektes mit der Datenquelle verbinden
bindingSource.DataSource = datencontainer;
bindingSource.DataMember = "tabelle1";
// Eigentliche Datenanbindung an das DataGridView
dataGridView1.DataSource = bindingSource;
}
Der Problemfall... Eigentlich sollte ich hiermit einen neuen Artikel hinzufügen:
ArtikelAufrufen();
DataTable tabelle = datencontainer.Tables["tabelle1"];
DataRow zeile = tabelle.NewRow();
zeile["Artikelgruppe"] = comboBox1.Text;
zeile["ArtikelNr"] = 0;
zeile["Einkaufspreis"] = textBox3.Text;
zeile["Artikelbezeichnung"] = textBox2.Text;
zeile["Mengeneinheit"] = textBox4.Text;
tabelle.Rows.Add(zeile);
abfrage.CommandText = "Insert into Artikel(Artikelgruppe, ArtikelNr, Artikelbezeichnung, Einkaufspreis, Mengeneinheit) Values (@Artikelgruppe, @ArtikelNr, @Artikelbezeichnung, @Einkaufspreis, @Mengeneinheit)";
parameter = abfrage.Parameters.Add("@Artikelgruppe", OleDbType.LongVarChar);
parameter.SourceColumn = "Artikelgruppe";
parameter = abfrage.Parameters.Add("@ArtikelNr", OleDbType.Integer);
parameter.SourceColumn = "ArtikelNr";
parameter = abfrage.Parameters.Add("@Einkaufspreis", OleDbType.LongVarChar);
parameter.SourceColumn = "Einkaufspreis";
parameter = abfrage.Parameters.Add("@Artikelbezeichnung", OleDbType.LongVarChar);
parameter.SourceColumn = "Artikelbezeichnung";
parameter = abfrage.Parameters.Add("@Mengeneinheit", OleDbType.LongVarChar);
parameter.SourceColumn = "Mengeneinheit";
adapter.InsertCommand = abfrage;
verbindung.Open();
adapter.Update(datencontainer, "tabelle1");
verbindung.Close();
Der Fehler der immer kommt, wenn ich einen Artikel hinzufügen will ist:
Parameter @Artikelbezeichnung hat keinen Standartwert
Ich denke mal, dass hat irgendwas damit zu tun, dass ja die ArtikelNr ein
AutoWert hat. Deswegen habe ich Sie auch nicht als Parameter o.ä. angegben. Denn eigentlich sollte doch die Datenbank dem Programm sagen, dass dort die fortlaufende Zahl hinkommt. Wahrscheinlich liege ich da aber falsch. Ich hoffe mal mir kann irgendwer helfen, damit ich das Programm bis zum Ausbildungsbeginn noch hinbekomme
Ach was noch zu sagen ist... Da ja die Artikelgruppe in Beziehung steht muss man ja erst eine Artikelgruppe der Datenbank hinzufügen, damit man einen Artikel hinzufügen kann. Danach wählt der Benutzer in der ComboBox die Artikelgruppe aus. Also da kann eigentlich kein Fehler sein.
Hier eben noch der Code dafür:
private void CBAktualisieren(){
abfrage.CommandText = "Select Artikelgruppe from Artikelgruppe";
verbindung.Open();
OleDbDataReader datenleser = abfrage.ExecuteReader();
comboBox1.Items.Clear();
while (datenleser.Read())
{
comboBox1.Items.Add(datenleser["Artikelgruppe"]);
}
datenleser.Close();
verbindung.Close();
}
Mit freundlichen Grüßen,
Andi
[C#] Probleme bei Hinzufügen eines Datenbankeintrags
in .NET
Geschrieben
Oh... darauf wollte ich eigentlich achten.
Ich danke dir... so ein blöder Fehler.