Announcement

Collapse
No announcement yet.

Fehler bei DB-Update

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

  • Fehler bei DB-Update

    Hi ich bin's wieder,

    Ich habe gerade ein Problem, das sich die DB nicht aktualisiern lässt,
    obwohl der Code soweit korrekt sein müsste.

    Hier mal der Code:
    Code:
    Imports System.Data.OleDb
    Public Class DB_Komplett_Prog
        Dim oMyCon As New OleDbConnection
        Dim oMyCom As New OleDbCommand
        Dim oMyAdap As New OleDbDataAdapter
        Dim oMyDS As New DataSet
        Dim oMyBing As New BindingSource
     
        Private Sub DB_Komplett_Prog_Load(ByVal sender As System.Object, ByVal e As _
          System.EventArgs) Handles MyBase.Load
            Dim sSQL As String = "SELECT * FROM Lieferanten;"
            AddHandler oMyBing.PositionChanged, AddressOf oMyBing_PositionChanged
     
            oMyCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data" & _
              "Source=" & Glob_DB_Pfad
            oMyCom.Connection = oMyCon
            oMyCom.CommandText = sSQL
            oMyAdap.SelectCommand = oMyCom
            oMyCon.Open()
            oMyAdap.Fill(oMyDS, "Lieferanten")
            oMyAdap.FillSchema(oMyDS, SchemaType.Source, "Lieferanten")
            oMyCon.Close()
            oMyBing.DataSource = oMyDS.Tables("Lieferanten")
     
            Me.txtLieferantennummer.DataBindings.Add("Text", oMyBing, _
              "Lieferanten-Nr", False, DataSourceUpdateMode.OnValidation)
            Me.txtFirma.DataBindings.Add("Text", oMyBing, "Firma", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtKontaktperson.DataBindings.Add("Text", oMyBing, "Kontaktperson", _
            False, DataSourceUpdateMode.OnValidation)
            Me.txtPosition.DataBindings.Add("Text", oMyBing, "Position", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtStraße.DataBindings.Add("Text", oMyBing, "Straße", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtOrt.DataBindings.Add("Text", oMyBing, "Ort", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtRegion.DataBindings.Add("Text", oMyBing, "Region", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtPLZ.DataBindings.Add("Text", oMyBing, "PLZ", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtLand.DataBindings.Add("Text", oMyBing, "Land", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtTelefon.DataBindings.Add("Text", oMyBing, "Telefon", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtTelefax.DataBindings.Add("Text", oMyBing, "Telefax", False, _
            DataSourceUpdateMode.OnValidation)
            Me.txtHomepage.DataBindings.Add("Text", oMyBing, "Homepage", False, _
            DataSourceUpdateMode.OnValidation)
     
        End Sub
     
     
        Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As _
          System.EventArgs) Handles cmdSave.Click
            Dim oMyBuid As New OleDbCommandBuilder(oMyAdap)
            oMyAdap.Update(oMyDS, "Lieferanten")
        End Sub
    End Class
    Bei Click auf den Savebutton bekomme ich immer folgenden Fehler:
    "Für mindestens einen der erforderlichen Parameter wurde kein Wert angegeben."

    Hat jemand ne ahnung woran das liegen kann,
    Ich habe seit gestern keine Lösung gefunden.

  • #2
    Hallo,

    zunächst vermisse ich, dass Du die vom DbCommandBuilder erzeugten Befehle nicht an den DbDataAdapter übergibst:
    Code:
    oMyAdap.UpdateCommand = oMyBuid.GetUpdateCommand()
    Das dürfte aber nicht das Problem sein, weil dies beim Erzeugen des DbCommandBuilder über den DbDataAdapter automatisch erledigt werden sollte.

    Das nächste mögliche Problem ist ein erforderlicher PrimaryKey. (Den gibt es doch hoffentlich in der Tabelle, oder?) Durch "Select *" wird er auf jeden Fall berücksichtigt.

    Bleiben die einzelnen Felder. Durch "Select *" werden alle Felder übernommen. Werden aber auch alle Felder durch DataBindings berücksichtigt? Wenn eines dieser Felder fehlt, steht es zwar in der Parameter-Liste des UpdateCommand, bekommt aber keinen Wert zugeordnet. Das dürfte das Problem sein.

    Mögliche Lösungen sind:
    * nicht mit "Select * " zu arbeiten, sondern immer die benötigten Felder einzeln aufzuführen
    * oder wirklich alle Spalten mit Eingabefeldern zu verbinden
    * oder "zusätzliche" Felder gezielt mit Werten zu versehen

    Jürgen

    Comment


    • #3
      Danke für die schnelle Antwort.

      Code:
      oMyAdap.UpdateCommand = oMyBuid.GetUpdateCommand()
      bringt wie schon vermutet nichts.

      PrimaryKey ist die Spalte [Lieferanten-Nr].
      Es werden alle Spalten der Tabelle an Textfelder gebunden.
      Bei einer abänderung der SQL-Anweisung bekomme ich bei der füllung des DataSets folgende Fehlermeldung:

      Fehler E_FAIL(0x80004005) in IErrorInfo.GetDescription.

      Die SQL-Abfrage und die angegebenen Tabellen sind korrekt.


      EDIT:
      Fehler gefunden
      Der Name der Spalte Lieferanten-ID ist schuld.
      Ich hab den in LieferantenID umbenannt und schon ging alles.
      Was ich schon etwas komisch finde, da es sich um eine Test-DB von MS handelt
      Zuletzt editiert von morpheus-dev; 29.06.2008, 12:17.

      Comment

      Working...
      X