Von Tabelle2 "summe" in Tabelle1 "summe" abziehen

Hi ukulele, andyfau,

habe die Zeile nun abgeändert, funktioniert Super !!!
Was ich nun feststellte nach der Abfrage ist das die OSPNNR nicht Eindeutig ist wie ich dachte, sie kommt Doppelt vor.
War mein Fehler bestimmt, hätte am Anfang den Datensatz nach Doppelten Einträgen durchsuchen müssen wo ich nicht daran gedacht hatte.
Schaute mir die Tabelle im Dos Programm nochmal an und tatsächlich sind Doppelte OSPNNR vorhanden, warum auch immer.
Wenn ich nun eine neu Spalte anlege mit TeileNR zum Beispiel und die Abfrage daraufhin ändere meint ihr das würde funktionieren oder habt ihr eine andere Idee ??? .

Gruß Andi
 
Werbung:
Jede Tabelle sollte einen Primärschlüssel haben, der immer eindeutig ist. Dieser ist meistens vom Format Autowert mit dem Namen ID und wird vom System vergeben. Die ID definiert den Datensatz, den man so immer eindeutig mit nur einer Zahl identifizieren kann. Zusätzlich lassen sich sprechende Indizes anlegen über die dann zum Beispiel bei 1:n Beziehungen Schlüssel (eindeutig) und Fremdschlüssel definiert werden. (Siehe Beziehungsfenster). Das verhindert Doppelerfassungen in der Primärtabelle. Datenbankpuristen bevorzugen aus Performancegründen die Verknüpfung von Tabellen über die IDs. Für kleine Datenbanken mit wenigen tausend Sätzen bevorzuge ich die Beziehung der Tabelle über die zusätzlichen Indizes, weil dann immer sofort ersichtlich ist, über welches Feld Tabellen miteinander verknüpft sind.

In diesem Fall lässt sich das mit den doppelten Schlüsseln wahrscheinlich reparieren, wenn du von Hand die mehrfachen Sätze in KDBestellungen jeweils genau der passenden alten und dann neuen/geänderten OSPNNR aufspalten und zuordnen kannst. Wenn die OSPNNR wirklich eigentlich eindeutig sein sollte, müssen die Doppelten in der Teiletabelle auf einen eindeutigen Wert geändert und parallel deren korrespondierende Sätze in KDBestellungen angepasst werden. Ein neues Feld braucht es nicht.

Vorgehensweise:
Löse eine evtl. vorhandene Beziehung der beiden Tabellen im Beziehungsfenster (auf die Verbindungslinie klicken, wenn vorhanden, und ENTF).
Ändere in der Teiletabelle die Werte der doppelten OSPNNRs auf einen jeweils eindeutigen Wert.
Ändere dann die OSPNNRs in der KDBestellungen auf den jeweils zugehörigen, ggf. neuen, Wert in der Teiletabelle. (Das geht, wie gesagt nur, wenn Du die Enden an dieser Stelle zusammen bekommst. Wenn nicht, kannst Du nur alle alten Sätze einer (neuen) PseudoOSPNNR zuordnen um sie so als "Achtung, da war was" zu kennzeichnen.)
Sind nun alle Sätze in der Teiletabelle eindeutig und die passenden Sätze aus KDBestellungen im dortigen Feld OSPNNR zugeordnet, kannst Du das Feld OSPNNR in der Teiletabelle zum Primärschlüssel machen. Gehe dazu in die Entwurfsansicht, klicke mit der rechten Maustaste auf das Feld und wähle Primärschlüssel. Sind alle Werte in den vorhandenen Sätze in der Tabelle tatsächlich in diesem Feld eindeutig, legt Access den Primärschlüssel an und lässt in Zukunft in diesem Feld keine Doppelerfassung mehr zu. Gibt es weiterhin doppelte Inhalte in diesem Feld scheitert die Anlage eines Primärschlüssels.
Nun kannst Du die 1:n Beziehung zur Tabelle KDBestellungen (wieder) herstellen. Gehe dazu ins Beziehungsfenster. Falls die Tabellen dort nicht zu sehen sind, kannst Du sie über rechte Maustaste hinzufügen. Ziehe nun einfach das Feld OSPNNR aus der Teiletabelle auf das Feld OSPNNR in KDBestellungen. Access erkennt den Primärschlüssel und legt automatisch die richtige 1:n Beziehung an.
Diese wird in Zukunft immer vorgeschlagen, wenn Du Abfragen auf die Tabellen erstellst oder Formulare/Berichte mit Hilfe eine Assistenten generierst. Wenn in KDBestellungen nun ein Satz angelegt und dort ein Wert in OSPNNR eingegeben wird, geht das nur, wenn schon ein Satz in der Teiletabelle zu dieser OSPNNR vorhanden ist.

