Hallo Access Freunde,
in folgenden VBA-Code will ich eine Where Klausel einfügen (wie rot gekennzeichnet), bin aber zu dumm. :)
Dim recset As DAO.Recordset
Set recset = Forms!Bemerkungssuche.RecordsetClone
If recset.RecordCount > 0 Then recset.MoveFirst
Do Until recset.EOF
recset.Edit ' zusätzlich erforderlich
recset![Qualität_ID] = Forms!QueryDialog_Qualität.Qualität_a [color=red]Where [Qualität_ID] Is Null ??
[/color]recset.update
recset.MoveNext
Loop
Vielleicht kann mir geholfen werden.
Beste Grüße
Frank
Hi,
könnte es sein, dass du eigentlich eine Aktualisierungs-Abfrage ausführen möchtest?
Die könnte bspw. folgendermaßen aussehen:
Update tabelle
Set Qualität_ID = Forms!QueryDialog_Qualität.Qualität_a
Where Qualität_ID Is Null
Hi MaggieMay,
es ist etwas komplizierter. In einem Endlosformular werden Daten gefiltert und in diesen gefilterten Daten soll ein Feld aktualisiert werden, wenn noch kein Eintrag vorhanden ist. Die Aktualisierung darf aber nicht auf die basierende Abfrage im Hintergrund zugreifen, sondern nur auf die Daten in im Formular, deshalb "RecordsetClone". Den Code hatte mir mal Franz (DF6GL) geschrieben.
LG
Frank
Eine WHERE-Klausel ist Element einer SQL-Anweisung. Punkt. In Deinem Code ist sie deplatziert.
In einem Recordsetdurchlauf könnte man jeweils das gefragte Feld auf einen Zustand prüfen, sinnvollerweise vor dem Edit.
ZitatDie Aktualisierung darf aber nicht auf die basierende Abfrage im Hintergrund zugreifen, sondern nur auf die Daten in im Formular, deshalb "RecordsetClone".
Eine Filterung fällt ja nun nicht vom Himmel und bleibt auch kein unbekanntes Wesen.
Wenn Du selber diesen Filter erzeugst, könntest Du ihn Dir "merken" für eine späteren Verwendung.
Du könntest den vorhandenen Filter auch im aktuellen Stand abgreifen:
Dim sFilter As String
sFilter = Me.FilterEin Filter ist bekanntlich eine WHERE-Klausel ohne das Schlüsselwort WHERE. In den nun vorhandenen Filter könntest Du Deine zusätzliche Bedingung einbauen und das Ganze dann doch auf die vorhandene Abfrage anwenden.
Ist das Endlosformular als Unterformular in ein Hauptformular über Schlüssel verknüpft, müsste man dann noch eine zusätzliche Filterung über die Verknüpfung berücksichtigen.
Hi Eberhard,
vielen Dank für deine Klarstellung. Durch meine inzwischen 117 Beiträge wurde ich zum "Access-Profi" gemacht, was der Wahrheit auf keinen Fall entspricht. :)
Wenn ich eine Bedingung einfüge wie im folgenden Code, wird der Inhalt des Feldes aber nicht erkannt. Was mache ich da noch falsch?
Set recset = Forms!Bemerkungssuche.RecordsetClone
If recset.RecordCount > 0 Then recset.MoveFirst
[color=red]If Not Qualität_ID = Null Then recset.MoveNext[/color]
Do Until recset.EOF
recset.Edit ' zusätzlich erforderlich
recset![Qualität_ID] = Forms!QueryDialog_Qualität.Qualität_a
recset.update ' zusätzlich erforderlich
recset.MoveNext
Loop
LG
Frank
Hallo,
If Not IsNull(Qualität_ID) Then recset.MoveNext
Prüfung auf Null muss mit der Funktion IsNull() erfolgen.
Hallo Klaus,
danke für deine Antwort. Deine Zeile habe ich eingefügt, aber wenn im Feld schon ein Eintrag vorhanden ist, wird er trotzdem überschrieben! Und gerade das will ich verhindern.
LG
Frank
Etwas geordnet:
Set recset = Forms!Bemerkungssuche.RecordsetClone
With recset
If .RecordCount > 0 Then .MoveFirst
Do Until .EOF
If IsNull(.Fields("Qualität_ID")) Then
.Edit
.Fields("Qualität_ID") = Forms!QueryDialog_Qualität.Qualität_a
.Update
End If
.MoveNext
Loop
End With
Hallo Eberhard,
habe soeben deinen Code getestet und es funktioniert so wie ich es mir vorgestellt habe. Vielen Dank! Und ich habe wieder etwas gelernt.
Schönen Sonntag
Frank