verwendetes Datenbanksystem: Access
Ich habe folgendes Problem:
In einer Form befindet sich ein DataGridView. Dort hinein wird mit dem der gesamte Inhalt einer Datenbank geladen
private OleDbConnection conn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = Strafen.mdb;");
private OleDbDataAdapter da = null;
private DataTable dt = null;
private DataView dv = null;
private DataRowView drv = null;
...
da = new OleDbDataAdapter("SELECT Regelnummer, Strafname, K1, K2, K3, K4, K5, K6
" + "FROM Strafen ORDER BY Regelnummer", conn);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
dt = new DataTable("Strafen");
da.Fill(dt);
conn.Close();
BindingSource bs = new BindingSource();
dv = new DataView(dt);
bs.DataSource = dv;
dataGridView.DataSource = bs;
Gespeichert wird über folgende Funktion:
DataTable dt1 = dt.GetChanges(); //Ermittelt die geänderten Datensätze
if (!(dt == null))
{
try
{
conn.Open();
int m = da.Update(dt1); //führt das DB Update aus
string s = "Anzahl der Änderungen: " + m.ToString();
MessageBox.Show(s, "Speichern war erfolgreich!", MessageBoxButtons.OK, MessageBoxIcon.Information);
dt.AcceptChanges();
gespeichert = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Speichern fehlgeschlagen!", MessageBoxButtons.OK, MessageBoxIcon.Information);
dt.RejectChanges();
}
conn.Close();
}
Wenn ich aber jetzt ein Element in der Datenbank bearbeite oder lösche kommt folgende Fehlermeldung: Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.
Wundersamerweise tritt der Fehler beim Hinzufügen einer neuen Zeile in der Datenbank nicht auf.
Bitte um eure Mithilfe, ist verdammt dringend 🙁
Da fehlt eine Leerzeichen
"SELECT Regelnummer, Strafname, K1, K2, K3, K4, K5, K6
" + "FROM Strafen ORDER BY Regelnummer"
wird zu
ergibt SELECT Regelnummer, Strafname, K1, K2, K3, K4, K5, K6FROM Strafen ORDER BY Regelnummer){gray}
Upps, das hier ist absoluter Nonsens.
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Hi,
die Fehlermeldung sagt, dass Deinem Programm nicht klar ist, was die Schlüsselbegriffe sind, die die den jeweiligen Datensatz der gelöscht bzw. geändert werden soll eindeutig identifiziert.
Ich denke, eine Lösung wäre die Eigenschaft UpdateCommand mit dem jeweiligen Statement, das für das Ändern nötig ist, zu setzen. Für das Löschen (DeleteCommand) setzen.
Tschüss
Hi,
der Primary Key sollte mitgeladen werden.
Lg
LastGentleman
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein