Neuigkeiten:

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

Mobiles Hauptmenü

If Then And mit 2 Recordsets

Begonnen von jblues, Dezember 05, 2018, 14:00:17

⏪ vorheriges - nächstes ⏩

jblues

Glück Auf!
Ich habe ein Problem .....
Ich will Datensätze aus einer Tabelle in eine andere übernehmen und zusammenfassen. in der ersten Tabelle sind DS, die bei der Ein- oder Auslagerung von Ersatzteilen mit einem Scanner entstehen. Diese können also auch mehrfach vorhanden sein. Bei der Übernahme in die neue Tabelle wird nun unterschieden zwischen vorhanden DS (Teilenummer, Lagerort vorhanden) dann soll nur der Bestand(Menge) geändert werden. Ansonsten wird ein neuer DS erstellt. Der zweite Teil klappt hervorragend. Bei der verschachtelten If/Then Bedingung "biegt mir Access falsch ab!" Obwohl die einzelnen bedingungen erfüllt sind, übergeht Acces die Anweisungen. Wäre schön wenn mir jemand helfen könnte!If RS("ArtNrTS") = rs1("ArtNrTS") And RS("Lagerort") = rs1("Lagerort") And RS("Lagerbox") = rs1("Lagerbox") Then
            RS.Edit
            strBestandLagerAlt = RS("Anzahl")
            strMengeRF = rs1("Menge")
            strBestandLagerNeu = (Int(strBestandLagerAlt) + Int(strMengeRF))
            RS("Anzahl") = strBestandLagerNeu
            RS.Update
            RS.MoveFirst
           
            rs1.Edit
            rs1("bearbeitet") = True
            rs1.Update
            rs1.MoveNext

markusxy

#1
Access arbeitet nach Regeln.
Gib einfach den Inhalt aller Felder mittels Debug.print aus, dann kommst du dem Problem auf die Schliche.
Was viele übersehen ist, dass bei einem Variant zwischen Null, 0 und Leerstring unterschieden wird.

Außerdem gilt für Null Werte:
(Null = Null) = Null statt wie von vielen erwartet (Null = Null) = True.

Edit:
Eine einfache Funktion zur Prüfung:
Function IsEqual(ByVal v1 As Variant, ByVal v2 As Variant) As Boolean
   
    If IsNull(v1) Or IsNull(v2) Then
        IsEqual = (IsNull(v1) = IsNull(v2))
    Else
        IsEqual = (v1 = v2)
    End If
End Function


Die Klammern sind nur für die bessere Lesbarkeit.

jblues

Hallo Markus888,
Ich habe mir die Inhalte der RS per MsgBox ausgeben lassen. Sie sind definitiv vorhanden und es handelt sich dabei um Duplikate aus der Quelldatei, also die per Schanner eingelesenen Werte. Auch wenn ich im Debugger die einzelnen RS mit der Maus anfahre, sehe ich das die Werte vorhanden und identisch sind.....

markusxy

Wenn du anders nicht drauf kommst dann mache die Ausgabe so:

debug.print: "ArtNrTS: ", RS("ArtNrTS") = rs1("ArtNrTS"), RS("ArtNrTS"), rs1("ArtNrTS")
Natürlich für jedes Feld.
Du musst ja nur genau hinsehen, dann löst sich das Problem auf.
Natürlich gehört das in den else Zweig.

jblues

Hallo Markus888,
danke für Deine Hilfe, Ich hatte die Ausgangsfelder in den Tabellen unterschiedlich Formatiert (Zahl/Text), da in einer ersten Version Buchstaben in der Artikelnummer vorkommen sollten!
Manchmal sieht man den Wald vor lauter Bäumen nicht, gerade als Anfänger .....

Gruß und Glückauf!
Peter

Beaker s.a.

Hallo Peter,
ZitatBuchstaben in der Artikelnummer vorkommen sollten
Das ist ja auch kein Problem, solange alle Felder mit der Nummer den
gleichen Typ haben, - in dem Fall eben Text.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

ZitatIch will Datensätze aus einer Tabelle in eine andere übernehmen
Statt datensatzweise durch Recordsets zu hoppeln, könnte man auch gleich richtige Abfragen verwenden. Eine Anleihe könntest Du Dir hier nehmen: Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle
Mit freundlichem Glück Auf!

Eberhard

jblues

Beaker s.a.
Stimmt und ist mir bekannt, leider hatte ich nur eine Spalte nicht umbenannt, as wir uns dagegen entschieden hatten.

ebs17
Da ich die Eingabe in diese Tabelle mit einem Scanner vornehmen lasse und nicht alle immer alles richtig machen, ist es mir so lieber. die Anzahl der Datensätze wird auch im Normalfall eher gering sein. etwa um 20 Stück. So bleibt mir die Kontrolle und die Möglichkeit der Korrektur bevor ich es übernehme!

markusxy

@jblues,
entscheidend ist bei der Fehlersuche, dass man nicht davon ausgeht, dass Access einen Bug hat (gibts natürlich schon).
Dann sucht man ganz anders und findet in 99% der Fälle auch das Problem.  :)
Andererseits profitieren natürlich auch andere von diesen Diskussionen.

jblues

@ Markuss888
Ich bin eher von einer falschen/fehlenden Klammer oder ähnlichem ausgegangen!