Data Grid View: Update Table geht, Update Query geht nicht?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von dubi.

    Data Grid View: Update Table geht, Update Query geht nicht?

    Hallo,
    Ich habe Access als Datenquelle definiert. Wenn ich ein DataGridView (DGV) aus einer Tabelle erstelle (also die Tabelle in das Formular ziehe) und teste, kann ich die Werte in der Tabelle verändern und anschließend mit dem gleichzeitig erstellten BindingNavigator-SaveItem abspeichern.
    Wenn ich jedoch statt der Tabelle eine Query verwende kann ich zwar ändern, das Save-Item bleibt jedoch grau und abgespeichert wird auch nichts. Die Query ersetzt in einem Feld Zahlen durch referenzierte Texteinträge.
    Wenn ich diese Query in Access öffne, kann ich die Daten darin ändern. Warum funktioniert das nicht in VB.Net?

    Danke schon mal für jeden Hinweis ;(
    dubi

    Ps.: und ja: ich bin VB.NET Anfänger, habe einige Jahre VBA Erfahrung, taste mich aber in VB.Net gerade etwas vor...
    Hallo und Willkommen!

    Aller Anfang ist schwer - auch das Posten hier auf VBP, und das Formulieren differenzierter Fragen, die dann auch eine zielgerichtete Antwort finden können. Üblicherweise ergibt sich ein Wechselspiel von Frage-Gegenfrage, bis sich das Problem erstmal herauskristallisiert.

    Ich fang gleich mal an:

    dubi schrieb:

    Warum funktioniert das nicht in VB.Net?
    Was passiert denn stattdessen?
    Fehlermeldung (genauer Wortlaut)?, betroffene Codezeilen?

    Code bitte einstellen unter Verwendung des VB.Net-CodeTags des Forums. Dann sieht der Code ungefähr so aus, wie im VisualStudio.
    Auch Screenshots sind gern gesehen, wenn sinnvoll.
    Hinweise zu den Darstellungs-Möglichkeiten von VBP:
    Danke für Deine schnelle Antwort, ErfinderDesRades...
    Naja, es passiert eben "nichts". Ich habe noch keinen Code geschrieben, sondern einfach: Datenquelle definiert und in das "frische" Formular gezogen.

    Wenn ich ein DGV aus der Tabelle (durch ziehen in das Formular) erstelle, kann ich die Daten im DGV editieren und anschließend im (nicht grauen) save-Item speichern.
    Wenn ich statt der Tabelle eine Query in das (auch wieder frisch erstellte, da neues Projekt) Formular ziehe, kann ich die Daten der Query zwar verändern aber das Save-Item ist schon beim Start "ausgegraut" und ein Speichern ist nicht möglich.
    Und wie wie schon erwähnt: wenn ich die Query in Access in der Datenansicht öffne, kann ich prima ändern und die Änderungen werden auch gespeichert...
    Tja, eine vb.net-Anwendung ist nicht das Access-Frontend.

    Und jetzt bräuchte ich tatsächlich Screenshot, weil ich nicht weiss, was genau du ziehst beim "Query ins Form ziehen".
    Ich selbst kenne nur das Datenquell-Fenster, und da ziehe ich DataTables auf Form - "Queries" sind mir da nie untergekommen.

    Nützlich wäre auch, die Felder zu sehen, die die Query abruft. ZB wenn kein Primärschlüsselfeld dabei ist, kann ein Datensatz nicht rückgespeichert werden (ausser vlt beim Access-Frontend).

    petaod schrieb:

    Ist die Query ein Join über mehrere Tabellen?



    Nein - ich lasse nur 2 Zahlen in 2 Strings übersetzen:

    SQL-Abfrage

    1. SELECT tbl_ID.ID, tbl_ID.IID_Prefix, tbl_ID.IID_ID, tbl_ID.Menge, tbl_ID.Verpackung, tbl_ID.ID_CreationDT, tbl_ID.ID_PrintDT, tbl_ID.ID_PrintIDDT, tbl_ID.ID_GlueDT, tbl_ID.ID_FillDT, tbl_ID.ID_SellDT, tbl_ID.BatchNo, tbl_ID.ID_Fridge, tbl_ID.IM_KS, tbl_ID.EtikettVorhanden, tbl_ID.Invoice_No, tbl_Verpackung.Verpackungsform
    2. FROM tbl_ID INNER JOIN tbl_Verpackung ON tbl_ID.Verpackung = tbl_Verpackung.ID;
    Wie nein? In dem SQL-Stement steht doch sogar INNER JOIN...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Wie nein? In dem SQL-Stement steht doch sogar INNER JOIN...


    ok - dann ja und ja: Join ja und mehrere Tabellen ja. Hab mehrere Tabellen als mehr als 2 verstanden. Danke für den Hinweis.

    @ErfinderDesRades: Im Anhang noch der Screenshot, wie ich ein DGV durch Drag&Drop aus der Datenquelle erzeuge...
    Bilder
    • Datenquelle2DGV.jpg

      31,51 kB, 545×267, 61 mal angesehen

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

    Wie gesagt, hab sowas noch nie gemacht.
    Aber dieses scheint mir zuzutreffen:

    ErfinderDesRades schrieb:

    ZB wenn kein Primärschlüsselfeld dabei ist, kann ein Datensatz nicht rückgespeichert werden

    Deine Query ruft im Select-Segment nicht den Primärschlüssel von tbl_Verpackung ab.
    Damit ist dem DataAdapter gänzlich unmöglich, den Datensatz aufzufinden, in den eine Änderung von tbl_Verpackung.Verpackungsform einzuspeichern wäre.
    Vielleicht wäre das eine Lösung, wenn du den tbl_Verpackung - PK mit ins Select-Segment aufnimmst.
    (Vielleicht auch nicht, weils mit gejointen Tabellen numal nicht geht - aber das wirst du ja bald wissen.)
    Alternativ lässt man das ganze Designer Zeug bzgl. DB Zugriffe weg und programmiert das selbst. Dazu muss man allerdings wissen, wie man auf die DB zugreift, wie man Daten läd und sie speichert.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen