PDA

Vollständige Version anzeigen : Berechnung


Mathias Spieker
31.12.2001, 19:08
Habe eine Abfrage erstellt die mir aus einer
Tabelle ( Lieferungen ) folgend Parameter ausgibt.

Firma, Artikelnummer, Artikelbeschreibung,Bestellmenge,Liefermenge,Bestelldatum,Lieferzeit und die Fehlmenge.

Möchte nun, das bei vorhandener Fehlmenge ( Bestellmenge -Liefermenge ),das Abfrageergebnis in
eine Tabelle ( Bestellungen ) geschrieben wird und dabei nur die Fehlmenge als Bestellmenge gesetzt wird.

Habt Ihr eine Idee ?
Mathias

Alexander Jan Peters
31.12.2001, 19:49
<font face="Tahoma">
Hallo Mathias,

ist das nicht einfach eine Anfügeabfrage? Deine Abfrage in eine solche umwandeln, das Ergebnis in die Tabelle Bestellungen schreiben lassen, Wenn-Bedingung im Feld Fehlmenge > 0 o.ä.

Gruß
A.J. Peters</font>.

Mathias Spieker
31.12.2001, 20:17
Hallo Alexander

Wenn ich den kompletten Datensatz anfügen möchte
ist das vollkommen richtig, habe jetzt nur das Problem, das wenn in der Bestellung die Bestellmenge zu z.B: 24 war, wird mir der Datensatz auch wieder mit Bestellmenge 24 abgespeichert.

Ich suche aber die Funktion, die mir erlaubt
eine Anfügeanfrage zuerstellen mit der Differenz
aus Bestellmenge(24)-Liefermenge(20)=Fehlmenge(4)

Und eben diese Fehlmenge (4) soll halt in der Tabelle Bestellungen unter dem Feld Bestellmenge abgespeichert werden. Und nicht die im aktuellen
Datensatz stehende (24).

Hier liegt mein eigendliches Problem.

Danke Mathias

Alexander Jan Peters
31.12.2001, 20:26
<font face="tahoma">Ich wünsche erst einmal einen guten Rutsch...

und um noch einmal auf Deine Frage zurückzukommen, das stellt kein Problem dar:

1) Du hat eine Abfrage, die alle benötigten (und noch mehr) Felder für ein Anfügen in der Tabelle Bestellungen enthält.

2) Im Abfrageeditor (SQL-Kenntnisse sind dabei eigentlich nicht nötig) änderst Du den Typ der Abfrage in Anfügeabfrage um, die Daten sind an die Tabelle Bestellungen anzuhängen.

3) Die Felder Bestell- und Liefermenge der Abfrage werden nicht angefügt, sondern das Feld Fehlmenge wird in Bestellmenge geschrieben (im Editor: Anfügen an).

Gruß
A.J. Peters
</font>

Mathias Spieker
31.12.2001, 20:53
Hallo Alexander

Wünsche auch einen guten Rutsch.
Glaube jetzt habe ich es verstanden, werde es gleich ausprobieren.

Danke Mathias

Mathias Spieker
31.12.2001, 21:08
Hallo Alexander,

