Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Hilfe! "Diese Datensatzquelle kan nicht aktualisiert werden"

Begonnen von Marcello Thiel, Februar 22, 2017, 23:58:03

⏪ vorheriges - nächstes ⏩

Marcello Thiel

Hallo liebe Experten,

bin Access-Anfänger und habe da ein Problem. Ich baue z.Zt eine Datenbank für eine Schule auf er der auch die "Blöcke" (Unterrichtseinheiten) erfasst werden. Dafür habe ich ein Formulaer erstellt, in dem Lehrer, Uhrzeit, Raum für den jeweiligen Block (zB. 15.03 - 9-10.30Uhr) angezeigt werden. So weit so gut. Nun habe ich auch 3 verschiedene Abfragen gebastelt die mir für verschieden Kriterien einen Vertrertungslehrer für einen konkreten Block anzeigen. DIe funktionieren auch wunderbar. Wenn ich diese Abfragen in die Datesatzquelle des Formulars einbinde, wird alles genauso dargestellt wie ich es möchte, allerdings kann ich dann nichts mehr editieren und Access spuckt die Fehlermeldung: "Diese Datensatzquelle kan nicht aktualisiert werden" aus. Erst wenn ich die Abfragen aus der Datensatzquelle entferne kann ich wieder etwas ändern, diese brauche ich aber für eine bedingte Formatierung, die den Lehrer im Formular mit dem aus der Abfrage vergleicht und gelb markiert, wenn sie gleich sind (D.h es ist ein Vertretungslehrer) Hat jmd eine Idee?

Schon mal vielen Dank
MfG
Marcello Thiel

SQL Code der Datensatzherkunft des Formulars:

SELECT tblBlockKursZuordnung.blkID, tblBlockKursZuordnung.KursNrRef, tblBlockKursZuordnung.Datum, tblBlockKursZuordnung.BlockBeginn, tblBlockKursZuordnung.BlockEnde, tblBlockKursZuordnung.LehrerRef, tblBlockKursZuordnung.RaumRef, tblKurstermine.ktmKursperiode, Year([ktmKursbeginn]) AS Jahr, qryVertretungennachKNR.LEHRERID AS VKNRID, qryVertretungennachKNR.BlockBeginn AS VKNRBB, qryVertretungennachPeriode.LEHRERID AS VPeriodeID, qryVertretungennachPeriode.BlockBeginn AS VperiodeBB, qryVertretungennachLehrer.LEHRERID AS VLHRID, qryVertretungennachLehrer.BlockBeginn AS VLHRBB
FROM tblKurstermine INNER JOIN (tblKurse INNER JOIN (((tblBlockKursZuordnung LEFT JOIN qryVertretungennachKNR ON tblBlockKursZuordnung.LehrerRef = qryVertretungennachKNR.LEHRERID) LEFT JOIN qryVertretungennachPeriode ON tblBlockKursZuordnung.LehrerRef = qryVertretungennachPeriode.LEHRERID) LEFT JOIN qryVertretungennachLehrer ON tblBlockKursZuordnung.LehrerRef = qryVertretungennachLehrer.LEHRERID) ON tblKurse.kurID = tblBlockKursZuordnung.KursNrRef) ON tblKurstermine.ktmID = tblKurse.kurKursTermineRef;

MaggieMay

Hi,

wie du dir eigentlich schon denken könntest, wird natürlich auch der Code der in der Abfrage angesprochenen Abfragen benötigt, um sich ein vollständiges Bild über die Abhängigkeiten machen zu können.

Unabhängig davon lässt sich aber auch schon sagen, dass die gezeigte Abfrage vermutlich viel zu komplex ist, dass sie noch "änderbar" sein könnte.

Wenn du eine Variante kennst die funktioniert, solltest du wohl besser an den "Nebenschauplätzen" ansetzen.
Was die bedingte Formatierung betrifft, da gäbe es sicherlich auch noch andere Möglichkeiten, bspw. durch Einsatz von Domänenfunktionen.
Freundliche Grüße
MaggieMay

ebs17

ZitatHat jmd eine Idee?
Mehr als das. Man sollte einfach aufhören, eine Abfrage oder deren Darstellung in einem Formular als Exceltabelle zu betrachten, wo man gucken, ändern, rechnen und speichern in einem kann. Man sollte Datenbank begreifen.

Datensätze liegen real in Tabellen. Darüber kann man sie editieren, am sichersten eben tabellenweise. In Access ist es ziemlich einfach, weitere Formulare anzulegen. Also könnte man zusätzlich zum Betrachtenformular passende Änderungsformulare anlegen und verwenden.
Mit freundlichem Glück Auf!

Eberhard

Marcello Thiel

Hi, ok also hier der SQL Code der drei Abfragen (die sich alle sehr ähneln):

