verwendetes Datenbanksystem: <Access>
Hi Leutz,
nach langer Zeit mal wieder eine Frage:
ich hab ne Form auf der datengebundene Textfelder drauf sind. Ich verwende eine Access-Datenbank. Nun möchte ich über eine weitere form den aktuellen, IN FORM1 angezeigten Datensatz, ansprechen und weitere Infos in die Datenbank eintragen. Danach soll geupdatet werden und der aktuelle Datensatz MIT den neuen Infos angezeigt werden.
So viel dazu. Wie ich die Info eintrage weis ich schon, aber wie bekomme ich die Info in den richtigen Datensatz ?
Hier ein Stück Code:
// Verbindung zur DB aufbauen und Termin ins MEMO feld eintragen
//opens database
string conString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\kunden.accdb";
OleDbConnection empConnection = new OleDbConnection(conString);
//Aktuelle ID auslesen
string aktelle_id = _form._id;
//Hier igendwo einfügen ...
string insertStatement = "INSERT INTO Kunden " + "([memo]) " + "SELECT Kunden.ID FROM Kunden" + "VALUES (?)" ;
OleDbCommand insertCommand = new OleDbCommand(insertStatement, empConnection);
insertCommand.Parameters.Add("Memo", OleDbType.VarChar).Value = _form.akt_datum + " um: " + _form.akt_urzeit + " Inhalt: " + this.textBox1.Text;
empConnection.Open();
try
{
int count = insertCommand.ExecuteNonQuery();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
empConnection.Close();
}
this.Close();
Danke im Vorraus
---- >
Keine Signatur 😉
huhu,
Dein SQL-Statement sieht ein wenig seltsam aus. Prinzipiell willst Du ja zu einem bestimmten Kunden eine Notiz anlegen. Ergo musst du zu diesem Kunden - hierbei sollte dir z.B. der Primary-Key des Datensatzes bekannt ein - das Notizfeld updaten. Oder du hast eine zweite Tabelle mit den Notizen, aber dann hat die auch einen FK zum Kunden.
Also:
Update Kunden set [Memo]={Memo} where ID = {kunden.ID}
oder
Insert into KundenNotizen (FK_Kunden, [Memo]) Values ({Memo},{kunden.ID})
{} - durch die entsprechenden Parameter ersetzen.
😃
Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
sorry jetzt erst gelesen 😉
Leider hab ich von SQL <NULL> Ahnung. Aber werd das gleich mal testen.
THX
---- >
Keine Signatur 😉
OK kannst du mir sagen wie ich es richtig machen muss ? Ich versteh das einfach nicht. Hier der Code zum Eintragen des Memo in den Kunden
private void bt_termin_eintragen_Click(object sender, EventArgs e)
{
_form.termin_tree.Nodes[0].Nodes.Add(_form.akt_datum + " um: " + _form.akt_urzeit + " Inhalt: " + this.textBox1.Text);
_form.termin_tree.ExpandAll();
// Verbindung zur DB aufbauen und Termin ins MEMO feld eintragen
//opens database
string conString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\kunden.accdb";
OleDbConnection empConnection = new OleDbConnection(conString);
//aktuelle Primary Key auslesen
string aktelle_id = _form._id;
//Memo Feld selecten und Primary Key anpingen ;)
string insertStatement = "UPDATE kunden SET memo = ? WHERE ID = " + _form._id + "";
OleDbCommand insertCommand = new OleDbCommand(insertStatement, empConnection);
// Hier der String der ins Memo soll
string insert = _form.akt_datum + " um: " + _form.akt_urzeit + " Inhalt: " + this.textBox1.Text;
insertCommand.Parameters.Add("Memo", OleDbType.VarChar).Value = insert;
empConnection.Open();
try
{
int count = insertCommand.ExecuteNonQuery();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.StackTrace, ex.Message);
}
finally
{
empConnection.Close();
}
this.Close();
}
Oder Kann man das irgendwie einfacher gestalten ?
Danke nochmal 😉
---- >
Keine Signatur 😉
Ohne Fehlermeldung vermute ich jetzt mal das es an folgenden zwei Zeilen hapert. Einmal heißt der Parameter "Memo" und im Sql "?".
string insertStatement = "UPDATE kunden SET memo = ? WHERE ID = " + _form._id + ""; insertCommand.Parameters.Add("Memo", OleDbType.VarChar).Value = insert;
Eventuell hilft mal ein Blick in folgenden Thread: [Gelöst] OLEDBException bei INSERT Befehl
huhu,
Der Name des Parameters spielt erstmal keine Rolle, da bei "?" die Reihenfolge der Parameter im Command wichtig ist.
.. und wenn mich nicht alles täuscht, ist memo ein reserviertes Wort in Access ..
und eigentlich warte ich wenigstens noch auf die Fehlermeldung die Du bekommst.
siehe [Hinweis] Wie poste ich richtig? Punkte 1.1.1 und 5
😃
xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Hi,
Hier die Fehlermeldung, womit ich so ziemlich nix anfangen kann 😦
[SYNTAX Fehler in Update anweisung: ] bei
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
bei System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
bei crm.termin_details.bt_termin_eintragen_Click(Object sender, EventArgs e) in E:\## Software\C#\crm\crm\termin_details.cs:Zeile 62.
Ich hab dann mal versucht, die parameter in
UPDATE kunden SET @memo = @memo ...
um zu ändern, aber das half auch nicht denn da kam dann : Das Feld @memo kann nicht aktualisiert werden !
Ich weis nicht weiter
---- >
Keine Signatur 😉
huhu,
guck doch nochmal oben meine beiden SQL-Statements an. Du kannst auch in Access mal die DB aufmachen, da muss es auch einen SQL-Editor geben. Mit dem kannst du rumprobieren. Ausserdem musst du das Feld, welches upgedated werden soll, auch angeben. "@memo" heisst dein Parameter und nicht das Feld in der Tabelle.
Schau Dir mal genau an, was du im code geschrieben hast und was andere vorschlagen. Da fehlen eigentlich immer Kleinigkeiten.
Vielleicht versuchst Du auch erstmal das ganze nur an die DB zu schiessen, ala:
OleDbCommand cmd= new OleDbCommand("Update Kunden set [memo]='Heidewitzka' where ID=1", empConnection);
cmd.ExecuteNonQuery()
Wenn das geht, dann die entsprechenden Parameter einsetzen.
😃
xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.