DGV-Abfrage Exception bei zweiter Abfrage

  • VB.NET
  • .NET (FX) 4.0

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von vielfrager.

    DGV-Abfrage Exception bei zweiter Abfrage

    Guten Morgen,

    :?: da sage einer, Computer seien logisch :?: :
    Ich habe eine Abfrage, die beim ersten Mal einwandfrei funktioniert

    VB.NET-Quellcode

    1. dt13.Columns.Clear()
    2. dt13.Clear()
    3. Conn13.ConnectionString = db_int
    4. da13 = New MySqlDataAdapter("SELECT id, institut FROM `muster` where deleted=''", Conn13)
    5. da13.Fill(dt13)
    6. dgv.DataSource = dt13
    7. If dgv.RowCount > 0 Then
    8. dgv.Rows(0).Selected = False
    9. end if


    Bei einigen Datensätzen führt der erneute Aufruf der Abfrage jedoch zu einer Exception. "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." Unzulässige Zeichen in den betreffenden Datensätzen konnte ich nicht entdecken. NULL-Felder gibt es in dieser Tabelle nicht.

    Hat jemand einen Tipp für mich??

    Vielen Dank schon mal sagt der

    Vielfrager
    @noyne: negativ
    @erfinderdesrades: Meinst Du diese Meldung? "System.NullReferenceException" wurde aufgefangen.
    HResult=-2147467261
    Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Source=System.Data
    StackTrace:
    bei System.Data.Index.CompareRecords(Int32 record1, Int32 record2)
    bei System.Data.Index.IndexTree.CompareNode(Int32 record1, Int32 record2)
    bei System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 mainTreeNodeID, Int32 position, Boolean append)
    bei System.Data.Index.InsertRecord(Int32 record, Boolean fireEvent)
    bei System.Data.Index.ApplyChangeAction(Int32 record, Int32 action, Int32 changeRecord)
    bei System.Data.Index.RecordStateChanged(Int32 record, DataViewRowState oldState, DataViewRowState newState)
    bei System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
    bei System.Data.DataTable.SetNewRecordWorker(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception& deferredException)
    bei System.Data.DataTable.InsertRow(DataRow row, Int64 proposedID, Int32 pos, Boolean fireEvent)
    bei System.Data.DataTable.LoadDataRow(Object[] values, Boolean fAcceptChanges)
    bei System.Data.ProviderBase.SchemaMapping.LoadDataRow()
    bei System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
    bei System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
    bei System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
    bei System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    bei System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
    bei System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
    bei tb__backoffice.main.add_archive_search_phrase(Boolean show_all) in C:\Thomas\Projekt Tb_watch - Kopie (2)\vb_final_EXTERN\backoffice\060715\tb backoffice\main.vb:Zeile 21722.
    InnerException:

    Wie gesagt, das tritt nicht bei allen Datensätzen auf.
    kann nicht sein, jdfs nicht, wenn der code bei dir so steht, wie hier gepostet.

    aber seis drum - zeile#7 enthält 2 Objekte. Setze mal einen Haltepunkt, und dann wackel mal mittm Mauszeiger drüber, und sieh nach, welches der beiden Objekte Nothing ist.

    Haltepunkt? VisualStudio richtig nutzen (Google ist nicht deine Mami)
    das heißt, keines der beiden Objekte ist Nothing, und daher kann ich nicht glauben, dass der Fehler an der Zeile auftritt, bzw. ich würde es als Bug betrachten.

    Daher kannich nur im trüben fischen: lösche mal zeilen #1, #2, obs dann repariert ist, oder ob dann zumindest eine andere Fehlermeldung kommt.

    ah, noch Frage:

    vielfrager schrieb:

    Wähle ich hier "Data Table Visualizer", werden mir zwei Datensätze angezeigt.
    wie wählt man hier "Data Table Visualizer" - in meinem Local-Fenster hab ich das nicht?

    Und wie kann der 2 Datensätze anzeigen in Anbetracht von zeile#2?


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    Und wie kann der 2 Datensätze anzeigen in Anbetracht von zeile#2?
    Das kommt von dem Select aus Zeile 5

    EDIT:

    vielfrager schrieb:

    nur zwei Zeilen von über eigentlich 2000 Datensätzen angezeigt werden?
    Ich tippe drauf, dass das an dem

    vielfrager schrieb:

    where deleted=''"
    liegt ... Vielleicht ist "deleted" bei den anderen eben nicht '' ...


    Your computer is running... You better go chase it! :P :D
    @'Noyne:
    deleted ist überall '', denn im ersten Abruf funktioniert die Abfrage ja. In der zweiten Abfrage wird, wenn bestimmte Datensätze angeklickt wurden, die Exception ausgelöst.
    "Der Cursor" springt also bis Zeile 7 und dann krachts.

    Aber ich glaube einen neuen Hinweis gefunden zu haben:
    Man kann das DGV durch Klick auf den Spaltenkopf sortieren. Es scheint genau immer dann abzustürzen, wenn zuvor auf diese Weise sortiert wurde.
    Der Wurm steckt also offensichtlich in den DGV-Eigenschaften?
    Oha:

    VB.NET-Quellcode

    1. dt13.Clear()
    2. dt13.Columns.Clear() 'das ist wohl das Problem


    Mit Columns.clear wollte ich die Spaltenköpfe löschen, weil im selben DGV Daten aus verschiedenen Spalten angezeigt werden. Wurde die Tabelle gewechselt, blieben die nun nicht mehr benötigten Spalten in der Ansicht stehen, was nicht sehr elegant ist.
    Kennt jemand eine bessere Lösung, außer dass ich ein zweites DGV genau drüber lege?

    Vielen Dank schon mal sagt der

    Vielfrager
    also da täte ich mal probieren, ob du bevor du an der DataTable rumfummelst, nicht dgv.DataSource=Nothing setzst, in der Hoffnung, dass damit die Sortierung verschwindet, die ja für die anders strukturierte DataTable keine Gültigkeit mehr hat.

    Und generell würde ich empfehlen, diesen untypisierten Ansatz mit dem Sql-Gefummel insgesamt in die Tonne zu treten, und den Umgang mit typisiertem Dataset zu erlernen: Datenverarbeitungs-Vorraussetzungen

    vielfrager schrieb:

    Im konkreten Fall aber: never change running system
    Wie der Erfinder schu sagt, da ist nix ein "running system" bei dir, sonst würde es ja wirklich auch funktionieren. Glaub mir, wenn ich dir sage, dass ich es nicht bereut habe, mich da die Tage einzuarbeiten und meine ganzen "Wurstel"-DB-Zugriffe, auf ein vernünftiges DataSet umzubauen!! Es ist wirklich nicht schwer zu verstehen und auch nicht so aufwendig umzusetzen, du musst nur den Mut haben und mal versuchen, über die Plattformen zu springen und nicht unten durch die Stromschnellen zu schwimmen ...
    Your computer is running... You better go chase it! :P :D