SELECT tblKurse.kurID, tblKurse.kurKNR, tblBlockKursZuordnung.LehrerRef, tblLehrer.lhrID AS LEHRERID, tblBlockKursZuordnung.BlockBeginn
FROM tblLehrer INNER JOIN (tblKursuhrzeiten INNER JOIN (tblKurse INNER JOIN tblBlockKursZuordnung ON tblKurse.kurID = tblBlockKursZuordnung.KursNrRef) ON tblKursuhrzeiten.kuzID = tblKurse.kurkuzIDRef) ON tblLehrer.lhrID = tblBlockKursZuordnung.LehrerRef
WHERE (((tblKurse.kurID)=[Formulare]![frmBlockeinrichtung]![KNRFILTERFELD]) AND ((tblBlockKursZuordnung.LehrerRef)<>[tblKurse]![Lehrer1Ref]) AND ((tblBlockKursZuordnung.BlockBeginn)=[tblKursuhrzeiten]![kuzUhrzeitBeginnBlockA])) OR (((tblKurse.kurID)=[Formulare]![frmBlockeinrichtung]![KNRFILTERFELD]) AND ((tblBlockKursZuordnung.LehrerRef)<>[tblKurse]![Lehrer2Ref]) AND ((tblBlockKursZuordnung.BlockBeginn)=[tblKursuhrzeiten]![kuzUhrzeitBeginnBlockB]));

SELECT tblKurse.kurID, tblKurstermine.ktmKursperiode, tblKurse.kurKNR, tblBlockKursZuordnung.LehrerRef, tblLehrer.lhrID AS LEHRERID, tblBlockKursZuordnung.BlockBeginn
FROM tblLehrer INNER JOIN (tblKursuhrzeiten INNER JOIN (tblKurstermine INNER JOIN (tblKurse INNER JOIN tblBlockKursZuordnung ON tblKurse.kurID = tblBlockKursZuordnung.KursNrRef) ON tblKurstermine.ktmID = tblKurse.kurKursTermineRef) ON tblKursuhrzeiten.kuzID = tblKurse.kurkuzIDRef) ON tblLehrer.lhrID = tblBlockKursZuordnung.LehrerRef
WHERE (((tblKurstermine.ktmKursperiode)=[Formulare]![frmBlockeinrichtung]![cboMonatsfeldBL]) AND ((tblBlockKursZuordnung.LehrerRef)<>[tblKurse]![Lehrer1Ref]) AND ((tblLehrer.lhrID)=[Formulare]![frmBlockeinrichtung]![cboLehrer]) AND ((tblBlockKursZuordnung.BlockBeginn)=[tblKursuhrzeiten]![kuzUhrzeitBeginnBlockA])) OR (((tblKurstermine.ktmKursperiode)=[Formulare]![frmBlockeinrichtung]![cboMonatsfeldBL]) AND ((tblBlockKursZuordnung.LehrerRef)<>[tblKurse]![Lehrer2Ref]) AND ((tblLehrer.lhrID)=[Formulare]![frmBlockeinrichtung]![cboLehrer]) AND ((tblBlockKursZuordnung.BlockBeginn)=[tblKursuhrzeiten]![kuzUhrzeitBeginnBlockB]));

SELECT tblKurse.kurID, tblKurstermine.ktmKursperiode, tblKurse.kurKNR, tblBlockKursZuordnung.LehrerRef, tblLehrer.lhrID AS LEHRERID, tblBlockKursZuordnung.BlockBeginn
FROM tblLehrer INNER JOIN (tblKursuhrzeiten INNER JOIN (tblKurstermine INNER JOIN (tblKurse INNER JOIN tblBlockKursZuordnung ON tblKurse.kurID = tblBlockKursZuordnung.KursNrRef) ON tblKurstermine.ktmID = tblKurse.kurKursTermineRef) ON tblKursuhrzeiten.kuzID = tblKurse.kurkuzIDRef) ON tblLehrer.lhrID = tblBlockKursZuordnung.LehrerRef
WHERE (((tblKurstermine.ktmKursperiode)=[Formulare]![frmBlockeinrichtung]![cboMonatsfeldBL]) AND ((tblBlockKursZuordnung.LehrerRef)<>[tblKurse]![Lehrer1Ref]) AND ((tblBlockKursZuordnung.BlockBeginn)=[tblKursuhrzeiten]![kuzUhrzeitBeginnBlockA])) OR (((tblKurstermine.ktmKursperiode)=[Formulare]![frmBlockeinrichtung]![cboMonatsfeldBL]) AND ((tblBlockKursZuordnung.LehrerRef)<>[tblKurse]![Lehrer2Ref]) AND ((tblBlockKursZuordnung.BlockBeginn)=[tblKursuhrzeiten]![kuzUhrzeitBeginnBlockB]));

Ich habe auch schon versucht die Eigenschaft Recordsettyp auf Inkonsistente Aktualisierungen zu setzen, aber das funktioniert auch nicht.
Das mit der Domfunktion hatte ich auch schon erwägt, weiß aber nicht genau, wie ich das realisieren soll. Habe schon verschiedentlich gelesen das es etwas mit den Leftjoins zu tun hat, aber das verstehe ich nicht ganz...
Ich würde die Abfragen auch gar nicht in die Datensatzherkunft einbinden wenn ich nicht die Lehrer aus der Abfrage mit denen meines Formulars für dei bed. Formatierung vergleichen wollte.


Marcello Thiel

Hat sich erledigt!!!
Vielen Dank an alle.
Wir habe eine Lösung gefunden, bei der wir die Abfragen gar nicht brauchen.


Beaker s.a.

Nicht schlecht; - diese Einsicht kommt den meisten Excelianern erst nach
Tagen und gefühlten 50 Posts  ;)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)