none
Datensätze nicht einfügbar bei verknüpfter Tabelle (SQL view)

    Frage

  • Mein Versuch ein Acces-porjekt auf SQL-Server umzustellen. stösst mal wieder auf erhebliche Probleme:

    Ich habe in SQL-Server eine View mit jeder Menge JOINS.

    Wenn ich für diese VIEW "oberste 200 DS bearbeiten" anwähle, dann tauchen die DS auf und das Icon für "neuen DS anfügen" ist aktiv geschaltet.

    Ich kann also Datensätze anfügen

    Unter "Entwerfen" ist dieses Icon jedoch nicht aktiv.

    Noch mysteriöser ist es unter Access wo die View als verknüpfte Tabelle aufrufbar ist.

    Auch hier kann ich keine neuen DS hinzufügen!

    Ich habe schonmal irgednwo eine gute Anleitung gefunden auf was man achten muss, damit eine View neue DS akzeptiert oder updateable ist. Leider finde ich diese Abahndlung nicht mehr.

    Ich poste einfach mal den FROM part der view:

    FROM         dbo.Gutachter INNER JOIN
                          dbo.Auftraggeber AS Versicherung RIGHT OUTER JOIN
                          dbo.qry_Personalien_probanden INNER JOIN
                          db_datareader.Geschlecht AS SachbearbeiterSEX INNER JOIN
                          dbo.Auftraggeber INNER JOIN
                          dbo.GA_Auftraege ON dbo.Auftraggeber.ID_Auftraggeber = dbo.GA_Auftraege.GA_Auftraggeber ON 
                          SachbearbeiterSEX.ID_Geschlecht = dbo.GA_Auftraege.GA_Sachbearbeiter_Sex ON 
                          dbo.qry_Personalien_probanden.ID_Proband = dbo.GA_Auftraege.GA_Proband_Nr ON 
                          Versicherung.ID_Auftraggeber = dbo.GA_Auftraege.GA_Versicherung_Nr INNER JOIN
                          dbo.GA_Typen ON dbo.GA_Auftraege.GA_Auftrag_Typ = dbo.GA_Typen.ID ON dbo.Gutachter.Gutachter_ID = dbo.GA_Auftraege.GA_Gutachter

    Vermutlich liegt es an den JOINS. Ich hatte es auch schonmal am Laufen, aber längere Zeit nichts mehr an dem Projekt gemacht.

    Sorry, wahrscheinlich sit die Lösung ganz einfach

    Montag, 6. Oktober 2014 18:04

