Access 2010 - VBA - Datezensätze in einem Formular durchlaufen und verändern

Hi,
ich bin leider wohl schon zu lange aus Access „raus“ um den Fehler zu erkennen.
Was mein Code tun sollte:

  • im Formular zum ersten Datensatz springen
  • beim durchlaufen der Datzensätze die Felder leeren und den Hintergrund auf WEISS setzen
  • beim letzten Datensatz aufhören

Was er macht:

  • den aktuellen Datensatz leeren und den Hintergrund auf WEISS

Ich Arbeite mit einem Formular das mit der Abfrage a4_vokabeln Vokabeln anbietet die dann in den Feldern „…ueben“ ausgefüllt werden. Bei RICHTIG wird die Farbe grün beim FALSCH wird die Hintergrundfarbe rot. Der Code soll einfach alles zurücksetzen.

Ich habe einen Button erstellt der den nachfolgenden Code starten soll.

Private Sub Befehl52_Click()

_ Dim zaehler As Integer _

_ Dim db As DAO.Database _
_ Dim rs As DAO.Recordset2 _
_ Set db = CurrentDb _
Set rs = db.OpenRecordset(„a4_vokabeln“ )

_ rs.MoveFirst _

_ Do While Not rs.EOF _

_ t4_englisch1_ueben = Null _
_ t4_englisch2_ueben = Null _
_ t4_englisch3_ueben = Null _
_ t4_englisch4_ueben = Null _
_ t4_deutsch1_ueben = Null _
_ t4_deutsch2_ueben = Null _
_ t4_deutsch3_ueben = Null _
_ t4_deutsch4_ueben = Null _

_ t4_englisch1_ueben.BackColor = vbWhite _
_ t4_englisch2_ueben.BackColor = vbWhite _
_ t4_englisch3_ueben.BackColor = vbWhite _
_ t4_englisch4_ueben.BackColor = vbWhite _
_ t4_deutsch1_ueben.BackColor = vbWhite _
_ t4_deutsch2_ueben.BackColor = vbWhite _
_ t4_deutsch3_ueben.BackColor = vbWhite _
_ t4_deutsch4_ueben.BackColor = vbWhite _

_ rs.MoveNext _

_ Loop _
_ rs.Close _

_ Set rs = Nothing _
_ Set db = Nothing _

_ End Sub _

Danke Euch
meinereiner

Hallo,

ich bin leider wohl schon zu lange aus Access „raus“ um den
Fehler zu erkennen.

„den“ Fehler?? Hier gibt es NUR Fehler :wink: … Sorry

Was mein Code tun sollte:

  • im Formular zum ersten Datensatz springen
  • beim durchlaufen der Datzensätze die Felder leeren und den
    Hintergrund auf WEISS setzen
  • beim letzten Datensatz aufhören

Dann müsste man ganz anders an die Sache herangehen…

Was er macht:

  • den aktuellen Datensatz leeren und den Hintergrund auf WEISS

das ist nicht falsch … :wink:

Ich Arbeite mit einem Formular das mit der Abfrage a4_vokabeln
Vokabeln anbietet die dann in den Feldern „…ueben“
ausgefüllt werden. Bei RICHTIG wird die Farbe grün beim FALSCH
wird die Hintergrundfarbe rot. Der Code soll einfach alles
zurücksetzen.

Wie lautet der SQL-String der Abfrage (Abfrageentwurf/SQL-Ansicht) ?
und um welche Formular-Art handelt es sich (Einzelform, Endlosform)?

Ich habe einen Button erstellt der den nachfolgenden Code
starten soll.

Private Sub Befehl52_Click()

_ Dim zaehler As Integer _ ’ immer LONG benutzen

_ Dim db As DAO.Database _
_ Dim rs As DAO.Recordset2 _ ’ Recordset2 ist für Anlagenfelder, bzw. die dafür benutzten internen Tabellen vorgesehen.
_ Set db = CurrentDb _
Set rs = db.OpenRecordset(„a4_vokabeln“ )

_ rs.MoveFirst _ 'überflüssig

_ Do While Not rs.EOF _

_ t4_englisch1_ueben = Null _ 'ab hier werden die Formular-Textfelder (des akt. angezeigten Datensatzes) angesprochen und nicht die Recordset-Felder
_ t4_englisch2_ueben = Null _
_ t4_englisch3_ueben = Null _
_ t4_englisch4_ueben = Null _
_ t4_deutsch1_ueben = Null _
_ t4_deutsch2_ueben = Null _
_ t4_deutsch3_ueben = Null _
_ t4_deutsch4_ueben = Null _

_ t4_englisch1_ueben.BackColor = vbWhite _
_ t4_englisch2_ueben.BackColor = vbWhite _
_ t4_englisch3_ueben.BackColor = vbWhite _
_ t4_englisch4_ueben.BackColor = vbWhite _
_ t4_deutsch1_ueben.BackColor = vbWhite _
_ t4_deutsch2_ueben.BackColor = vbWhite _
_ t4_deutsch3_ueben.BackColor = vbWhite _
_ t4_deutsch4_ueben.BackColor = vbWhite _

_ rs.MoveNext _

_ Loop _
_ rs.Close _

_ Set rs = Nothing _
_ Set db = Nothing _

_ End Sub _

Erst wenn die o. st. Fragen beantwortet sind, kann eine konkrete Lösung dargestellt werden

Gruß
DF6GL,Franz

Hi,
Danke dass Du mir hilfst,
Das Formular ist ein Einzelformular

der Code lautet