Dieses grundlegende Wissen über Tabellen, Beziehungen, Vermeidung von Redundanzen (Normalisierung) solltest Du dir unbedingt aneignen, bzw. vertiefen, bevor Du die neue Datenbank konzipierst. Das Datenmodell entscheidet, ob eine DB später übersichtlich und ohne großen Aufwand pflegbar bleibt. Nicht zuletzt, wenn man später doch noch auf ein anderes Backend portieren möchte, ist die Struktur entscheidend, ob das einfach möglich ist.

Viele Grüße
Andreas
 
Hi andyfau,

immer wieder toll deine ausführlichen Antworten, Danke.
Hat toll geklappt, war ein wenig mühsam alle doppelten Eintrage zu korrigieren aber hat sich rentiert.
Funktioniert jetzt Super !!! .
Eine Frage zur Abfrage von ukulele noch, wenn ich diese Starte werden alle Datensätze richtig Berechnet wie werden, oder kann
ich die Datensätze in der Teile Tabelle Aktualisieren danach ?.
Teile und KDBestellungen stehen in 1:n Beziehung, referentieller integrität und Aktualisierungsweitergabe ist auch angeklickt.
Muss man ein separates Update durchführen ? .

Gruß Andi
 
Datenbankpuristen bevorzugen aus Performancegründen die Verknüpfung von Tabellen über die IDs. Für kleine Datenbanken mit wenigen tausend Sätzen bevorzuge ich die Beziehung der Tabelle über die zusätzlichen Indizes, weil dann immer sofort ersichtlich ist, über welches Feld Tabellen miteinander verknüpft sind.
Das ist etwas unklar scheint mir. Was meinst Du damit?
 
Hallo Andi,
genau das Problem, was wir am Anfang bereits beschrieben haben, taucht nun auf. Die Abfrage überklatscht bei jeder Ausführung das Mengenfeld im Teilestamm. Du sieht, es macht keinen Sinn den Lagerbestand im Stamm abzulegen. Da Du nun die Tabellen in Beziehung gesetzt hast, kannst Du den Bestand über eine Abfrage immer dynamisch berechnen und bist somit bei jeder Bewegungsbuchung automatisch aktuell.

Ändere den Tabellennamen der KDBestellungen in Bewegungen, dann kannst Du da auch alle anderen Bewegungsarten, die Du benötigst, reinschreiben. Damit Du die Bewegungsarten später unterscheiden kannst benötigst Du dafür ein neues Kennzeichenfeld, z.B. BestellungKD, EinkaufLieferant, Rücklieferung an Lieferant, usw. Vorzugsweise solltest Du für die Bewegungsartenbezeichnungen eine eigene Tabelle anlegen um später auf gültige Bewegungsarten zu prüfen.
Über ein Formular, in dem dann in einem Kombinationsfeld bei der Buchung die Bewegungsart ausgewählt werden kann, erfasst Du dann die Bewegungen. Wichtig ist natürlich dass dabei berücksichtigt wird, ob es sich um einen Zugang (+) oder Abgang (-) handelt.

Über eine einfache Abfrage lässt sich dann jederzeit der Bestand pro Artikel/TeileNr ermitteln.

Gehe dazu auf "Erstellen" und wähle Abfrageentwurf. Über rechte Maustaste wählst Du die Tabellen Teile und KDBestellungen(jetzt Bewegungen).
Aufgrund der Beziehung zueinander ist der passende Join durch eine Verbindungslinie vorbelegt. Jetzt wählst Du durch Doppelklick die Felder TeileNummer Bezeichnung aus der Teiletabelle und das Feld Menge aus der Bewegungstabelle.
Dann klickst Du oben im Menü auf das Summenfeld und es eröffnet sich eine weitere Zeile im Abfrageentwurf. Dort steht überall "Gruppierung". Nur in der Spalte "Menge" änderst Du das auf "Summe".
Wenn Du nun die Abfrage ausführst erhälst Du die aktuelle Bestandssumme von jedem Teil.

Das ist natürlich alles erstmal "Quick and Dirty", macht Dich aber langsam mit den Werkzeugen und Möglichkeiten von Access vertraut. Trotzdem, ohne weiteres Grundwissen verhädderst Du dich irgenwann.

Beste Grüße
Andreas
 
Das ist etwas unklar scheint mir. Was meinst Du damit?
Kleiner Test, was?😉Bekannter Maßen sind (Long)Integer und Gleitkommaaktionen schneller ausgeführt als Stringoperationen, was sich besonders bei der Indexsuche auf die Performance auswirkt. Aber in dem Rahmen dieser Fragestellung, mit den wenigen Daten, fällt das nicht ins Gewicht, weshalb "sprechende" Indizes für den Entwickler erstmal transparenter sind. Was nicht heißen soll, dass die Tabellen keine IDs haben sollen.
In der Hoffnung, etwas Klarheit geschaffen zu haben😃
beste Grüße
Andreas
 
