Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Werte von Zellen in einer Access- Tabelle berechnen

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Gustav01, 28 März 2017.

  1. Gustav01

    Gustav01 Benutzer

    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.
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. Gustav01

    Gustav01 Benutzer

    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.
     
  4. ukulele

    ukulele Datenbank-Guru

    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
     
  5. Gustav01

    Gustav01 Benutzer

    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
     
  6. ukulele

    ukulele Datenbank-Guru

    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
     
    Walter gefällt das.
  7. Gustav01

    Gustav01 Benutzer

    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
     
  8. ukulele

    ukulele Datenbank-Guru

    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.
     
  9. Gustav01

    Gustav01 Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden