Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

2 Dao Recordset filtern und aktualisieren!

Begonnen von saarmike, April 23, 2015, 16:16:37

⏪ vorheriges - nächstes ⏩

saarmike

Hallo zusammen,

ich habe ein grosses Problem und komme irgendwie nicht weiter, vielleicht kann mir jemand von euch helfen?

Hier der Quellcode der leider nicht funktioniert :-(

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rstMyAql As DAO.Recordset
Dim strKdNr As String

Set db = CurrentDb
Set rst = db.OpenRecordset("Analyse", dbOpenDynaset)
Set rstMyAql = db.OpenRecordset("kundenbestand", dbOpenDynaset)
        rst.MoveFirst
        Do Until rst.EOF
        rstMyAql.Filter = adFilterNone
        strKdNr = rst!Kundennummer
        rstMyAql.Filter = "Vernum = '" & strKdNr & "'"
            If rstMyAql.EOF And rstMyAql.BOF Then
                rst!Beitrag= 0
            Else
                rst!Beitrag= rstMyAql!Beitrag
            End If
        rst.Update
        rst.MoveNext
        Loop
    rst.Close
    rstMyAql.Close

Wie Ihr seht versuche ich mehrer Kunden die in der Tabelle Analyse stehen
mit Daten aus der Tabelle Kundenbestand zu aktualisieren, aber es funktioniert
nicht.

MaggieMay

Hallo,
Zitataber es funktioniertnicht.
ein Hinweis auf Fehlermeldungen oder sonstiges Fehlverhalten wäre schon sinnvoll.

wie oft kann die Kundennummer in rstMyAql vorhanden sein? Wenn es nur einmal ist, könntest du suchen anstatt zu filtern. Außerdem vermischst du da offenbar DAO mit ADO.

Des weiteren könntest du beide Tabellen nach Kundennummer sortiert lesen und dich mit FindNext durch das Recordset hangeln.

Vor einem rst.Update sollte es ein rst.Edit geben.

Das sind so die Sachen die mir auf Anhieb aufgefallen sind.
Freundliche Grüße
MaggieMay

saarmike

Hallo Maggie May,

sorry das rst.Edit habe ich vergessen zu kopieren, das steht da, es kommt auch keine Fehlermeldung
und wenn ich Debug.Print mache hat er auch immer eine neue Kundennummer, aber updaten will er
immer 14,90€, obwohl die da gar nicht stehen :-(
Die Kundennummer ist in jeder Tabelle nur einmal vorhanden, nur den Beitrag möchte ich aus der
Kundentabelle in die Analyse einfügen.

Könntest du mir ein Beispiel geben wie ich es am geschicktesten machen kann, aber bitte keine
Abfrage.

MaggieMay

Zitatdas rst.Edit habe ich vergessen zu kopieren
Wie kann man eine einzelne Zeile aus einer Code-Block "vergessen" zu kopieren??

Aber warum machst du das eigentlich nicht mit einer Aktualisierungsabfrage, das wäre doch die einfachste Lösung.

Beispiel:
Update Analyse As A INNER JOIN kundenbestand As K
ON A.Kundennummer = K.vernum
SET A.Beitrag= K.Beitrag

Freundliche Grüße
MaggieMay

DF6GL

Hallo,

statt dem Recordset-Gegurke:


Update Analyse inner join Kundenbestand
on Analyse.Vernum = Kundenbestand.Kundennummer
set Analyse.Beitrag = Kundenbestand.Beitrag

MaggieMay

@Franz:
geht das auch mit einem Left Join, um die Beiträge ggfls. löschen zu können?
Freundliche Grüße
MaggieMay

DF6GL

Hallo,

sicherlich....


Update Analyse Left join Kundenbestand
on Analyse.Vernum = Kundenbestand.Kundennummer
set Analyse.Beitrag = 0
Where Kundennummer is Null

MaggieMay

#7
Hi,

die Syntax ist mir schon klar, ich wollte nur wissen ob das auch ausführbar ist, da Aktualisierungsabfragen manchmal ein bißchen rumzicken. ;-)

Außerdem dachte ich da eher an eine "All-In-One"-Abfrage ala:Update Analyse Left Join Kundenbestand
On Analyse.Kundennummer = Kundenbestand.Vernum
Set Analyse.Beitrag = IIF(Kundenbestand.Vernum Is Null, 0, Kundenbestand.Beitrag)


BTW:
ZitatWie Ihr seht versuche ich mehrer Kunden die in der Tabelle Analyse stehen
mit Daten aus der Tabelle Kundenbestand zu aktualisieren
Was wir in deinem Code sehen ist eher der umgekehrte Fall.
Wie herum soll es denn nun tatsächlich sein?
Freundliche Grüße
MaggieMay

DF6GL

Hallo,

ausführbar ist die Akt-Abfrage mit dem left join schon...

Inwieweit sich aber die IIF-Konstruktion als Performance-Bremse auswirkt, kann ich nicht sagen.

ebs17

Löschen und auf 0 setzen können sehr verschiedene Dinge sein.
Null ... heißt unbekannt. Das kann etwas ganz anderes als 0 sein, z.B. bei Schulden.

Auch: Wenn man eine Tabelle über eine andere Tabelle aktualisiert, macht meiner Meinung nach nur ein INNER JOIN Sinn, da man für eine Aktualisierung jeweils eine Entsprechung Quell- zu Zieldatensatz benötigt. Alles andere wären Konstanten, die man auch in einer zusätzlichen Abfrage abhandeln kann.
Mit freundlichem Glück Auf!

Eberhard