Seit Access 2.0 (ca. 1991) bis heute Access 2019 hat sich da tatsächlich einiges getan, wo man sich wundert, was so alles geht. Vor allem bei kleineren Lösungen ist die hohe Integration der Tools ein großer Vorteil. man kann sehr schöne und effektive Anwendungen damit bauen, ohne eigens einen DB-Server aufzusetzen.
 
Hi,
habe mal eine Frage an euch, kann man eigentlich eine in Access entwickeltes Programm auch so
wie in VS 2022 mit einer Anwendung starten als eigenes Programm ohne Access selber zu starten ??

Gruß Andi
 
Auf einem Rechner, der keine Access-Vollversion installiert hat, kann man eine kostenlose Runtimeversion von Access installieren.
Runtime Access 2021

Sie hat jedoch ein paar Einschränkungen , nachzulesen im obingen Link. Wichtigste Einschränkung: Man kann dort nicht debuggen, bzw. mit VBA arbeiten.

Bevor Du Dir jedoch die Arbeit der Installation der Runtime machst kannst Du mit deiner Vollversion testen, ob deine DB unter Runtimebedingungen läuft und ggf. Mängel korrigieren.
Dazu musst Du nur den Aufruf von Access.exe um den Parameter /r ergänzen. Ich lege mir immer eine zusätzliche Verknüpfung auf dem Desktop mit dem passenden Accessaufruf an.

Kleiner Hinweis: Bei Fragen, die abweichend von der Fragestellung in diesem Faden gestellt werden, ist es sinnvoll ein neues Thema zu eröffnen.
Und, ein wenig Eigenrecherche solltest Du auch betreiben. Eine einfache entsprechende Abfrage in BING oder Google liefert tausende von Antworten.
Zwischenablage01.webp

Gruß
Andreas
 
Zuletzt bearbeitet:
Sorry, die Verknüpfung auf dem Desktop muss in ihren Eigenschaften unter "Verknüpfung" auf Deine DB bezogen sein und die Parameterergänzung
lautet: /runtime

zum Beispiel im Feld Ziel: C:\Users\Benutzer\Documents\Verzeichnis_der_DB\DBname.accdbe /runtime
und bei Ausführen in: C:\Users\Benutzer\Documents\Verzeichnis_der_DB
 
Seit Access 2.0 (ca. 1991) bis heute Access 2019 hat sich da tatsächlich einiges getan, wo man sich wundert, was so alles geht. Vor allem bei kleineren Lösungen ist die hohe Integration der Tools ein großer Vorteil. man kann sehr schöne und effektive Anwendungen damit bauen, ohne eigens einen DB-Server aufzusetzen.

Was ein Vorteil, aber auch ein Nachteil ist! -> Schatten IT

Die IT Betreibt eine wundervolle IT Infrastruktur mit Redundanzen, Backup/Restore, Berechtigungen, Professionellen Services,....
Sie weiß aber nichts über eine Elementare Access Anwendung, die dann für das Unternehmen wichtig ist. Dann löscht ein MA ausversehen diese Applikation. Das Unternehmen hat Probleme und die IT kann nicht viel machen.

Wenn man Access nutzen möchte wäre auf jeden Fall zu überlegen, dies nur als Frontend zu nutzen und einen MSSQL Server für die Datenhaltung zu nutzen.
 
OT.
Womit das Access-Bashing lustig weitergeht.

1. Eine Accessdatenbank läßt sich wunderbar in Front- und Backendend aufteilen und das Backend dann, z.B. gegen Löschung, im Netz absichern.
2. Es ist natürlich die elementare Aufgabe der IT zu wissen, was so auf den Clients der User los ist, geschweige denn, unerlaubtes Installieren von Anwendungsprogramen zuzulassen. Unternehmenskritische Anwendungen gehören da nicht hin. Und, das sagte ich bereits mehrfach, dazu sollte Access auch nicht benutzt werden. Da mangelt es an Übersicht in der IT, würde ich sagen.
3. Wenn ich entsprechende Rechte habe, kann ich mir auch einen eigenen Localhost einrichten und dort lustig mit SQL-DBs hantieren.
Das alles hat nun wirklich gar nichts mit Access zu tun.
4. Genau diese Arroganz vieler IT-Leute verhindert, dass gute Ansätze aus den Fachabteilungen nicht oder nur ungenügend an die EDV durchdringen um das Unternehmen mit praxisnahen Lösungen voran zu bringen.
5. Baut jemand im Unternehmen eine schöne Lösung mit Access oder egal womit. Sollte es die Aufgabe der IT sein integrativ tätig zu werden und Nutzen daraus zu ziehen. Denn eins ist klar, Praktiker sind die meisten IT-Leute nicht, das haben 30 J. Erfahrung auf beiden Seiten durchaus gezeigt.

Viele Grüße
Andreas
 
Werbung:
Das war aber nun die letzte Antwort auf eine allgemeine Accessdiskussion, der nichts mit dem Eröffnungthema zu tun hat. Wer weiter mit mir allgemein darüber sprechen möchte kann mir gerne eine PN senden.
Gruß
Andreas
 
Zurück
Oben