PDA

Vollständige Version anzeigen : Synchronisationsproblem im Erfassungsformular


cheaptrick
12.05.2011, 12:03
Hallo,

ich habe ein Endlos-Formular erstellt, in dem Daten zu Kunden erfasst werden können.
Abhängig vom jeweiligen User uns seinen Berechtigungen in Bezug auf den Kunden können Daten erfasst und geändert oder nur eingesehen werden.

Jetzt ist es so, das Erfasste Daten dem falschen Kunden zugeordnet werden, wenn ich ein Memo-Feld geändert habe ohne es zu verlassen und ich einen neuen Kunden auswählen will.
In diesem Fall werden die geänderten Daten dem neuen Kunden zugeordnet, selbst wenn ich für diesen Kunden die Daten nur ansehen darf.
Ursache scheint dabei wohl zu sein, dass ein geändertes Feld direkt verlassen wird, ohne in das nächste des Datensatzes zu wechseln. Jedenfalls ist zu dem Zeitpunkt die Änderung noch nicht gespeichert. Irgendwie scheint der Satz dann noch als Dirty markiert zu sein und er wird dann dem neu ausgewählten Kunden zugeordnet.

Kann mir jemand sagen, wie ich in solchen Situationen die Änderungen übernommen bekomme?

Gruß

cheapy

Atrus2711
12.05.2011, 12:08
Hi,
ist da irgendwelcher Code im Spiel?

cheaptrick
12.05.2011, 12:25
Ja, es ist Code im Spiel.
Im Code werden zwei SQL-Abfragen erzeugt, die Neue Datensätze an eine Tabelle auf dem Server anhängen bzw. vorhandene Datensätze aktualisieren.
Das Problem scheint bei der Aktualisierung zu liegen, da das Recordset zwar die Änderung enthält, diese aber nicht in der lokalen Tabelle steht.
Vermutlich wird nach Änderung des Kunden dieser Datensatz aus einem mir nicht ersichtlichen als verändert angesehen und dem neu ausgewählten Kunden zugeordnet, obwohl eigentlich alle geänderten und neuen Datensätze beim Wechsel in die Kundenauswahl erst mal weg geschrieben werden (sollten).
Das Feld, bei dem mir das Problem aufgefallen ist, ist ein Memofeld. Spielt das eine Rolle?

Das Formular arbeitet mit der lokalen Tabelle.

ebs17
12.05.2011, 12:43
Ja, es ist Code im Spiel.
... und der muss doch durch irgendetwas ausgelöst werden?
Irgendwie scheint der Satz dann noch als Dirty markiert zu sein und er wird dann dem neu ausgewählten Kunden zugeordnet.Datensätze werden datensatzweise gespeichert, bei gebundenen Formularen nach Verlassen des Datensatzes (nicht eines Feldes) oder bei expliziter Speichern-Anweisung.

Und: Gibt es bei Dir keine Datensatz-ID´s?

cheaptrick
12.05.2011, 13:12
Der Code wird durch verschieden Ereignisse ausgelöst.
Z.B. durch Betätigen der Speichern-Taste.
Diese baut den Query zusammen, der den Update- bzw. Insert-Befehl zusammen baut und ausführt.

Ich haben keine Datensatz-ID's, da diese DB von den Kollegen auch offline genutzt wird und eine Synchronisierung der Daten erfolgt, wenn der Kollege das nächste mal wieder online geht. Da jeder Kunde nur von EINEM Kollegen bearbeitet wird, dürfte das kein Problem sein.

Wenn ich in einem Datensatz ein Feld geändert habe und dann auf den Save-Button klicke, ist der Satz in meiner lokalen Tabelle nicht geändert.
Da dürfte das Problem liegen. Wie bekomme ich es hin, dass in diesem Fall die Änderung übernommen wird?
Im Recordset ist die Änderung ja zu sehen.

ebs17
12.05.2011, 13:21
Wenn ich in einem Datensatz ein Feld geändert habe und dann auf den Save-Button klicke, ist der Satz in meiner lokalen Tabelle nicht geändert.
Dann frage Deinen Save-Button, was er genau macht.

Ohne ID oder anderen eindeutigen Schlüssel wundert es mich nicht, dass nichts oder irgendetwas anderes stattfindet als erwartet.

cheaptrick
12.05.2011, 13:30
Sorry, da habe ich mich wohl unklar ausgedrückt.

Wie ich schon sagte ist die Reaktion auf das Klicken des Save-Buttons, das zwei SQL-Anweisungen zusammen gebaut werden. Die erste aktualisiert geänderte Datensätze der lokalen Tabelle auf dem Server und die zweite fügt neue Datensätze aus der lokalen Tabelle in der Tabelle auf dem Server an.
Das Problem ist aber, das zum Zeitpunkt des Drückens der Speichern-Taste die letzte Änderung nicht in der lokalen Tabelle zu sehen ist.

ebs17
12.05.2011, 13:38
Das Weitergeben von Änderungen einer lokalen Tabelle an eine Servertabelle hat mit dem Speichern von Informationen in der lokalen Tabelle aber nichts zu tun.

Wie hängt denn die lokale Tabelle mit dem Formular zusammen. Meinen Hinweis auf gebundenes Formular hast Du geflissentlich überlesen, Du sprichst von einem (für einen Außenstehenden imaginären) Recordset.
Mit anderen Worten: Über Deine Konstellation kann man nur raten. Ist das Absicht?

cheaptrick
12.05.2011, 14:25
Die lokale Tabelle ist die Datenbasis des Formulars.

Ich hatte jetzt noch folgendes eingebaut:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Nun scheint es zu gehen.
Allerdings hatte ich , leider nicht reproduzierbar, einmal die Fehlermeldung, die besagt, das der Befehl Speichern im Moment nicht zur Verfügung steht.
Keine Idee, was in diesem Fall die Ursache war.

ebs17
12.05.2011, 15:05
Lass diese nachgeahmten Menübefehle. Als explizite Speichernanweisung ist folgendes besser:
Me.Dirty = False
Hier ist auch sichtbar, dass es um den aktuellen Datensatz geht.

cheaptrick
13.05.2011, 06:54
Das sorgt fürs speichern?
Da wäre ich jetzt so nicht drauf gekommen!