PDA

Vollständige Version anzeigen : Initialisierung bei Datensatzwechsel


Micky
04.10.2001, 15:24
Hi,

in meinem Formular zeige ich, wie kann es anders sein, Felder einer Tabelle.

Nun habe ich auch Buttons und Textfelder die gesetzt werden können.

Nun mein Problem:

Wenn ich in meinem Formular, was immer nur einen Datensatz anzeigt, zum nächsten wechsle, bleiben die Textfelder oder Umschaltbuttons gesetzt. Ich möchte aber, daß sie in einen definierten Zustand wie z.B. bei der Initialisierung das ich bei Form_Load benutze, gebracht werden. Wie mach ich das?
Ich brauche so etwas wie ein Record_Change Ereignis.

Wer kann mir bei meinem Problem weiter helfen?

Tschüß

Micky

Manuela Kulpa
04.10.2001, 16:15
<font face="Verdana" size="2">Hallo Micky!

Versuche es mal mit dem Form_Current-Ereignis (Beim Anzeigen), dann sollte es klappen! Bei Fragen, melde dich!

vg</font>

Mickeey
04.10.2001, 16:39
Hallo Manuela,

danke erstmal...aber ich verstehe nicht was mit Form_Current zu tun ist. Kannst Du mir da was genaueres dazu sagen? Oder einen groben Beispielcode dazu verfassen?

Tschüssi

Mickey

Manuela Kulpa
05.10.2001, 06:23
<font face="Verdana" size="2">Hallo Mickey!

Ok, zeichnen wir mal ein kleines Beispiel auf :)! Kurz zur Erklärung, das Current-Ereignis (Beim Anzeigen) tritt ein, wenn ein Datensatz den Fokus erhält und so zum aktuellen Datensatz wird oder wenn das Formular erneut abgefragt wird.

Das bedeutet, wenn ein Formular geöffnet wird und sobald der Fokus einen Datensatz verlässt und zu einem anderen Datensatz wechselt, führt Access diese Ereignisprozedur (Current) aus, bevor der erste bzw. nächste Datensatz angezeigt wird.

So, nun zum Beispiel! Wir haben ein kleines Formular (s.u.) mit zwei ungebundenen Felder: Gesamtname und Alter. Sobald ein Datensatzwechsel erfolgt, wird die Anzeige aktualisiert, und der korrekte Gesamtname und das aktuelle Alter angezeigt.

Falls du noch Fragen hast, melde dich!

vg Manuela

Das Formular:

<img src="http://www.kulpa-online.de/Image/initialisierung.gif" alt="Das kleine Formular">

Die Prozeduren:</font>

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> SetUnboundField()

<span class="TOKEN">Dim</span> lAlter <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> sGesamtname <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> dtBirthDate <span class="TOKEN">As</span> Date
<span class="TOKEN">Dim</span> sVorname <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> sNachname <span class="TOKEN">As</span> <span class="TOKEN">String</span>

Me!txtGesamtname = ""
Me!txtAlter = ""

<span class="TOKEN">If</span> <span class="TOKEN">Not</span> IsNull(Me!txtBirthDate) <span class="TOKEN">Then</span>
dtBirthDate = Me!txtBirthDate
lAlter = DateDiff("yyyy", dtBirthDate, Date) + _
(Format(Date, "mmdd") < Format(dtBirthDate, "mmdd"))
<span class="TOKEN">End</span> <span class="TOKEN">If</span>

<span class="TOKEN">If</span> <span class="TOKEN">Not</span> IsNull(Me!txtLastName) <span class="TOKEN">Then</span> _
sNachname = Me!txtLastName

<span class="TOKEN">If</span> <span class="TOKEN">Not</span> IsNull(Me.txtFirstName) <span class="TOKEN">Then</span> _
sVorname = Me!txtFirstName

<span class="TOKEN">If</span> Len(sVorname) > 0 <span class="TOKEN">Then</span> _
sGesamtname = sVorname & " "

<span class="TOKEN">If</span> Len(sNachname) > 0 <span class="TOKEN">Then</span> _
sGesamtname = sGesamtname & sNachname

<span class="TOKEN">If</span> lAlter > 0 <span class="TOKEN">Then</span> _
Me!txtAlter = lAlter

