Werte von Zellen in einer Access- Tabelle berechnen

Gustav01

Benutzer
Beiträge
5
Folgendes Problem:

Meine Tabelle hat z.B 3 Spalten und 5 Zeilen.

Erster Schritt:
Jetzt will ich den Wert in der 5- ten Zeile und ersten Spalte mit dem Wert in der 5- ten Zeile und 2- ten Spalte multiplizieren und das Ergebnis in die 5- ten Zeile der 3- ten Spalte schreiben.

Zweiter Schritt:
Danach muss ich das Ergebnis in der 5- ten Zeile und der 3- Spalte mit dem Wert in der 4- ten Zeile und der 2- ten Spalte multiplizieren und das Ergebnis in die 4- te Zeile und die 3- Spalte schreiben.

Danach wiederholt sich der Vorgang wie in Schritt 2 beschrieben, bis die erste Zeile erreicht ist.

Hoffentlich war das jetzt nicht zu kompliziert. Ist aber in Excel leicht zu lösen.

Wie kann ich aber diesen Algorithmus in einer Access- Tabelle programmieren ???

Danke für Eure Hilfe.
 
Werbung:
Du machst Tabellenkalkulation, dafür ist Excel ein gutes Werkzeug. In einer relationalen Datenbank macht man das eher nicht, jedenfalls nicht als Tabellenkalkulation sondern mit gruppieren, summieren, etc.

Das ist in etwa so als ob du eine Pizza mit einem Radlader auslieferst, geht natürlich auch.
 
Danke Ukulete,

der Vergleich mit der Pizza und dem Radlader gefällt mir.
Das dachte ich mir auch schon.
Aber mein Problem ist, dass ich riesige Datenmengen zu verarbeiten habe und möglichst viel in Access erledigen will, bevor ich wieder in Excel exportieren muss.

Das mit dem "Gruppieren und Summieren" in Access kenne ich noch nicht so gut. Bin Neueinsteiger in Access.
Kennst Du eventuell ein Beispiel in dem ich mich wiederfinden kann ?

Danke für Deine Unterstützung.
 
Du hast ja nur eine sehr abstrakte Aufgabe gestellt die so keinen Sinn ergibt. Deine Daten haben ja irgendeinen Zusammenhang und anhand dessen werden sie in eine oder mehrere normalisierte Datenbanktabellen erfasst. Daraus wird dann ein Ergebnis berechnet.
Code:
SELECT spalte,sum(wert) AS summe_wert FROM tabelle GROUP BY spalte
 
Danke für Deine Antwort.

Ich versuche Dir das Problem mal zu beschreiben.

Es geht um einen Produktionsprozess, an dem mehrere Produktionsschritte zu erledigen sind.
Sagen wir mal 5 verschiedene Produktionsschritte.
In jedem Produktionsschritt wird Ausschuß produzierte (also 5 Produktionsschritte mit unterschiedichem prozentualen Ausschuß).
Der prozentuale Ausschuß in jedem Produktionsschritt ist bekannt.
Der Kunde will am Ende der Produktionslinie täglich z.B. 600 gute Produkte erhalten.
Nun ist die Programmierung so einzustellen, dass mein Produktionsleiter weiß, wie viele der Produkte er im ersten Produktionsschritt produzieren muss, um den Ausschuß in den darauf folgenden Produktionsschritten so auffangen kann, das am Ende der Kunde seine 600 guten Teile bekommt.

Wie bereits gesagt. In Excel kein Problem das zu berechnen. Aber die Datenmengen sind zu groß und ändern sich täglich.
Ich habe jetzt in Access ein "Formular" definiert, in dem der Schichtführer seine Daten eingeben kann. Diese Daten müssen dann aber berechnet werden. Das kann der Schichtführer nicht.
Ich weiß zwar wie die Daten berechnet werden müssen, kenne aber den Trick in Access nicht.
Habe auch keine Lust den Datensatz jeden Tag in Excel zu exportieren um ihn berechnen zu lassen.

Wäre schön wenn Dir dazu eine Lösung einfallen würde und würde mir sehr helfen.

Gruß

Gustev01
 
Ich fürchte dafür hast du dir mit Access das falsche Werkzeug ausgesucht. Du könntest aber mit dem Access-Formular auch Daten in einer (richtigen) SQL-Datenbank speichern und dort wären sehr komplexe Berechnungen aller Art möglich. Hier mal ein Beispiel wie ich das in MSSQL angehen würde:
Code:
CREATE TABLE produktionsprozesse(
   id UNIQUEIDENTIFIER NOT NULL,
   name VARCHAR(100) NOT NULL
   );
CREATE TABLE produktionsschritte(
   id UNIQUEIDENTIFIER NOT NULL,
   prozess_id UNIQUEIDENTIFIER NOT NULL,
   name VARCHAR(100) NOT NULL,
   ausschuss NUMERIC(6,4) NOT NULL
   );

INSERT INTO produktionsprozesse VALUES('04C23909-0FEF-4926-B5A1-287AC43750C3','Demo');
INSERT INTO produktionsprozesse VALUES('3C88F097-5282-4CD0-97F4-C5500CA6F7FA','Test');
INSERT INTO produktionsschritte VALUES(newid(),'04C23909-0FEF-4926-B5A1-287AC43750C3','Schritt 1',0.5);
INSERT INTO produktionsschritte VALUES(newid(),'04C23909-0FEF-4926-B5A1-287AC43750C3','Schritt 2',1);
INSERT INTO produktionsschritte VALUES(newid(),'04C23909-0FEF-4926-B5A1-287AC43750C3','Schritt 3',2);
INSERT INTO produktionsschritte VALUES(newid(),'04C23909-0FEF-4926-B5A1-287AC43750C3','Schritt 4',0.1);
INSERT INTO produktionsschritte VALUES(newid(),'04C23909-0FEF-4926-B5A1-287AC43750C3','Schritt 5',0.2);
INSERT INTO produktionsschritte VALUES(newid(),'3C88F097-5282-4CD0-97F4-C5500CA6F7FA','Schritt 1',5.5);
INSERT INTO produktionsschritte VALUES(newid(),'3C88F097-5282-4CD0-97F4-C5500CA6F7FA','Schritt 2',7);

WITH t1(zeile,prozess_id,prozess_name,schritt_id,schritt_name,ausschuss) AS (
SELECT   ROW_NUMBER() OVER (PARTITION BY p.id ORDER BY s.name),
     p.id,
     p.name,
     s.id,
     s.name,
     s.ausschuss
FROM   produktionsprozesse p
LEFT JOIN produktionsschritte s
ON     p.id = s.prozess_id
     ), t2 AS (
SELECT   t1.zeile,
     t1.prozess_id,
     t1.prozess_name,
     t1.schritt_id,
     t1.schritt_name,
     t1.ausschuss,
     cast(100 - t1.ausschuss AS NUMERIC(6,4)) AS verbleibend
FROM   t1
WHERE   t1.zeile = 1
UNION ALL
SELECT   t1.zeile,
     t1.prozess_id,
     t1.prozess_name,
     t1.schritt_id,
     t1.schritt_name,
     t1.ausschuss,
     cast(t2.verbleibend / 100 * (100 - t1.ausschuss) AS NUMERIC(6,4)) AS verbleibend
FROM   t2
INNER JOIN t1
ON     t2.prozess_id = t1.prozess_id
AND     t2.zeile + 1 = t1.zeile
     )
SELECT  t2.prozess_name,
     t2.schritt_name,
     t2.ausschuss,
     t2.verbleibend,
     600 / t2.verbleibend * 100 AS ausgangswert_fuer_zielwert
FROM   t2
ORDER BY t2.prozess_name,t2.schritt_name
Ergebnis
prozess_name schritt_name ausschuss verbleibend ausgangswert_fuer_zielwert
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
Demo Schritt 1 0.5000 99.5000 603.0150700
Demo Schritt 2 1.0000 98.5050 609.1061300
Demo Schritt 3 2.0000 96.5349 621.5368700
Demo Schritt 4 0.1000 96.4384 622.1588000
Demo Schritt 5 0.2000 96.2455 623.4057600
Test Schritt 1 5.5000 94.5000 634.9206300
Test Schritt 2 7.0000 87.8850 682.7103600

(7 Zeile(n) betroffen)
 
Hallo Ukulele,

da hast Du dir ja wirklich richtig Mühe gegeben.
Besten Dank dafür.
Leider muss ich gestehen, dass ich vor langer langer Zeit mal exessiv in Fortran programmiert habe und auch in BASIC. Das war es aber auch schon.
Den Rest (VBA) usw. muss ich mir selbst beibringen.
Deshalb brauche ich erst einmal Zeit um Dein Programm zu verstehen.
Ich versuche mich da einzuarbeiten, um überhaupt mit Dir diskutieren zu können.
Ich melde mich dann wieder.

Jedenfalls nochmals besten Dank für Deine Hilfe.

Gruß
Gustav01
 
Mit VBA ließe sich das vielleicht in Access umsetzen aber das in TSQL zu machen (mein Beispiel ist SQL kein VBA) wäre eleganter. Vielleicht ist MSSQL die bessere Wahl zur Datenhaltung so das Access nur die Formulare mit bringt. Vor allem wenn du von "großen Datenmengen" und häufigen Updates schreibst.

Zu Access kann ich aber leider nicht viel beisteuern, mache Dinge gehen da einfach nicht in SQL Code.
 
Werbung:
Danke Ukulele,
ich glaube ich versuche das jetzt mal in VBA da ich schon sehr viele Daten in Exceldateien und Access Dateien miteinander "verwurschteln" und berechnen muss. Leider ist Excel immer noch das Programm, das die meisten Schichtführer im "Shop- Floor" bedienen können.
Die verstehen aber nicht, das die Datenflut die sie erzeugen von Excel allein nicht verarbeitet werden kann. Deshalb zunächst mein Versuch mit Access. Aber ich fürchte schon jetzt, das es besser wäre auf professionellere Datenbanken wie SQL umzusteigen. Deshalb werde ich auch in dieser Richtung weiter aktiv sein.

Werde jedenfalls meine Ergebnisse im Forum weiter diskutieren und dokumentieren.

Gruß
Gustav01
 
Zurück
Oben