none
Dataset, Fehlermeldung: Objektinstanz bzw Verweis RRS feed

  • Frage

  • Hey Experten,

    ich seh wahrscheinlich den Wald vor lauter Bäumen nicht. Ich versuche eine Programmstart(F5) was mit folgenden Fehler quittiert wird.

    "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt" ... Erstellen sie eine Objektinstanz mit dem Wort new ...

    (siehe Code unten: DBOLeAdapter.update(xdataset)

    Ich habe eine Instanz erstellt, oder etwa nicht ?!?!

    Public Class Form1
      Dim DBOleDbCon As New OleDbConnection
      Dim WithEvents bindingSource1 As New BindingSource()
      Dim table1 As New DataTable()
      Dim DBOleAdapter As OleDbDataAdapter
      Dim xDataset As DataSet
      Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        DBOleDbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\Entwicklung\Monarch_HTML_Translater\Monarch_HTML_Translater\bin\Debug\WWBCompilerMonarch.mdb"
        DBOleDbCon.Open()
    
        Dim DBOleAdapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT Id, IdObjektSeite, Orginal FROM Translate_Objekte_Detail_DoIt", DBOleDbCon)
        ' *** Primärschlüssel-Informationen beim Fill mit übernehmen
        DBOleAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
        Dim DBOleBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(DBOleAdapter)
        DBOleBuilder.QuotePrefix = "["
        DBOleBuilder.QuoteSuffix = "]"
    
        Dim xdataset As New DataSet
        xDataset.Tables.Add("Translate_Objekte_Detail_DoIt")
        DBOleAdapter.Fill(xDataset.Tables("Translate_Objekte_Detail_DoIt"))
        bindingSource1.DataSource = xDataset.Tables("Translate_Objekte_Detail_DoIt")
    
    
        BindingNavigator1.BindingSource = bindingSource1
        TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", bindingSource1, "Orginal", True))
        Debug.Print(DBOleBuilder.GetUpdateCommand.CommandText)
    
      End Sub
    
      Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
        DBOleAdapter.Update(xDataset)
      End Sub
    End Class
    
    

     

    Samstag, 13. August 2011 17:12

Antworten

  • Hi,
    Ich habe eine Instanz erstellt, oder etwa nicht ?!?!
    Public Class Form1
    
    ...
    Dim DBOleAdapter As OleDbDataAdapter
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ...

    Dim DBOleAdapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT Id, IdObjektSeite, Orginal FROM Translate_Objekte_Detail_DoIt", DBOleDbCon)
    ... End Sub

    Du hast zwar eine Instanz erstellt, aber nur mit einer lokalen Variablen innerhalb der Methode Form1_Load.

    Schreib in der Methode nur:

      DBOleAdapter = New OleDbDataAdapter( ... )

    ---

    Nachtrag: eben gesagtes gilt auch für "xDataset", das wird auch außer- und innerhalb der Methode deklariert. Innerhalb sollte aber nur die Instanz erzeugt werden.

    ---

    Edit: Wegen Zusammenführung der Postings und meiner grottigen Rechtschreibung^^

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort vorgeschlagen Elmar Boye Samstag, 13. August 2011 18:41
    • Als Antwort markiert Elmar Boye Samstag, 13. August 2011 21:52
    Samstag, 13. August 2011 18:13
    Moderator
  • Hallo,

    ergänzend zu Stefans Antwort:

    ich empfehle Dir den Datenzugriff zu trennen, wie ich es bereits gezeigt hatte, siehe Datenzugriffsschicht.

    Damit bist Du unabhängiger vom Formular, das dadurch leichtgewichtiger wird
    kannst die Quelle auch mal wiederverwenden oder den Provider wechseln (
    wenn die Jet / Access vom Erdboden verschluckt wird.

    Im übrigen: Nummerierst Du Deine Kinder auch nur durch? ;-)

    Gruß Elmar

    Samstag, 13. August 2011 18:41

Alle Antworten

  • Hi,
    Ich habe eine Instanz erstellt, oder etwa nicht ?!?!
    Public Class Form1
    
    ...
    Dim DBOleAdapter As OleDbDataAdapter
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ...

    Dim DBOleAdapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT Id, IdObjektSeite, Orginal FROM Translate_Objekte_Detail_DoIt", DBOleDbCon)
    ... End Sub

    Du hast zwar eine Instanz erstellt, aber nur mit einer lokalen Variablen innerhalb der Methode Form1_Load.

    Schreib in der Methode nur:

      DBOleAdapter = New OleDbDataAdapter( ... )

    ---

    Nachtrag: eben gesagtes gilt auch für "xDataset", das wird auch außer- und innerhalb der Methode deklariert. Innerhalb sollte aber nur die Instanz erzeugt werden.

    ---

    Edit: Wegen Zusammenführung der Postings und meiner grottigen Rechtschreibung^^

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort vorgeschlagen Elmar Boye Samstag, 13. August 2011 18:41
    • Als Antwort markiert Elmar Boye Samstag, 13. August 2011 21:52
    Samstag, 13. August 2011 18:13
    Moderator
  • Hallo,

    ergänzend zu Stefans Antwort:

    ich empfehle Dir den Datenzugriff zu trennen, wie ich es bereits gezeigt hatte, siehe Datenzugriffsschicht.

    Damit bist Du unabhängiger vom Formular, das dadurch leichtgewichtiger wird
    kannst die Quelle auch mal wiederverwenden oder den Provider wechseln (
    wenn die Jet / Access vom Erdboden verschluckt wird.

    Im übrigen: Nummerierst Du Deine Kinder auch nur durch? ;-)

    Gruß Elmar

    Samstag, 13. August 2011 18:41
  • Erstmal danke,

    die Code sind so gemacht um sie zu posten, natürlich trenne ich die Code vom Formular.

    Kinder durchnummeriern, wäre auch nicht schlecht gewesen (Maximilian Michael, Philipp Holger, Börn Gabriel, Adrian Alexander oder Sohn1, Sohn2...)

    habe es gemacht jetzt kommt eine Fehlermeldung mit "Update: TableMapping['Table'] oder DataTable 'Table' kann nicht gefunden werden." obwohl ich mich doch an den Aufbau von http://msdn.microsoft.com/de-de/library/at8a576f.aspx gehalten habe

    Sorry, alles zurückgenommen ... die Fehlermeldung beruht darauf, das noch der Tabellename gebraucht wird.

    DBOleAdapter.Update(xDataset,"Translate_Objekte_Detail_DoIt"

    )

     


    Samstag, 13. August 2011 19:03