Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Auch Access für Doofe: Datensatz aktualisieren - aber nur einen!

885 views
Skip to first unread message

Lars Uffmann

unread,
Apr 1, 2009, 10:14:41 AM4/1/09
to
Ich hab ein Endlosformular mit einer nicht-editierbaren Datenmenge
(große Join-Abfrage) und ein Edit-Formular, in dem der jeweils aktuelle
Datensatz des Endlos-Forms in ungebundenen Controls editiert werden
kann. Die geänderten Daten schreibe ich dann per VBA/SQL in die dem
Endlosformular zugrundeliegenden Tabellen.

Und nun möchte ich die Anzeige aktualisieren - aber nur für diesen einen
Datensatz - denn an den Daten der anderen hat sich ja nichts geändert.

Das das für die nicht editierbare Abfrage nicht trivial ist, ist mir
klar, darum gebe ich mich damit zufrieden, wenn ich lediglich ein
"berechnetes Feld" gezielt aktualisieren kann.

Also txtId = <datensatz-id> und
txtBerechnet = <meineFunktion (txtId)>

Nun möchte ich irgendwie *nur* für den aktuellen Datensatz die
Berechnung von txtBerechnet neu auslösen.

Hat da jemand ne Idee, oder geht das über die Möglichkeiten von Access
hinaus?

Gruß,

Lars

Peter Doering

unread,
Apr 1, 2009, 11:03:12 AM4/1/09
to
Hallo,

Lars Uffmann wrote:

Fuer nur einen DS geht das nicht, aber Me.Refresh sollte funktionieren,
zumindest wenn das BE eine mdb/accdb ist. Details siehe OH.

Gruss - Peter

--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
3. SEK Sa/So 16./17.5.2009, Nürnberg

Anette Ratjen

unread,
Apr 1, 2009, 11:35:34 AM4/1/09
to
Hallo Lars,

Lars Uffmann wrote:
> Ich hab ein Endlosformular mit einer nicht-editierbaren Datenmenge
> (große Join-Abfrage) und ein Edit-Formular, in dem der jeweils
> aktuelle Datensatz des Endlos-Forms in ungebundenen Controls editiert
> werden kann. Die geänderten Daten schreibe ich dann per VBA/SQL in
> die dem Endlosformular zugrundeliegenden Tabellen.

Wenn Peters Tipp zulange dauert, weil die dahinterstehenden Abfragen zu
komplex sind, dann kannst Du die Daten auch in eine temporäre Tabelle
schreiben und diese als Datenherkunft nutzen. Außer dem Akualisieren der
Realdaten kannst Du dann auch die Temp-Daten aktualisieren.
Ach ja und temporäre Tabellen sollten nicht zu den realen Daten oder ins
Frontend gepackt werden sondern in einer extra DB die man nach Gebrauch auch
wieder löschen kann.
Ist vielleicht nicht der ganz "feine" Stil, aber manchmal um vieles
schneller.... :-)

Gruss Anette


Peter Doering

unread,
Apr 1, 2009, 11:53:48 AM4/1/09
to
Hallo Anette,

Anette Ratjen wrote:
> Lars Uffmann wrote:
>> Ich hab ein Endlosformular mit einer nicht-editierbaren Datenmenge
>> (große Join-Abfrage) und ein Edit-Formular, in dem der jeweils
>> aktuelle Datensatz des Endlos-Forms in ungebundenen Controls editiert
>> werden kann. Die geänderten Daten schreibe ich dann per VBA/SQL in
>> die dem Endlosformular zugrundeliegenden Tabellen.
>
> Wenn Peters Tipp zulange dauert,

Refresh <> Requery ;-)

Lars Uffmann

unread,
Apr 2, 2009, 8:18:37 AM4/2/09
to
Peter Doering wrote:
>> Nun möchte ich irgendwie *nur* für den aktuellen Datensatz die
>> Berechnung von txtBerechnet neu auslösen.
>> Hat da jemand ne Idee, oder geht das über die Möglichkeiten von Access
>> hinaus?
>
> Fuer nur einen DS geht das nicht, aber Me.Refresh sollte funktionieren,
> zumindest wenn das BE eine mdb/accdb ist. Details siehe OH.

Heureka, ich hab's!
Es geht :) Aber ich sag Euch nicht, wie *g*

Okay - Scherz. Aber vermutlich wißt Ihr es eh schon, habt es nur nicht
erwähnt, weil ich auf meinen nicht editierbaren Daten beharrte. Also:

Zunächst einmal muß auf eine nicht aktualisierbare Datenmenge verzichtet
werden (ich hab die unterschiedlichen Detaildatensätze, die ich mal
hatte, direkt mit meiner Feldberechnung aus der Datenbank gelesen, das
hat geholfen).

Dann funktioniert die Sache von ganz allein: Man ändert einfach nur (per
Code) via Eingabeelement ein beliebiges Feld des Detaildatensatzes, zum
Beispiel indem man es mit seinem eigenen Wert überschreibt (alternativ
kann man hierzu auch ein Dummy-Feld erzeugen). Der Datensatz fühlt sich
"editiert" und berechnet seine berechneten Felder neu.

Beispiel in meinem Fall:
txtBerechnet.ControlSource ist "=getPreview(Nz([id]))"

txtBerechnet befindet sich im Detail-(Endlos-)Formular frmDetails, daß
Teil eines Parent-Forms ist.

Prozedur im Parent-Form zum Aktualisieren von txtBerechnet *nur* für den
aktuellen Datensatz:

Private Sub refreshCurrent
frmDetails.Form!txtSortId = frmProcedureItems.Form!txtSortId
End Sub

Fertig! Diese Aktualisierung ruft die Berechnung von txtBerechnet exakt
einmal für den aktuellen Datensatz auf :)

Gruß,

Lars

0 new messages