Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Mykis am Juni 12, 2015, 20:36:01

Titel: Where Klausel in recset?
Beitrag von: Mykis am Juni 12, 2015, 20:36:01
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
Titel: Re: Where Klausel in recset?
Beitrag von: MaggieMay am Juni 12, 2015, 22:35:38
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
Titel: Re: Where Klausel in recset?
Beitrag von: Mykis am Juni 12, 2015, 22:55:13
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
Titel: Re: Where Klausel in recset?
Beitrag von: ebs17 am Juni 13, 2015, 08:54:47
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.
Titel: Re: Where Klausel in recset?
Beitrag von: Mykis am Juni 13, 2015, 11:32:30
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

Titel: Re: Where Klausel in recset?
Beitrag von: MzKlMu am Juni 13, 2015, 11:49:19
Hallo,
If Not IsNull(Qualität_ID) Then recset.MoveNext
Prüfung auf Null muss mit der Funktion IsNull() erfolgen.
Titel: Re: Where Klausel in recset?
Beitrag von: Mykis am Juni 13, 2015, 11:59:43
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
Titel: Re: Where Klausel in recset?
Beitrag von: ebs17 am Juni 13, 2015, 13:20:12
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

Titel: Re: Where Klausel in recset?
Beitrag von: Mykis am Juni 13, 2015, 20:45:43
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