Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MEMO Info an bestimmtem Datensatz hinzufügen
axelfxxx
myCSharp.de - Member

Avatar #avatar-2105.gif


Dabei seit:
Beiträge: 144
Herkunft: Berlin, Deutschland

Themenstarter:

MEMO Info an bestimmtem Datensatz hinzufügen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1184

beantworten | zitieren | melden

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!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
axelfxxx
myCSharp.de - Member

Avatar #avatar-2105.gif


Dabei seit:
Beiträge: 144
Herkunft: Berlin, Deutschland

Themenstarter:

beantworten | zitieren | melden

sorry jetzt erst gelesen ;)

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

THX
---- >
Keine Signatur
private Nachricht | Beiträge des Benutzers
axelfxxx
myCSharp.de - Member

Avatar #avatar-2105.gif


Dabei seit:
Beiträge: 144
Herkunft: Berlin, Deutschland

Themenstarter:

beantworten | zitieren | melden

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 ;)
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von axelfxxx am .
---- >
Keine Signatur
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 429
Herkunft: Bawü

beantworten | zitieren | melden

Ohne Fehlermeldung vermute ich jetzt mal das es an folgenden zwei Zeilen hapert. Einmal heißt der Parameter "Memo" und im Sql "?".
Zitat von axelfxxx



            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
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1184

beantworten | zitieren | melden

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!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
axelfxxx
myCSharp.de - Member

Avatar #avatar-2105.gif


Dabei seit:
Beiträge: 144
Herkunft: Berlin, Deutschland

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1184

beantworten | zitieren | melden

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!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers