Neuigkeiten:

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

Mobiles Hauptmenü

Identische Datensätze aber unterschiedliche Ergebnisse

Begonnen von sellrich, Februar 07, 2019, 11:03:19

⏪ vorheriges - nächstes ⏩

sellrich

Ich weiß es wirklich zu schätzen, dass alles "in Frage gestellt wird". Daraus lerne ich auch mit am meisten. Vielen Dank!

Dieses System, so schlecht es auch designed ist, funktioniert ja. Wenn die Zieltabelle leer ist.

Wären es doppelte Datensätze oder ein ähnliches Problem, hätte ich ja nicht die identische Anzahl an Datensätzen, oder?
Wenn die Tabelle gefüllt ist mit 10.000 DS und ich die Abfrage nochmals ausführe, sagt er mir das ich 10.000DS nicht kopieren konnte. 
D.H ja einerseits kopiert er 1:1 alles rüber.
Anderseits zeigt mir eine Abfrage auf die Spalte Netto jedoch zwei unterschiedliche Summen an. Das ist der Punkt den ich lösen muss/soll.

ZitatMit dieser Prüfung würde man auf vorhanden testen und somit nur neue Datensätze anfügen. Das steht aber im oben verlinkten Beitrag drin und hätte schon Eingang in Dein Selbststudium finden können.
Vielen Dank. Das werde ich gleich umbauen. Bisher wurde hier mit DoCmd.SetWarnings False gearbeitet. Um die o.g. Meldung mit Schlüsselverletzungen einfach zu ignorieren.

PhilS

Zitat von: sellrich am Februar 11, 2019, 13:57:40
D.H ja einerseits kopiert er 1:1 alles rüber.
Anderseits zeigt mir eine Abfrage auf die Spalte Netto jedoch zwei unterschiedliche Summen an. Das ist der Punkt den ich lösen muss/soll.
Hast du schon mal eine (Auswahl-)Abfrage gemacht, in der du die beiden Tabellen über die SatzNr verknüpfst und dann die weitere Daten (Jahr, Monat. Netto) miteinander vergleichst?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

sellrich

Habe ich direkt mal getestet. Es sind gleich viele DS, als wenn ich die Tabellen einzeln danach überprüfe.
Habe das ganze auch mal ins Excel rüber kopiert und nach Duplikaten gesucht. Auch kein Treffer.

Hier der Code mit dem ich es getestet habe.
SELECT dbo_KUNDENUMSATZ.SATZ, dbo_KUNDENUMSATZ.netto, Kundenumsatz.netto, Kundenumsatz.SATZ, dbo_KUNDENUMSATZ.Monat, dbo_KUNDENUMSATZ.Jahr
FROM dbo_KUNDENUMSATZ INNER JOIN Kundenumsatz ON (dbo_KUNDENUMSATZ.SATZ = Kundenumsatz.SATZ) AND (dbo_KUNDENUMSATZ.SATZ = Kundenumsatz.SATZ)
WHERE (((dbo_KUNDENUMSATZ.Monat)=2) AND ((dbo_KUNDENUMSATZ.Jahr)=2019));

PhilS

Gibt's hier Ergebnisse?
SELECT dbo_KUNDENUMSATZ.SATZ, dbo_KUNDENUMSATZ.netto, Kundenumsatz.netto, Kundenumsatz.SATZ, dbo_KUNDENUMSATZ.Monat, dbo_KUNDENUMSATZ.JahrFROM dbo_KUNDENUMSATZ
  INNER JOIN Kundenumsatz
    ON (dbo_KUNDENUMSATZ.SATZ = Kundenumsatz.SATZ)
WHERE (((dbo_KUNDENUMSATZ.Monat)=2)
AND ((dbo_KUNDENUMSATZ.Jahr)=2019))AND dbo_KUNDENUMSATZ.netto <>  Kundenumsatz.netto;
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

sellrich

#19
Ohje darauf hätte ich auch selber kommen müssen! Danke.

Aber jetzt verstehe ich gar nichts mehr. Da kommen einige Ergebnisse. Von 23480 tauchen da knapp 1500 auf (einige aber nur wegen des Formats z.B 14,9 und 14,90)
Aber es sind dennoch mehr als genug die da auftauchen. Wie kann das sein bei einem "einfachen" kopieren von A nach B? Habe ich bei der Anfügeabfrage ein Fehler gemacht?

EDIT: Das ist exakt! die Summe die ich in der Zieltabelle zu wenig habe.

So. Habe mal die Werte versucht miteinander zu vergleichen. Es ergibt sich keinerlei Muster oder ähnliches.
Hier mal Beispielwerte aus der Abfrage von PhilS:

