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
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.
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.....
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.
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
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
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 (https://www.ms-office-forum.net/forum/showthread.php?t=304156)
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!
@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.
@ Markuss888
Ich bin eher von einer falschen/fehlenden Klammer oder ähnlichem ausgegangen!