SELECT t4_vokabeln.t4_id, t4_vokabeln.t4_englisch1, t4_vokabeln.t4_englisch2, t4_vokabeln.t4_englisch3, t4_vokabeln.t4_englisch4, t4_vokabeln.t4_deutsch1, t4_vokabeln.t4_deutsch2, t4_vokabeln.t4_deutsch3, t4_vokabeln.t4_deutsch4, t4_vokabeln.t4_englisch1_ueben, t4_vokabeln.t4_englisch2_ueben, t4_vokabeln.t4_englisch3_ueben, t4_vokabeln.t4_englisch4_ueben, t4_vokabeln.t4_deutsch1_ueben, t4_vokabeln.t4_deutsch2_ueben, t4_vokabeln.t4_deutsch3_ueben, t4_vokabeln.t4_deutsch4_ueben, t4_vokabeln.t4_ueben, t4_vokabeln.t4_dauerhaft_erledigt
FROM t4_vokabeln
WHERE (((t4_vokabeln.t4_ueben)=„x“))
ORDER BY t4_vokabeln.t4_id;

Gruß
meinereiner

Hallo,

Danke dass Du mir hilfst,
Das Formular ist ein Einzelformular

der Code lautet

SELECT t4_vokabeln.t4_id, t4_vokabeln.t4_englisch1,
t4_vokabeln.t4_englisch2, t4_vokabeln.t4_englisch3,
t4_vokabeln.t4_englisch4, t4_vokabeln.t4_deutsch1,
t4_vokabeln.t4_deutsch2, t4_vokabeln.t4_deutsch3,
t4_vokabeln.t4_deutsch4, t4_vokabeln.t4_englisch1_ueben,
t4_vokabeln.t4_englisch2_ueben,
t4_vokabeln.t4_englisch3_ueben,
t4_vokabeln.t4_englisch4_ueben, t4_vokabeln.t4_deutsch1_ueben,
t4_vokabeln.t4_deutsch2_ueben, t4_vokabeln.t4_deutsch3_ueben,
t4_vokabeln.t4_deutsch4_ueben, t4_vokabeln.t4_ueben,
t4_vokabeln.t4_dauerhaft_erledigt
FROM t4_vokabeln
WHERE (((t4_vokabeln.t4_ueben)=„x“))
ORDER BY t4_vokabeln.t4_id;

Neben der Missachtung der essentiell nötigen Normalisierung bei Datenbanken ist mir nicht klar, welche Bedeutung die einzelnen Felder(aufzählungen) haben…

Vermutlich soll in (z. B. ) „t4_deutsch4_ueben“ die deutsche Übersetzung der englischen Vokabel stehen, die im Feld „t4_englisch4“ angezeigt wird.

resp. soll in (z. B. ) „t4_englisch4_ueben“ die englische Übersetzung der deutschen Vokabel stehen, die im Feld „t4_deutsch4“ angezeigt wird.

Es könnte mit der Bedingten Formatierung bei jeweils allen der zutreffenden Feldern gelöst werden, wenn die „Übungs“-Vokabel („t4_englisch4_ueben“) mit der „Soll“-Vokabel („t4_englisch4“) verglichen und dadurch das entspr. Feld passend formatiert wird.

Gruß
Franz,DF6GL

Es könnte mit der Bedingten Formatierung bei jeweils allen der
zutreffenden Feldern gelöst werden, wenn die „Übungs“-Vokabel
(„t4_englisch4_ueben“) mit der „Soll“-Vokabel („t4_englisch4“)
verglichen und dadurch das entspr. Feld passend formatiert
wird.

Gruß
Franz,DF6GL

Hallo Franz,
das funktioniert auch. Ich nutze dass, wenn die 4 Vokabeln pro Datensatz nochmal geübt werden sollen. Also bei dem aktuellen Datensatz kann ich auf Knopfdruck das Feld leeren und zurücksetzen auf weiß, aber wenn er nicht nur 4 sondern 12 Vokabeln lernen muss sind das 3 Datensätze. Da hätte ich gerne auf „Knopfdruck“ die 3 Datensätze zurückgesetzt und keine Fehlermeldung wenn der letzte Datensatz überschritten wird. Daher habe ich es mit einem EOF versucht.

Gruß
meinereiner

Hallo,

wenn das eigentliche Problem das Löschen (Leeren) aller Übungsfelder in der Tabelle ist, dann so:

.
.
.
Do While Not rs.EOF

rs! t4_englisch1_ueben = Null 'Bezug auf das Recordset!
rs!t4_englisch2_ueben = Null
rs!t4_englisch3_ueben = Null
rs!t4_englisch4_ueben = Null
rs!t4_deutsch1_ueben = Null
rs!t4_deutsch2_ueben = Null
rs!t4_deutsch3_ueben = Null
rs!t4_deutsch4_ueben = Null

rs.MoveNext

Loop

Me.Requery 'Formular aktualisieren, evtl. geht auch : Me.Refresh

’ die folgenden Zuweisungen dürften überflüssig sein, weil die Bed. Formatierung greift
Me! t4_englisch1_ueben.BackColor = vbWhite 'Bezug auf das Formular-Textfeld!
Me!t4_englisch2_ueben.BackColor = vbWhite
Me!t4_englisch3_ueben.BackColor = vbWhite
Me!t4_englisch4_ueben.BackColor = vbWhite
Me!t4_deutsch1_ueben.BackColor = vbWhite
Me!t4_deutsch2_ueben.BackColor = vbWhite
Me!t4_deutsch3_ueben.BackColor = vbWhite
Me!t4_deutsch4_ueben.BackColor = vbWhite
.
.
.

Das ganze Recordset-Getöns kann kann mit dieser Codezeile erschlagen werden:

Currentdb.Execute "Update a4_vokabeln set t4_englisch1_ueben = Null , t4_englisch2_ueben = Null, … "

Gruß
DF6GL, Franz