Forums Neueste Beiträge
 

Anzeige der Textboxinhalte nach Form.RecordSet.AddNew() aktualisie

12/09/2008 - 13:49 von Frank Massel | Report spam
Ein freundliches Hallo an die Newsgroup !

[ACCESS 2003-Projekt mit SQL-Server 2005]

In einer "standardmàßig" erstellten Form werden in der "Formularansicht" die
Datensàtze einer Tabelle verwaltet (je Tabellenfeld eine Textbox).

Nun möchte ich gerne bei neuen Datensàtzen die Vorbelegung der Felder
dynamisch gestalten (womit Standardwerte für die Spalten der SQL-Tabelle als
Lösung wegfallen), ansonsten soll das Verhalten wie bei neuen Sàtzen in
ACCESS üblich sein, d.h. der neue Satz wird in der Form zum Editieren
angezeigt aber noch nicht in der Datenbank gespeichert.
Ausserdem fàllt auch die Lösung "direkte Belegung der
Textbox-Steuerelemente" weg, da ich die Lösung für einen komplexeren
Programmteil benötige.

Also: <Neu>-Schaltknopf auf der Form ergànzt und zugehörige
Ereignis-VBA-Click-Routine gefüllt:

1. Versuch zur Erzeugung des neuen Satzes per VBA
DoCmd.GoToRecord , , acNewRec
Wenn man dann mit Me.RecordSet["Feldname"].Value = "irgenwas" ein Feld
belegt, wirkt das leider nicht auf den neuen Satz, sondern auf den zuletzt
aktiven Satz... Fehlschlag.

2. Versuch zur Erzeugung des neuen Satzes per VBA
Da die Felder nur vorbelegt werden sollen, darf der neue Satz nicht sofort
in der Datenbank gespeichert werden. Lt Hilfe fàllt damit

Call Me.RecordSet.AddNew(FeldNamen(), FeldWerte())

flach. Also dann eben:

Private Sub but_New_Click()
Call Me.RecordSet.AddNew
Me.RecordSet["Feldname1"].Value = "irgenwas"
Me.RecordSet["Feldname2"].Value = "irgenwasanderes"
...
End Sub

Damit werden die Werte wirklich in den neuen Satz geschrieben und der neue
Satz (wie gewünscht) noch nicht gespeichert.
Aber in den Textbox-Steuerelemten der Form werden immer noch die
"Standardwerte" des neuen Satzes angezeigt (meistens "#Fehler").
Wenn man dann ein Feld àndert und verlàsst, zeigen alle Felder (bis auf das
geànderte) die Werte aus der o.a. VBA-Routine an (?!).

Das mit der fehlenden Anzeigen-Aktualisierung geht auch einfacher und auch
bei vorhandenen Sàtzen:
Schaltknopf <Feld1 àndern> ergànzen und in der zugehörigen
VBA-Click-Ereignisroutine

Me.RecordSet("Feld1").Value = "Geàndert"

ergànzen.

Nach Aktivierung des Schaltknopfes (bei aktueller Satz = vorhandener Satz)
bleibt die Anzeige unveràndert. Wechselt man den Satz, wird aber der
vorherige Satz mit Feld1 = "Geàndert" in der Datenbank gespeichert, d.h. nur
die Anzeige war nicht akutell.

Die Anzeige mit Form.Refresh(), Repaint(), ReQuery, ReSync(), Re...
(und Textbox.Requery) haben nichts bewirkt oder aber bei dem Beispiel mit
dem neuen Satz diesen auch direkt in der Datenbank gespeichert, was ja nicht
passieren soll.

Hat jemand eine Tipp, wie ich nach einer Änderung der Felder des
Me.RecordSet einer Form per VBA die Anzeige der zugehörigen
Textbox-Steuerlemente aktualisieren kann, ohne das im Fall "aktueller Satz =
neuer Satz" dieser dadurch in der Datenbank gespeichert wird ?

Danke im voraus !

Viele Grüße

Frank Massel
 

Lesen sie die antworten

#1 Stefan Dase
15/09/2008 - 08:38 | Warnen spam
Hallo Frank!

Nun möchte ich gerne bei neuen Datensàtzen die Vorbelegung der Felder
dynamisch gestalten (womit Standardwerte für die Spalten der SQL-Tabelle als
Lösung wegfallen), ansonsten soll das Verhalten wie bei neuen Sàtzen in
ACCESS üblich sein, d.h. der neue Satz wird in der Form zum Editieren
angezeigt aber noch nicht in der Datenbank gespeichert.



So ganz klar ist mir dein Anliegen noch nicht. Wenn du einen neuen
Datensatz erfassen, aber noch nicht speichern möchtest, wàre m.E. der
bessere Weg, ein ungebundenes Formular zu erstellen.

Der Benutzer kann darin alle Angaben tàtigen und diese mittels eines
OK-Buttons dann wegspeichern oder den Vorgang abbrechen. Damit hast du
dann nicht das Problem, einen neuen Satz in der Tabelle anzulegen und
ggf. widerrufen zu müssen.

HTH,
Stefan

Ähnliche fragen