dbo_KUNDENUMSATZ.SATZ   dbo_KUNDENUMSATZ.netto   Kundenumsatz.netto   Kundenumsatz.SATZ   Monat   Jahr
0010918020810161101613600722019N   146,49   200,54   0010918020810161101613600722019N   2   2019
0010918020810165101653300722019N   246     465,73   0010918020810165101653300722019N   2   2019
0010918020810171101713300722019N   28,39   199,24   0010918020810171101713300722019N   2   2019
0010918020810189101893600722019N   222,6   326,01   0010918020810189101893600722019N   2   2019
0010918020810209102093300722019N   189,15   1.212,71   0010918020810209102093300722019N   2   2019

Spalte Satz stimmt überein. Nur verstehe ich nicht, wie solch falsche Werte kopiert werden.

Gestern waren es ~24.000 DS im Februar davon knapp ~1400 mit einem anderen Nettowert. Heute ~27.000 mit knapp ~2200 unterschiedlichen Netto Einträgen. Das bedeutet ja das die Abfrage teilweise auch richtig arbeitet. Aber ich kann mir beim besten Willen nicht erklären woher diese Zahlen kommen.

ebs17

Desweilen soll es vorkommen, dass man an einer Tabelle agiert und aber eine andere Tabelle ansieht. Also sollte man einen Schritt zurücktreten und prüfen, ob man gerade im falschen Film ist.
Mit freundlichem Glück Auf!

Eberhard

sellrich

ZitatDesweilen soll es vorkommen, dass man an einer Tabelle agiert und aber eine andere Tabelle ansieht. Also sollte man einen Schritt zurücktreten und prüfen, ob man gerade im falschen Film ist.

WaWi -> Zieltabelle im Access -> Quelltabelle SQL.

WaWi -> Zieltabelle = läuft immer.

Zieltabelle -> Quelltabelle läuft, wenn Quelltabelle leer.

Für mich als Anfänger wäre jetzt der nächste Schritt zu überlegen, wie ich die Quelltabelle einfach jedes mal leere bevor sie gefüllt wird. Da es so ja reibungslos funktioniert. Wäre wohl erstmal der "einfachste" Weg, um es zum Laufen zu bringen.
ZitatZumindest solange bis meine Schulungen etc. mich soweit gebracht haben, dass ich weiß wie es besser geht.

Dabei ist aber das nächste Problem, dass ich die Abfrage nicht einfach mit DoCmd.RunSQL Delete usw. ausführen kann. Das Programm lädt ewig, hängt sich irgendwann auf und es passiert nichts mehr.
Gibt es dazu eine Alternative?

PhilS

Zitat von: sellrich am Februar 12, 2019, 11:25:04
Für mich als Anfänger wäre jetzt der nächste Schritt zu überlegen, wie ich die Quelltabelle einfach jedes mal leere bevor sie gefüllt wird. Da es so ja reibungslos funktioniert. Wäre wohl erstmal der "einfachste" Weg, um es zum Laufen zu bringen.
Sind es denn unterschiedliche Abfragen, die die Tabelle erstmalig füllen und dann später aktualisieren?
Ich habe nochmal dein SQL der Aktualisierungsabfrage angeschaut. - Für mich ist es nicht erklärbar, warum dieses die offenbar falschen Daten anfügt.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

sellrich

#23
Zitat von: PhilS am Februar 12, 2019, 11:31:01
Sind es denn unterschiedliche Abfragen, die die Tabelle erstmalig füllen und dann später aktualisieren?

Nein sind es nicht. Es ist eine Abfrage. Ich führe immer die gleiche Abfrage aus, egal ob die Zieltabelle leer oder gefüllt ist.

Zitat von: PhilS am Februar 12, 2019, 11:31:01Ich habe nochmal dein SQL der Aktualisierungsabfrage angeschaut. - Für mich ist es nicht erklärbar, warum dieses die offenbar falschen Daten anfügt.

Es wäre leichter, wenn die Daten komplett verkehrt wären oder gar fehlen würden. Aber alle Spalten werden 1:1 gespiegelt, es werden sogar Netto Beträge übergeben. Jedoch völlig wahllose. Deine Abfrage hat mir ja die Möglichkeit gegeben beide Ergebnisse gegenüber zu stellen. Wie bereits erwähnt ist da nicht mal ein Muster erkennbar - zb alles doppelt oder dreifach berechnet oder ähnliches.


sellrich

Nach ewigem Suchen und probieren bin ich immer noch auf keine Lösung gekommen. Auch Neugestaltung des gesamten Projekts hat nicht geholfen (gleiches Ergebnis gewesen).

Hat jemand evtl eine Idee, wie ich die SQL Tabelle über VBA automatisiert löschen kann? Mit DoCmd.RunSQL DELETE klappt es nicht. Es taucht zwar keine Fehlermeldung oder ähnliches auf aber Access hängt sich einfach auf und es passiert nichts mehr.

Und in dem SSMS kann ich auch keine geplante Aufgabe generieren, da es ein SQL Express Server ist.

