Announcement

Collapse
No announcement yet.

Datensatz hinzufügen, wenn Tabellen in Beziehung stehen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatz hinzufügen, wenn Tabellen in Beziehung stehen

    Hallo erstmal,
    es tut mir leid, falls es dieses thema schon gibt, aber ich konnte leider nichts hilfreiches für mich finden.

    vorweg: es gibt 2 tabellen (Firma, Aktivitäten); es besteht eine 1:n Beziehung (KdNr, KdNr);

    also folgendes:

    ich hab eine form, in der 2 datagridviews sind (dbgDaten und dbgAktiv).
    im dbgDaten werden alle Kundeninformationen angezeigt, und im dbgAktiv sollen die jeweiligen Aktivitäten der Kunden stehen.
    Ich hab einen button, der mir ein unterformular öffnet, in das dann die daten der Aktivitäten geschrieben werden. Drücke ich dann auf den ok button, sollten die Aktivitäten eigentlich gespeichert werden.
    doch es wird immer wieder diese meldung angezeigt:

    "Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle 'Firma' mit diesem Datensatz in Beziehung stehen muss."

    ich verstehe diese meldung leider nicht.
    Ich schreibe doch immer nur eine KdNr in die Textbox, die es schon gibt.
    d.h der kunde ist vorhanden, aber ich kann keine aktivitäten für ihn speichern.

    ich hoffe, ich konnte mein problem irgendwie verständlich erläutern und wäre sehr dankbar für eure hilfe.

    mein code zum speichern des datensatzes:

    Code:
    Dim cBuffer As String
            oConn.ConnectionString = cConn
            cBuffer = "INSERT INTO Aktivitäten (KdNr, Datum, Uhrzeit, KonAufPerson, KonArt, KonPerson, Wiedervorlage, Notiz) VALUES (?,?,?,?,?,?,?,?)"
            Dim cmd As New OleDb.OleDbCommand(cBuffer, oConn)
    
            'Parameter anlegen
            cmd.Parameters.Add("@Datum", OleDb.OleDbType.Date).Value = txtDatum.Text
            cmd.Parameters.Add("@Uhrzeit", OleDb.OleDbType.Char).Value = txtZeit.Text
            cmd.Parameters.Add("@KonAufPerson", OleDb.OleDbType.Char).Value = txtKonAufPers.Text
            cmd.Parameters.Add("@KonArt", OleDb.OleDbType.Char).Value = comKonArt.Text
            cmd.Parameters.Add("@KonPerson", OleDb.OleDbType.Char).Value = txtKonPers.Text
            cmd.Parameters.Add("@Wiedervorlage", OleDb.OleDbType.Char).Value = dtp1.Text
            cmd.Parameters.Add("@Notiz", OleDb.OleDbType.Char).Value = txtNotiz.Text
            cmd.Parameters.Add("KdNr", OleDb.OleDbType.Integer).Value = CType(txtKdNr.Text, Integer)
    
    
            'Command ausführen
            If oConn.State <> ConnectionState.Open Then oConn.Open()
    
            cmd.ExecuteNonQuery()
    
            Me.Close()

  • #2
    Hallo,

    die Reihenfolge bei der Parameterübergabe stimmt nicht. Bei der INSERT-Anweisung steht das Feld KdNr an 1. Stelle, aber bei der Parameterübergabe wird die Kundennummer an letzter Stelle übergeben.

    Nur dann, wenn die Datenbank benannte Parameter unterstützt, darf die Reihenfolge beliebig sein. Da die Anwendung jedoch die Parameterliste über (?,?,?,?,?,?,?,?) definiert, muss die Reihenfolge exakt stimmen.

    P.S: Derartige Probleme lassen sich vermeiden, wenn der produktive und komfortable Weg der visuellen Konfiguration innerhalb von Visual Studio verwendet wird. In diesem Fall füllt Visual Studio die Parameters-Sammlung automatisch, so dass die Namen, der Datentyp, die Länge sowie die Position garantiert stimmen.

    Comment

    Working...
    X