PDA

Vollständige Version anzeigen : requery/repaint oder was anderes?


horse79
31.10.2001, 11:56
Hi,

ich mach ne Aktualisierungsabfrage aus meinem Formular raus. Dabei werden in der Tabelle hinter dem Formular Daten geändert.

Nach der Abfrage steht immer noch der alte Inhalt im Feld. Wenn ich auf den nächsten Datensatz springe bekomme ich einen Schreibkonflikt. Ist logisch. Jetzt muß ich erst auf eigene Änderungen verwerfen gehen, damit der neue Inhalt im Feld steht. Ist aber blöd so. Ich will blos die Abfrage ausführen und dann soll sofort der neue Wert angezeigt werden. me!requery produziert nur Fehler. Was muß ich einbasteln?

MarioR
31.10.2001, 12:18
Hallo,

probiers mal mit Me.Refresh.

horse79
31.10.2001, 12:26
funktioniert leider net. Sollte wohl noch was klarstellen. Button der Abfrage ausführt steht in einem geöffnetem PopUp-Form über dem geöffnetetn Formular. Klick auf Button startet die Abfrage, dann schließ das Formular und jetzt soll der neue wert in Form angezeigt werden.

Stema
31.10.2001, 12:31
Hallo horse79,

wie wär's denn, wenn Du das Formular beim Öffnen des PopUp schließt und beim Schließen des PopUp wieder öffnest?

horse79
31.10.2001, 12:35
dann sind immer no die alten Daten da???

horse79
31.10.2001, 15:11
@stema:

Sorry, klar mit öffnen und schließen gehts.
Aber ich finde, das ist nicht die sauberste Lösung. Ich fände es schöner wenn der Form offen bleiben könnte. ;-(

Gibts da noch andere Möglichkeiten?
Ohne dass ich immer den Speicherkonflikt bekomme?
auch:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
hilft da gar nichts??

Stema
31.10.2001, 16:50
Da gebe ich Dir natürlich recht: Das ist nicht besonders toll!

OK, dann folgendes:
Sub DeinQuery()
Dim r As Recordset

Set r = Me.RecordsetClone
DoCmd.GoToRecord acDataForm, Me.Form.Name, acNewRec
MsgBox "Hier jetzt das Query ausführen!"
Me.Bookmark = r.Bookmark
Exit Sub

Da Du hier den aktuellen DS verläßt, kann es nicht mehr zu Schreibkonflikten kommen.

Sascha Trowitzsch
31.10.2001, 18:16
Wenn ich's recht verstehe, beruht der Fehler bei Requery darauf, dass der im Formular angezeigte Datensatz noch nicht gespeichert ist und die Aktualisierungsabfrage somit mit inkonsistenten Daten arbeitet.
Da würde ich vor dem Starten des Popups ein:
> DoCmd.RunCommand accmdSaveRecord
ausführen.
Danach müsste Me.Requery eigentlich ohne Fehler funktionieren (Allerdings mit Sprung zum ersten DS; drum ist das mit dem Bookmark natürlich eleganter.)

Ciao, Sascha

horse79
02.11.2001, 07:10
Hi,

aktuell lt. mein Code:

DoCmd.Close
Dim r As Recordset

Set r = Me.RecordsetClone
DoCmd.GoToRecord acForm, Me.frmEurokredit, acNewRec
'MsgBox "Hier jetzt das Query ausführen!"
DoCmd.OpenQuery "AbfAkttglKurs"
Me.Bookmark = r.Bookmark
Exit Sub

Ich bekomme aber schon den Fehler in der Zeile Set r=me.recordsetClone

was is da bei mir falsch (Habe Access95)

Danke

Sascha Trowitzsch
02.11.2001, 12:57
Dein Code ist mir ein Rätsel.
Welches Recordset soll geclont werden, wenn du davor das Formular schon schließt??
Nach DoCmd.Close gibt es kein Me.Recordset mehr.
(Zur Erinnerung: Ein Recordset ist nicht die Formularherkunft, also die Tabelle oder Abfrage, sondern ein Speicherabbild dieser Daten; Beim Schließen wird dieses freigegeben=gelöscht.)

Ciao, Sascha

Stema
05.11.2001, 08:49
Hallo Sven,

welche Fehlermeldung bringt er denn?
Befindet sich die Schaltfläche tatsächlich in dem Formular, in dem die Daten angezeigt werden oder in dem PopUp? Dann mußt Du Me.RecordsetClone duch DeinFormular!RecordsetClone ersetzen.
Existiert RecordsetClone in Access95? Evtl. den DAO-Verweis einbinden.

horse79
05.11.2001, 09:12
hi Stema,

recordsetClone existiert bei mir. Die Schaltfläche ist im PopUp. Ich probiere es mal und meld mich dann wieder.

Merci