Alle Antworten

  • Hi,
    Abfragen mit Join können mehrere Ergebnissätze zu einem Masterdatensatz liefern, wenn es mehrere Child-Sätze gibt. Wenn dann in einem Ergebnisdatensatz in einem Feld, welches aus einem Master-Datensatz gelesen wurde, geändert wird, ist unklar, was in die Datenbank zurückzuschreiben ist. Aus diesem Grund kann eine mit JOIN erhaltene Ergebnismenge nicht zurückgeschrieben werden.

    Dieses Problem kann gelöst werden, indem nur Spalten aus den Child-Sätzen zurückgeschrieben werden (erfordert spezifische Programmierung) oder auch alle Tabellen einzeln ohne JOIN geladen und dann zurückgeschrieben werden.

    --
    Peter
    Meine Homepage mit Tipps und Tricks

    Montag, 6. Oktober 2014 19:12
  • Ich verstehe leider überhaupt nichts
    Dienstag, 7. Oktober 2014 04:22
  • Wie bereits beschrieben:

    Diese Abfrage hat bereits fuktioniert.

    Das einzige, ws zwischenzeitlich geändert wurde, ist der SQL native Client 11.0

    Dienstag, 7. Oktober 2014 04:47
  • auf was man achten muss, damit eine View neue DS akzeptiert oder updateable ist. Leider finde ich diese Abahndlung nicht mehr.

    Hallo Nico,

    siehe MSDN CREATE VIEW (Transact-SQL) => Aktualisierbare Sichten

    Im Enterprise Manager (SQL Server <= 2000) war es möglich, Daten aus einer View zu bearbeiten, das war aber eher ein Bug als ein gewollte Feature. Seit SSMS 2005 ist es nur eingeschränkt möglich, siehe Link, und auch weiterhin nicht wirklich sinnvoll.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 7. Oktober 2014 07:02
  • Hi,
    zur Verdeutlichung den folgenden Fall:

    Tabelle 1 (Master) hat einen Datensatz
    Tabelle 2 (Child) hat mehrere Datensätze, die alle auf den Master-Datensatz verweisen

    Die JOIN-Abfrage liefert so viele Ergebnis-Datensätze wie es Child-Datensätze gibt und in jedem Ergebnis-Datensatz sind auch die Feldinhalte des Master-Datensatzes enthalten. Wenn jetzt in einem Ergebnis-Datensatz geändert wird, bleiben die anderen Ergebnis-Datensätze unverändert, so dass es in den Spalten aus dem Master-Datensatz bei Änderungen in diesen Spalten zu Konflikten kommt. Damit ist ein Rückspeichern der Änderungen unklar und wird von den Datenzugriffs-Routinen verhindert. Abhilfe kann nur das Rückspeichern der Änderungen in den zur Child-Tabelle gehörenden Feldinhalte schaffen. Das ist aber speziell zu programmieren und wird nicht durch die Standard Designer automatisch gemacht.

    --
    Peter
    Meine Homepage mit Tipps und Tricks

    Dienstag, 7. Oktober 2014 07:25
  • Am 06.10.2014 schrieb NicoNi:

    Noch mysteriöser ist es unter Access wo die View als verknüpfte Tabelle aufrufbar ist.

    Auch hier kann ich keine neuen DS hinzufügen!

    Die neuen Datensätze würde ich lieber per Recordset oder mittels
    INSERT-Abfrage einfügen/erzeugen. Die INSERT kannst Du in einer SP
    aufrufen, die du von Access aus per Pass-Through abfeuern kannst.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Dienstag, 7. Oktober 2014 17:55
  • Ich hatte erwähnt, daß es scon funktioniert hat und ich mich nicht erinnern kann etwas verändert zu haben.

    Es ist doch etwas in der Zwischenzeit geschehen:

    Die Verknüpfung der Tabellen erfolgt jetzt DSN-los und zwar mit dem SQL Server Native Client 11.0.

    Die Verknüpfungen werden per Makro/VBA aktualisiert.

    Ich habe mal 2 der betroffenen Views rückentwickelt, d.h. der Treiber ist jetzt wieder über "Microsoft SQL Server ODBC-Treiber Version 06.01.7601".

    Damit scheint es auf den ersten Blick wieder zu funktinieren.

    Ist es denkbar, daß der native Client der Bösewicht ist ?

    Dienstag, 7. Oktober 2014 19:26
  • Am 07.10.2014 schrieb NicoNi:

    Ich hatte erwähnt, daß es scon funktioniert hat und ich mich nicht erinnern kann etwas verändert zu haben.

    Überleg dir das mit dem INSERT bzw. mit dem Recordset trotzdem.

    Es ist doch etwas in der Zwischenzeit geschehen:

    Die Verknüpfung der Tabellen erfolgt jetzt DSN-los und zwar mit dem SQL Server Native Client 11.0.

    Die Verknüpfungen werden per Makro/VBA aktualisiert.

    OK.

    Ich habe mal 2 der betroffenen Views rückentwickelt, d.h. der Treiber ist jetzt wieder über "Microsoft SQL Server ODBC-Treiber Version 06.01.7601".

    Damit scheint es auf den ersten Blick wieder zu funktinieren.



    Ist es denkbar, daß der native Client der Bösewicht ist ?

    Das weiß ich nicht, ich kenn mich mit den Treibern nicht aus. Was
    machst Du wenn der Kunde den aktuellsten Treiber verwendet? Dann
    funktioniert ein Teil der Anwendung nicht.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Dienstag, 7. Oktober 2014 20:32
  • Der einzige Kunde bin ich; insofern unproblematisch.

    Trotzdem wüsste ich gerne was diese doch dramtische Verhaltensänderung auslöst.

    Kann ich doch damit faktisch die früher luafen Anwendung wegschmeissen.

    Muss ich mich mit dieser Probelmatik an ein anderes Forum wenden ?

    Mittwoch, 8. Oktober 2014 17:54
  • Am 08.10.2014 schrieb NicoNi:

    Muss ich mich mit dieser Probelmatik an ein anderes Forum wenden ?

    Bezüglich View kannst Du dich an eines der SQL Server Foren wenden,
    evtl. haben die Spezialisten einen Tipp.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Donnerstag, 9. Oktober 2014 04:51
  • Hallo Nico,

    grundsätzlich sind neuere Treiber restriktiver, schlicht und einfach, weil das frühere laxe Verhalten in einigen Fällen Fehler verursacht.

    Ich hatte schon mal was zu gesagt, siehe Schreibkonflikt beim Ändern eines DS von Sql-Server View - was  das gleiche Szenario ist, nur ein anderes Problem auslöst.

    Aber da ich dort (und andere Male) keine Antwort von Dir erhalten habe, halte ich zukünftig den Mund...

    Gruß Elmar

    Donnerstag, 9. Oktober 2014 07:40