Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Where Klausel in recset?

Begonnen von Mykis, Juni 12, 2015, 20:36:01

⏪ vorheriges - nächstes ⏩

Mykis

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

MaggieMay

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
Freundliche Grüße
MaggieMay

Mykis

#2
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

ebs17

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.Filter

Ein 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.
Mit freundlichem Glück Auf!

Eberhard

Mykis

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


MzKlMu

Hallo,
If Not IsNull(Qualität_ID) Then recset.MoveNext
Prüfung auf Null muss mit der Funktion IsNull() erfolgen.
Gruß Klaus

Mykis

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

ebs17

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

Mit freundlichem Glück Auf!

Eberhard

Mykis

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