<span class="TOKEN">If</span> Len(sGesamtname) > 0 <span class="TOKEN">Then</span> _
Me!txtGesamtname = Trim(sGesamtname)

<span class="TOKEN">End</span> <span class="TOKEN">Sub</span><hr>_
<span class="TOKEN">Private Sub</span> Form_Load()

<span class="TOKEN">Call</span> SetUnboundField

<span class="TOKEN">End</span> <span class="TOKEN">Sub</span><hr>_
<span class="TOKEN">Private Sub</span> Form_Current()

<span class="TOKEN">Call</span> SetUnboundField

<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>

Micky
05.10.2001, 14:36
Danke Dir Manuela, ich glaube Dein Tip ist goldrichtig!
Werde es sobald wie möglich in meinen Code implementieren und wenn Fragen auftauchen, dann weiß ich ja, es gibt Dich.

Tschüssi

Mickey

Micky
05.10.2001, 19:54
Hallo Manuela,

also jetzt hab ich das mit dem Form_Current Ereignis gemacht.
Toll es klappt...aber einen kleinen Haken hat es...
Es überschreibt mir mein Form_Load Ereignis in der ich initialisiere. Ich will zwar bei Datensatzwechsel auch initialisieren, aber dieses unterscheidet sich in ein paar Punkten, gegenüber der Form_Load Initialisierung.
Hast Du jetzt noch einen Tip für mich um Beides zum laufen zu bringen?

Tschüssi

Mickey

Manuela Kulpa
06.10.2001, 07:39
<font face="Verdana" size="2">Hallo Micky!

Freut mich, dass es fast geklappt hat :). Um dir nun weiter zu helfen, benötige ich jetzt doch noch einige Informationen mehr. Wie schaut denn die Unterscheidung aus? Vielleicht könntest du ja mal ein bisschen Code posten, damit ich mir das anschauen kann. Alternativ, könntest du mir deine Prozeduren auch zumailen.

Bis dahin</font>

Sascha Trowitzsch
06.10.2001, 10:11
Nimm den Code von Manuela benutze aber stattdessen:

Private Sub Form_Current()
if CurrentRecord>1 then Call SetUnboundField
End Sub

Allerdings wird dann nicht aktualisiert, wenn von irgendeinem Datensatz wieder zurück zum ersten geschaltet wird. Aber vielleicht reicht der Kompromiss ja.

Ciao, Sascha

Micky
07.10.2001, 23:21
Hallo Manuela und Sascha,

zuerst zu Deinem Vorschlag Sascha. Es kommt der Lösung sehr nahe ist aber immernoch nicht akzeptabel. Danke trotzdem, villeicht fällt Dir noch etwas ein.

Und nun zu Dir Manuela. Mein Code geht momentan dunter und drüber, weil ich an jeder Ecke bastle. Wäre jetzt unübersichtlich etwas zu schicken. Alle Unterschiede sind mir außerdem momentan auch noch nicht klar. Aber ein Beispiel ist, daß ich ein Umschaltbutton habe der bei Form_Load auf False steht. Aber wird dieser Button vom Benutzer für einige Datensätze auf True gesetzt, so soll es dabei bleiben.
Der User markiert damit einzelne Datensätze um mit diesen Datensätzen weitere Operationen durchzuführen. Geht er dann wieder die Datensätze zurück um zu sehen ob er auch alle richtig markiert hat, so darf natürlich der Umschaltbutton auf False geschaltet werden.
Das ist nun ein Beispiel und es werden noch einige anderen Sachen anfallen, wo sich die Beiden Initialisierungen voneinander unterscheiden.
Ich hoffe es einigermaßen klar erklärt zu haben.

Tschüssi

Mickey

Micky
07.10.2001, 23:30
Hi nochmal,

habe in meinem Beitrag ein wichtiges Wort vergessen:

Nämlich das "nicht" gehört noch in folgenden Satz:

...so darf natürlich der Umschaltbutton auf False geschaltet werden.

es muß heißen:

...so darf natürlich der Umschaltbutton nicht auf False geschaltet werden.

Bis dann...

Mickey

Micky
09.10.2001, 20:53
Hallo, weiß niemand mehr weiter?