DF6GL

Hallo,

ohne den gesamten Thread gelesen zu haben:

" ich auch keine geplante Aufgabe generieren, da es ein SQL Express Server ist. "


Verwechselt du da was ? Meinst Du mit "geplanter Aufgabe" eine "gespeicherte Prozedur"?



Zitatwie ich die SQL Tabelle über VBA automatisiert löschen kann

Mit VBA verpackt man (in diesem Fall) lediglich ein SQL oder DML/DDL-Statement


SQL:
Um eine Tabelle zu löschen:  Drop Table tblMyTable

Um den gesamten Inhalt einer Tabelle zu löschen:  Delete * from tblMyTable


und "verpackt" mit VBA:

Currentdb.Execute "Drop Table tblMyTable", dbFailOnError

Currentdb.Execute "Delete * from tblMyTable", dbFailOnError

PhilS

Zitat von: sellrich am Februar 20, 2019, 12:28:10
Nach ewigem Suchen und probieren bin ich immer noch auf keine Lösung gekommen. Auch Neugestaltung des gesamten Projekts hat nicht geholfen (gleiches Ergebnis gewesen).
Selbstverständlich sind deine Fragen hier absolut willkommen. - Also bitte nicht falsch verstehen.
Ich würde in diesem Problemkontext mal überlegen, ob es nicht sinnvoller wäre, wenn du bzw. dein Arbeitgeber ein Budget für Beratung und Coaching bereitstellen würdet und ihr Euch direktere Hilfe zur Problemlösung hinzuzieht. - Schließlich arbeitest du auch nicht umsonst (hoffe ich!) und hast schon eine Menge Zeit in dieses Problem investiert.

Zitat von: sellrich am Februar 20, 2019, 12:28:10
Hat jemand evtl eine Idee, wie ich die SQL Tabelle über VBA automatisiert löschen kann? Mit DoCmd.RunSQL DELETE klappt es nicht. Es taucht zwar keine Fehlermeldung oder ähnliches auf aber Access hängt sich einfach auf und es passiert nichts mehr.

Und in dem SSMS kann ich auch keine geplante Aufgabe generieren, da es ein SQL Express Server ist.
Das DELETE ... klapp sicherlich schon...
...irgendwann; wenn es nicht vorher zu einem Timeout kommt.
Etwas besser ist das von Franz vorgeschlagene Currentdb.Execute zur Ausführung, aber letztendlich würde ich eher eine Pass-Though-Abfrage verwenden, um die Daten auf dem SQL-Server zu löschen. Diese PT-Abfrage kann auch eine Stored Procedure verwenden, auch wenn das nicht zwingen nötig ist.

Der Sinn einer Geplanten Aufgabe erschließt sich mir hier noch nicht ganz.
Du könntest den Windows Task Scheduler bemühen, um eine Abfrage zeitgesteuert auszuführen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

sellrich

Zitat von: DF6GL am Februar 20, 2019, 14:05:27
Currentdb.Execute "Delete * from tblMyTable", dbFailOnError

Wie gut ist das denn!! Das hat wahrhaftig zur gewünschten Lösung geführt. Vielen Dank!
Jetzt muss ich nur noch schauen, ob das Zeitmäßig alles in den Ablauf passt aber das soll nun definitiv nicht mehr euer Problem sein.

Zitat von: PhilS am Februar 20, 2019, 16:14:01
Selbstverständlich sind deine Fragen hier absolut willkommen. - Also bitte nicht falsch verstehen.
Ich würde in diesem Problemkontext mal überlegen, ob es nicht sinnvoller wäre, wenn du bzw. dein Arbeitgeber ein Budget für Beratung und Coaching bereitstellen würdet und ihr Euch direktere Hilfe zur Problemlösung hinzuzieht. - Schließlich arbeitest du auch nicht umsonst (hoffe ich!) und hast schon eine Menge Zeit in dieses Problem investiert.

Du sprichst mir aus der Seele. Ich hab jedes Mal ein schlechtes Gewissen, wenn ich die Antworten von dir oder Eberhard hinterfragen muss, weil mir letztendlich einfach das nötige Wissen fehlt.
Ich habe dieses Thema nicht nur einmal angesprochen. Bisher leider ohne Erfolg.
Umso dankbarer bin ich das ich euch diese Fragen alle stellen kann und (auch wenn ich manchmal nerve  :-X) ihr mir immer versucht zu helfen.

PhilS

Zitat von: sellrich am Februar 20, 2019, 16:52:50
Wie gut ist das denn!! Das hat wahrhaftig zur gewünschten Lösung geführt. Vielen Dank!
Ach, wo wir gerade dabei sind...
...stell doch auch mal deine Anfügeabfrage entsprechend von DoCmd.RunSQL auf Currentdb.Execute um; das , dbFailOnError dabei nicht vergessen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor