Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
RobertG
Beiträge: 1932
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Sa 19. Jan 2019, 16:41

Hallo Marcel,

hier die Abfrage, die nach den Baugruppen die Summen bildet:

Code: Alles auswählen

SELECT "ID_Baugruppe", "ID_Komponente", "Bauteil Anzahl", 
( SELECT "Bruttopreis" FROM "Komponenten" WHERE "ID" = "a"."ID_Komponente" ) AS "Brutto", 
"Bauteil Anzahl" * ( SELECT "Bruttopreis" FROM "Komponenten" WHERE "ID" = "a"."ID_Komponente" ) AS "Bruttopreis gesamt", 
(SELECT SUM("rel_Komponenten"."Bauteil Anzahl" * "Komponenten"."Bruttopreis") 
FROM "rel_Komponenten", "Komponenten" 
WHERE "Komponenten"."ID" = "rel_Komponenten"."ID_Komponente" 
AND "rel_Komponenten"."ID_Baugruppe" = "a"."ID_Baugruppe") AS "Summe_Baugruppe" 
FROM "rel_Komponenten" AS "a"
Ich hoffe, dass es das ist, was Du dachtest.

Gruß

Robert

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Sa 19. Jan 2019, 19:55

Hallo Robert,
genauso habe ich mir das gedacht.
Jetzt müssten "nur" noch die Summen für die Hauptbaugruppen in das Hauptformular Zuordnungen_Komponenten_Grd_List unter Baugruppe Kosten eingefügt werden. In der Abfrage taucht ja mehrmals die Summe für eine Hauptbaugruppe auf. Es könnte jeweils die zum ersten mal auftrende Summe übertragen werden. Nur wie drücke ich das in SQL aus?

Ich wünsche noch ein schönes Wochenende.
Dateianhänge
RMC Database.zip
(87.6 KiB) 13-mal heruntergeladen

RobertG
Beiträge: 1932
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Sa 19. Jan 2019, 21:13

Hallo Marcel,

die Beträge berechnest Du doch in Abhängigkeit von den Informationen des Unterformulars, oder sehe ich das falsch. Dann kannst Du die Informationen nicht im Hauptformular aktuell darstellen. Du müsstest ja jedes Mal, wenn Du einen Datensatz im Unterformular erstellst, das Hauptformular aktualisieren und dazu noch auf den vorhergehenden Datensatz des Hauptformulars springen.

Die Darstellung macht also in dem Hauptformular nur Sinn, wenn Du mit der Eingabe fertig bist.

Gruß

Robert

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Sa 19. Jan 2019, 21:34

Deswegen hatte ich ursprünglich die Schaltfläche Berechnen über dem Subformular , damit erst nach Auswahl der Komponenten der Gesamtpreis der Hauptgruppe aktualisiert wird.

RobertG
Beiträge: 1932
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » So 20. Jan 2019, 09:34

Hallo Marcel,

Du müsstest diesen Button wieder einfügen, allerdings nicht im Hauptformular sondern ein einem gesonderten Formular, das nur die Baugruppen und die Gesamtbeträge darstellt und nicht zur Eingabe gedacht ist. Dann bekommst Du auch keine Sprünge in dem Eingabeformular, wenn Du eine andere Baugruppe wählst um dort im Unterformular Eingaben zu machen.

Gruß

Robert

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Mo 21. Jan 2019, 09:36

Hallo Robert,

wie müsste die Abfrage aussehen, so dass jeder Hauptbaugruppe nur einmal die Summe der Komponenten gegenübersteht. Gibt es die Möglichkeit die ID_Baugruppe über eine Zählschleife zu iterieren und dann die zugehörigen Komponenten über eine Selektion also z.B. WHERE "rel_Komponenten"."ID_Baugruppe" = zähler aus der Tabelle rel_Komponenten zu summieren? Wird irgendwo die Anzahl der Hauptbaugruppen hinterlegt oder kann man sich ein Maximum für ID_Baugruppe bestimmen lassen, welches dann als Oberwert für zähler der Zählschleife gesetzt wird?
Vielen Dank für Deinen Einsatz selbst noch am Wochenende.
Gruß

Marcel

RobertG
Beiträge: 1932
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Mo 21. Jan 2019, 17:27

Hallo Marcel,

so etwas wie

Code: Alles auswählen

SELECT "rel_Komponenten"."ID_Baugruppe", SUM("rel_Komponenten"."Bauteil Anzahl" * "Komponenten"."Bruttopreis") 
FROM "rel_Komponenten", "Komponenten" 
WHERE "Komponenten"."ID" = "rel_Komponenten"."ID_Komponente" 
GROUP BY  "rel_Komponenten"."ID_Baugruppe"
Ist jetzt auf die ID der Baugruppe bezogen.

Gruß

Robert

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Mo 21. Jan 2019, 20:20

Hallo Robert,
ich habe versucht noch Baugruppen ID und Namen aus der Tabelle Baugruppen als Spalte in der Abfrage zu ergänzen mit

Code: Alles auswählen

SELECT "rel_Komponenten"."ID_Baugruppe", SUM( "rel_Komponenten"."Bauteil Anzahl" * "Komponenten"."Bruttopreis" ), "Baugruppen"."Baugruppe ID", "Baugruppen"."Baugruppe Name" FROM "Komponenten", "rel_Komponenten", "Baugruppen" WHERE "Komponenten"."ID" = "rel_Komponenten"."ID_Komponente" AND "rel_Komponenten"."ID_Baugruppe" = "Baugruppen"."ID" GROUP BY "rel_Komponenten"."ID_Baugruppe"
Jetzt erhalte ich die Fehlermeldung Not in aggregate function or group by clause. Müssen jetzt Baugruppe ID und Baugruppe Name auch zur Gruppe hinzugefügt werden?

Gruß

Marcel

RobertG
Beiträge: 1932
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Mo 21. Jan 2019, 21:03

Hallo Marcel,

wenn Du bei einer Funktion wie der SUMME ein anderes Feld dazu schreibst, dann muss die Summe in Abhängigkeit von dem Feld berechnet werden. Jedes Feld, das Du zusätzlich einbringst, gehört also in die GROUP BY-Formulierung.

Code: Alles auswählen

SELECT "rel_Komponenten"."ID_Baugruppe", 
SUM( "rel_Komponenten"."Bauteil Anzahl" * "Komponenten"."Bruttopreis" ), 
"Baugruppen"."Baugruppe ID", "Baugruppen"."Baugruppe Name" 
FROM "Komponenten", "rel_Komponenten", "Baugruppen" 
WHERE "Komponenten"."ID" = "rel_Komponenten"."ID_Komponente" AND "rel_Komponenten"."ID_Baugruppe" = "Baugruppen"."ID" 
GROUP BY "rel_Komponenten"."ID_Baugruppe",  "Baugruppen"."Baugruppe ID", "Baugruppen"."Baugruppe Name"
... wobei hier doch die Baugruppen-ID doppelt vorkommt, oder? Zuerst in der Tabelle "rel_Komponenten" und dann in der Tabelle "Baugruppen".

Gruß

Robert

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Finale Version Baugruppen Datenbank

Beitrag von marcel00 » Di 22. Jan 2019, 11:41

Hallo Robert,

die Bezeichnung ID_Baugruppe in rel_Komponenten ist unglücklich gewählt. Sie stellt lediglich den Foreign key (Integer)zur Verknüpfung zwischen Komponenten und Baugruppen dar, während Baugruppe ID in Baugruppen die Kurzbezeichnung der Baugruppe(Text) angibt. Jetzt klappt alles so wie erhofft. Ich habe die finale Version der Datenbank angehängt. Vielleicht braucht jemand sowas ähnliches.

Danke Robert
Dateianhänge
Baugruppen Datenbank.zip
(87.49 KiB) 15-mal heruntergeladen

Antworten