ich hab`s verstanden, es klappt.


Guten Rutsch

Alexander Jan Peters
31.12.2001, 21:15
<font face="Tahoma">Hallo,

bevor ich es vergesse, Du wirst noch einige Probleme mit eventuell doppelten DS bekommen, da bei dieser Variante keinerlei inhaltliche Prüfung stattfindet ! Eine Lösung wäre hier sicher der Umweg über VBA zur Prüfung, ob der DS bereits vorhanden ist, um dann Schritte wie Anfügen oder abändern einzuleiten.
Eine weitere Anmerkung zum Design der Tabelle Lieferungen, das Feld Fehlmenge ist nicht wirklich nötig und entspricht auch nicht den Normalformen, da es vollständig von den beiden Feldern abhängig ist aus denen es berechnet wird - Du könntest darauf verzichten und stattdessen die Berechnung per Funktion oder Ausdruck in der Abfrage durchführen.

Jetzt aber endgültig guten Rutsch <img src="graemlins/kasperl.gif" border="0" alt="[Kaslperl]" />

A.J. Peters
</font>

Mathias Spieker
01.01.2002, 09:10
Frohes neues Jahr,

Habe schon so meine Last mit Access, fragt sich ob ich dann eine VBA-Programierung schaffe.

Mathias

Mathias Spieker
01.01.2002, 18:10
hallo,

habe mich an VBA herangetraut,schaffe es aber noch nicht die Anweisung so zu schreiben, das mir nur die Datensätze an eine Tabelle angefügt werden, die neu sind. Bzw. das Kriterium Bestelldatum noch nicht in der Tabelle vorhanden ist, in der die Datensätze angefügt werden sollen.

Bin auf eure Ideen gespannt

Mathias

Alexander Jan Peters
01.01.2002, 19:18
<font face="Tahoma">Hallo Mathias,

erst einmal ein schönes neues Jahr.

Folgende Abfrage ermittelt alle DS aus der Tabelle Lieferungen, deren Bestelldatum nicht in der Tabelle Bestellungen vorhanden ist und zeigt nur das Feld Bestelldatum des DS an:</font>
<font face="Courier New">
SELECT Lieferungen.Bestelldatum
FROM Lieferungen LEFT JOIN Bestellungen ON Lieferungen.Bestelldatum = Bestellungen.Bestelldatum
WHERE (((Bestellungen.Bestelldatum) Is Null));
</font><font face="Tahoma">
Damit wäre (ohne VBA !) einer der wichtigsten Schritte erledigt, wir wissen, daß in dieser Menge nur DS enthalten sind, die problemlos angefügt werden können.
Wenn wir diese Abfrage nun als Unterabfrage in Deine bereits vorhandene Anfügeabfrage einbinden, haben wir als Ergebnis das Einfügen aller DS mit Fehlmenge aus der Tabelle Lieferungen, die nicht in (Kriterium: Bestelldatum) der Tabelle Bestellungen vorhanden waren.
Das Einbauen der Unterabfrage wird einfach im Abfrageditor gemacht. Dazu wird der Code der o.g. Abfrage als sogenannte Unterabfrage gekennzeichnet einfach in die Zeile Kriterien des Feldes Bestelldatum eingetragen:
</font><font face="Courier New">
IN(SELECT Lieferungen.Bestelldatum
FROM Lieferungen LEFT JOIN Bestellungen ON Lieferungen.Bestelldatum = Bestellungen.Bestelldatum
WHERE (((Bestellungen.Bestelldatum) Is Null)))
</font><font face="Tahoma">
Fertig.
Damit hättest Du das Problem von doppelten DS gelöst.
Das zweite Problem sind jetzt Lieferungen, die in mehr als zwei Teilmengen eintreffen, da in einem solchen Fall kein Update stattfindet. Um dies zu verhindern brauchen wir eigentlich auch kein VBA (nehmen kann man es sicher immer, aber SQL ist schneller), stattdessen erstellen wir eine Kopie Deiner allerersten Abfrage, die Posten mit Fehlmenge ermittelt und filtern die heraus, die bereits vorhanden sind.Unterabfrage im Feld Bestelldatum:
</font><font face="Courier New">
IN(SELECT Bestellungen.Bestelldatum FROM Bestellungen)
</font><font face="Tahoma">
Diese Abfrage solltest Du einfach in eine Aktualisierungabfrage umwandeln und damit ist auch diese Frage gelöst, alle betroffenen DS der Tabelle Bestellunge werden nämlich einfach mit den neuen Daten überschrieben.
Ich bin bei meinem Vorschlag allerdings von folgender Annahme ausgegangen, falls diese nicht zutrefft...
Zu jeder Bestellung gibt es in der Tabelle Lieferungen nur einen DS, d.h. wenn eine Teillieferung ankommt, wird die gelieferte Menge im DS addiert und kein neuer DS mit dem gleichen Bestelldatum aber abweichendem Lieferdatum angelegt.

Ich hoffe die Anwort hilft und war nicht zu lang

Gruß

A.J. Peters</font>

Mathias Spieker
01.01.2002, 19:38
Hallo Alexander,
danke erstmal für deine ausführliche Antwort, hilft mir schon weiter. Leider ist deine Annahme nicht richtig, da ich kein profi bin.

Erscheinen halt die Datensätze in der Tabelle bei einer Lieferung dopplet und werden bei nachfolgender Teillieferung nicht adiert.

Ich brauche halt für meine Statistik eben die Lieferzeit für den jeweiligen Artikel. Und eine andere Lösung als wie jedesmal den kompletten DS anzufügen ist mir nicht eingefallen.
Es gibt bestimmt bessere Lösungen.

Gruß Mathias