Benutzer mit den meisten Antworten
Dataset, Fehlermeldung: Objektinstanz bzw Verweis

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
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 SubDu 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
-
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
- Als Antwort markiert Monarch-Falter Samstag, 13. August 2011 19:28
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 SubDu 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
-
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
- Als Antwort markiert Monarch-Falter Samstag, 13. August 2011 19:28
-
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"
)