Laden...

MEMO Info an bestimmtem Datensatz hinzufügen

Erstellt von axelfxxx vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.554 Views
axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 13 Jahren
MEMO Info an bestimmtem Datensatz hinzufügen

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 😉

X
1.177 Beiträge seit 2006
vor 13 Jahren

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.

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 13 Jahren

sorry jetzt erst gelesen 😉

Leider hab ich von SQL <NULL> Ahnung. Aber werd das gleich mal testen.

THX

---- >
Keine Signatur 😉

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 13 Jahren

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 😉

L
416 Beiträge seit 2008
vor 13 Jahren

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

X
1.177 Beiträge seit 2006
vor 13 Jahren

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.

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 13 Jahren

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 😉

X
1.177 Beiträge seit 2006
vor 13 Jahren

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.