🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Erstellung einer laufenden Inventurdatenbank

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
phaeton616
Beiträge: 15
Registriert: Mi 16. Jan 2013, 20:23

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von phaeton616 » Di 2. Apr 2013, 21:08

Verstehen kann man es noch nicht nennen, aber ich bin dran die sache zu durchsteigen.
Ich wollte grade die Suchfunktion um eine Suchoption erweitern, aber da scheine ich an die Grenzen von Base zu kommen: zum einen habe ich nur 4 möglichkeiten eine Verknüpfung anzugeben, zum anderen kann ich die Matrix welche du in der Abfrage erstellt hast und alle möglichen Abfragekonstellationen kombiniert hast (...hast du das manuell gemacht, oder ist das das Resultat aus der Definition der Verknüpfungen?) nicht mehr erweitern weil mir nach unten der platz ausgeht.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von F3K Total » Di 2. Apr 2013, 21:35

Hi,
phaeton616 hat geschrieben: aber da scheine ich an die Grenzen von Base zu kommen
Kann ich nicht sagen, man kann die verknüpften Felder auch einfach eintippen.
new.png
new.png (4.47 KiB) 3819 mal betrachtet
Versuch macht kluch.
phaeton616 hat geschrieben:hast du das manuell gemacht, oder ist das das Resultat aus der Definition der Verknüpfungen?
Ich habe das SQL-Statement in der SQL-Ansicht getippt, dann sieht es nicht so schlimm aus und man kann es verstehen:

Code: Alles auswählen

SELECT "ID", "LfdNr.", "Material", "Formber.Typ", "Dichte", "L", "B", "H", 
      ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H" 
             WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H" 
             WHEN "Formber.Typ" = 'Gewindestange' THEN "L" * "L" / 4 * PI( ) * "H" 
             ELSE 0 
             END ) / 1000000.00 AS "Volumen", 
      ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H" 
             WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H" 
             WHEN "Formber.Typ" = 'Gewindestange' THEN "L" * "L" / 4 * PI( ) * "H" 
             ELSE 0 
             END ) * "Dichte" / 1000000000.00 AS "Gewicht" 
FROM "Teileliste" 
WHERE ( UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) OR :m IS NULL ) AND 
      ( "H" >= :h OR :h IS NULL ) AND 
      ( "B" >= :b OR :b IS NULL ) AND 
      ( "L" >= :l OR :l IS NULL )
Gruß R

EDIT: Wenn Du die Abfrage einmal mit der GUI geöffnet hast, wird sie von Base quasi unleserlich erweitert, nicht machen!

Code: Alles auswählen

SELECT "ID", "LfdNr.", "Material", "Formber.Typ", "Dichte", "L", "B", "H", ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H" WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H" WHEN "Formber.Typ" = 'Gewindestange' THEN "L" * "L" / 4 * PI( ) * "H" ELSE 0 END ) / 1000000.00 AS "Volumen", ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H" WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H" WHEN "Formber.Typ" = 'Gewindestange' THEN "L" * "L" / 4 * PI( ) * "H" ELSE 0 END ) * "Dichte" / 1000000000.00 AS "Gewicht" FROM "Teileliste" WHERE ( "L" >= :l AND "B" >= :b AND "H" >= :h AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) OR "L" >= :l AND "B" >= :b AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :h IS NULL OR "L" >= :l AND "H" >= :h AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :b IS NULL OR "L" >= :l AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :h IS NULL AND :b IS NULL OR "B" >= :b AND "H" >= :h AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :l IS NULL OR "B" >= :b AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :h IS NULL AND :l IS NULL OR "H" >= :h AND UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :b IS NULL AND :l IS NULL OR UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) AND :h IS NULL AND :b IS NULL AND :l IS NULL OR "L" >= :l AND "B" >= :b AND "H" >= :h AND :m IS NULL OR "L" >= :l AND "B" >= :b AND :h IS NULL AND :m IS NULL OR "L" >= :l AND "H" >= :h AND :b IS NULL AND :m IS NULL OR "L" >= :l AND :h IS NULL AND :b IS NULL AND :m IS NULL OR "B" >= :b AND "H" >= :h AND :l IS NULL AND :m IS NULL OR "B" >= :b AND :h IS NULL AND :l IS NULL AND :m IS NULL OR "H" >= :h AND :b IS NULL AND :l IS NULL AND :m IS NULL OR :h IS NULL AND :b IS NULL AND :l IS NULL AND :m IS NULL )
Windows 11: AOO, LO Linux Mint: AOO, LO

phaeton616
Beiträge: 15
Registriert: Mi 16. Jan 2013, 20:23

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von phaeton616 » Mi 3. Apr 2013, 09:29

Ahhh! :idea:
Und ich dachte schon ich muss mir einen 32 Zoll Monitor kaufen, damit ich die Volumen und Dichteberechnungsformel darstellen kann. :D
Das Macht Die Sache deutlich übersichtlicher! Danke nochmals!

Kann ich eigentlich in den Formeln zur berechnung auch klammern setzen? Via GUI hatte ich da probleme, meldete mir ein unerwartetes Zeichen in der Formel, oder einen Fehler in der Klammernfolge.

Sehe ich das Richtig, dass der UPPER Befehl die beziehungen zwischen den Werten herstellt?

EDIT: auch in sql beomme ich einen syntaxfehler wenn ich die Formel zur Volumenberechnung der gewindestangen anpasse

Code: Alles auswählen

    SELECT "ID", "LfdNr.", "Werkstoffeigenschaften"."Material", "Mateial", "Formber.Typ", "Dichte", "L", "B", "H", "Werkstoffeigenschaften"."Material"
          ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H"
                 WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H"
                 WHEN "Formber.Typ" = 'Gewindestange' THEN 
		 CASE WHEN "L" <= 1.2 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) * "H" - PI( ) * POWER("L" / 2 -  POWER(0.25,2) - POWER(0.25 / 2,2)) * "H"
		 	  WHEN "L" = 1.4  THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 -  POWER(0.3,2) - POWER(0.3 / 2,2)) * "H"
		      WHEN "L" > 1.4 AND <= 1.8 THEN PI( ) * POWER("L" / 2,2) * "H"  + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 -  POWER(0.35,2) - POWER(0.35 / 2,2)) * "H"
		 	  WHEN "L" = 2  THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 -  POWER(0.4,2) - POWER(0.4 / 2,2)) * "H"
			  WHEN "L" > 2 AND <= 2.5 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.45,2) - POWER(0.45 / 2,2)) * "H"
			  WHEN "L" > 2.5 AND <= 3 THEN PI( ) * POWER("L",2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.5,2) - POWER(0.5 / 2,2)) * "H"
			  WHEN "L" = 3.5 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.6,2) - POWER(0.6 / 2,2)) * "H"
			  WHEN "L" = 4 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.7,2) - POWER(0.7 / 2,2)) * "H"
			  WHEN "L" = 5 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.8,2) - POWER(0.8 / 2,2)) * "H"
			  WHEN "L" = 6 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1,2) - POWER(1.2 / 2,2)) * "H"
			  WHEN "L" = 8 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1.25,2) - POWER(1.25 / 2,2)) * "H"
			  WHEN "L" = 10 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1.5,2) - POWER(1.5 / 2,2)) * "H"
			  WHEN "L" = 12 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1.75,2) - POWER(1.75 / 2,2)) * "H"
			  WHEN "L" = 14 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2,2) - POWER(2 / 2,2)) * "H"
			  WHEN "L" = 16 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2,2) - POWER(2 / 2,2)) * "H"
			  WHEN "L" = 18 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2.5,2) - POWER(2.5 / 2,2)) * "H"
			  WHEN "L" = 20 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2.5,2) - POWER(2.5 / 2,2)) * "H"
			  WHEN "L" = 22 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2.5,2) - POWER(2.5 / 2,2)) * "H"
			  WHEN "L" = 24 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(3,2) - POWER(3 / 2,2)) * "H"
			  WHEN "L" = 27 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(3,2) - POWER(3 / 2,2)) * "H"
			  WHEN "L" = 30 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(3.5,2) - POWER(3.5 / 2,2)) * "H"
			  WHEN "L" = 36 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(4,2) - POWER(4 / 2,2)) * "H"
			  WHEN "L" = 42 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(4.5,2) - POWER(4.5 / 2,2)) * "H"
			  WHEN "L" = 48 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(5,2) - POWER(5 / 2,2)) * "H"
			  WHEN "L" = 56 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(5.5,2) - POWER(5.5 / 2,2)) * "H"
			  WHEN "L" = 64 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(6,2) - POWER(6 / 2,2)) * "H"
			 ELSE 0
				 END 
				 WHEN "Fromber.Typ" = 'Rohr' THEN POWER("L" / 2,2) ^ 2 * "H" - POWER("B" /2,2) * "H"
				 WHEN "Formber.Typ" = '3-Eck' THEN "L" * "B" * "H" / 2
				 WHEN "Formber.Typ" = '4-Kant-Rohr-symm' THEN POWER("L",2) * "H" - POWER("B",2) * "H"
				 WHEN "Formber.Typ" = '6-Kant' THEN POWER("L" / SQRT(3),2) * 3 / 2 * SQRT(3)
                 ELSE 0
                 END ) / 1000000.00 AS "Volumen",
          ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H"
                 WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H"
                 WHEN "Formber.Typ" = 'Gewindestange' THEN 
		 CASE WHEN "L" <= 1.2 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) * "H" - PI( ) * POWER("L" / 2 -  POWER(0.25,2) - POWER(0.25 / 2,2)) * "H"
		 	  WHEN "L" = 1.4  THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 -  POWER(0.3,2) - POWER(0.3 / 2,2)) * "H"
		      WHEN "L" > 1.4 AND <= 1.8 THEN PI( ) * POWER("L" / 2,2) * "H"  + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 -  POWER(0.35,2) - POWER(0.35 / 2,2)) * "H"
		 	  WHEN "L" = 2  THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 -  POWER(0.4,2) - POWER(0.4 / 2,2)) * "H"
			  WHEN "L" > 2 AND <= 2.5 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.45,2) - POWER(0.45 / 2,2)) * "H"
			  WHEN "L" > 2.5 AND <= 3 THEN PI( ) * POWER("L",2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.5,2) - POWER(0.5 / 2,2)) * "H"
			  WHEN "L" = 3.5 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.6,2) - POWER(0.6 / 2,2)) * "H"
			  WHEN "L" = 4 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.7,2) - POWER(0.7 / 2,2)) * "H"
			  WHEN "L" = 5 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(0.8,2) - POWER(0.8 / 2,2)) * "H"
			  WHEN "L" = 6 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1,2) - POWER(1.2 / 2,2)) * "H"
			  WHEN "L" = 8 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1.25,2) - POWER(1.25 / 2,2)) * "H"
			  WHEN "L" = 10 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1.5,2) - POWER(1.5 / 2,2)) * "H"
			  WHEN "L" = 12 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(1.75,2) - POWER(1.75 / 2,2)) * "H"
			  WHEN "L" = 14 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2,2) - POWER(2 / 2,2)) * "H"
			  WHEN "L" = 16 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2,2) - POWER(2 / 2,2)) * "H"
			  WHEN "L" = 18 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2.5,2) - POWER(2.5 / 2,2)) * "H"
			  WHEN "L" = 20 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2.5,2) - POWER(2.5 / 2,2)) * "H"
			  WHEN "L" = 22 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(2.5,2) - POWER(2.5 / 2,2)) * "H"
			  WHEN "L" = 24 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(3,2) - POWER(3 / 2,2)) * "H"
			  WHEN "L" = 27 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(3,2) - POWER(3 / 2,2)) * "H"
			  WHEN "L" = 30 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(3.5,2) - POWER(3.5 / 2,2)) * "H"
			  WHEN "L" = 36 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(4,2) - POWER(4 / 2,2)) * "H"
			  WHEN "L" = 42 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(4.5,2) - POWER(4.5 / 2,2)) * "H"
			  WHEN "L" = 48 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(5,2) - POWER(5 / 2,2)) * "H"
			  WHEN "L" = 56 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(5.5,2) - POWER(5.5 / 2,2)) * "H"
			  WHEN "L" = 64 THEN PI( ) * POWER("L" / 2,2) * "H" + PI( ) * POWER("L" / 2,2) - PI( ) * POWER("L" / 2 - POWER(6,2) - POWER(6 / 2,2)) * "H"
			 ELSE 0
				 END 
				 WHEN "Fromber.Typ" = 'Rohr' THEN ("L" / 2) ^ 2 * "H" - ("B" / 2) * "H"
				 WHEN "Formber.Typ" = '3-Eck' THEN "L" * "B" * "H" / 2
				 WHEN "Formber.Typ" = '4-Kant-Rohr-symm' THEN POWER("L",2) * "H" - POWER("B",2) * "H"
 				 WHEN "Formber.Typ" = '6-Kant' THEN POWER("L" / SQRT(3),2) * 3 / 2 * SQRT(3)				
                 ELSE 0
                 END ) * "Dichte" / 1000000000.00 AS "Gewicht"
    FROM "Teileliste"
    WHERE ( UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) OR :m IS NULL ) AND
          ( "H" >= :h OR :h IS NULL ) AND
          ( "B" >= :b OR :b IS NULL ) AND
          ( "L" >= :l OR :l IS NULL )
Zur erläuterung: Es wird zuerst der Außendurchmesser des Gewindes zur Volumenberechnung herangezogen, danach wird auf Grundlage der Gewindesteigung welche bei einem Gewinde nach ISO-Norm (60°-Winkeln zu den Flanken der Gewindefurche) un vorgegeben ist die Tiefe der Gewindefurche mittels pythagoras errechnet, und die Hälfte der Volumendifferenz zwischen außen und innendurchmesser vom Volumen bezogen auf den Außendurchmesser abgezogen. Ergibt, dann das tatsächliche Volumen der Gewindestange.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von F3K Total » Mi 3. Apr 2013, 21:10

Hallo,
nachdem ich mir wirklich das Hirn ausgequetscht habe, bin ich auf folgende Formel zu Berechnung eines Ersatzdurchmessers kommen:
EDIT: Die gestern hier eingestellte Formel hatte einen Fehler, richtig ist:
DErsatz.png
DErsatz.png (1.61 KiB) 3797 mal betrachtet
Er wird aus Steigung P und Aussendurchmesser D errechnet und bildet den gewichtsreduzierenden Einfluß des Gewindes, wie du schon geschrieben hast, ab, hier die Herleitung:
DErsatzH.png
DErsatzH.png (10.41 KiB) 3769 mal betrachtet
phaeton616 hat geschrieben:... die Hälfte der Volumendifferenz zwischen außen und innendurchmesser vom Volumen bezogen auf den Außendurchmesser abgezogen.
D.h. wenn man ihn berechnet kann man mit der normalen Formel zur Bestimmung des Volumens eines Kreiszylinders weiterrechnen.

V = A * H mit A = PI * D²/4

wobei hier der Ersatzdurchmesser für D eingetragen wird.
Soweit so gut. Jetzt zur Umsetzung in der Datenbank.
  • Ich habe eine weitere Tabelle "Gewindedefinition" mit den Spalten D und P angelegt.
  • Dort steht für jeden möglichen Durchmesser eine Zeile mit Durchmesser und Steigung.
  • In meiner Ursprünglichen Abfrage stand zweimal:

    Code: Alles auswählen

    WHEN "Formber.Typ" = 'Gewindestange' THEN "L" * "L" / 4 * PI( ) * "H" 
    zu Berechnung des Volumens.
  • Ersetze ich diese

    Code: Alles auswählen

    "L" * "L" 
    nun durch (korrigiert, Wurzel und Quardrat heben sich auf)

    Code: Alles auswählen

    ( SELECT POWER( "D", 2 ) - SQRT( 3.0 ) * "D" * "P" + 3.0/2.0 * POWER( "P", 2 ) FROM "Gewindedefinition" WHERE "D" = "L" ) 
    was der quadrierten oben angegebenen Formel
    DErsatz².png
    DErsatz².png (1.42 KiB) 3797 mal betrachtet
    entspricht, werden sowohl das Volumen als auch das Gewicht richtig berechnet.
Zapp!
Hier nochmal die gesamte korrigierte Abfrage. Habe noch ein IFNULL eingefügt, weil sonst die Gewindestangen nicht angezeigt wurden, da B hier null ist.

Code: Alles auswählen

SELECT "ID", "LfdNr.", "Material", "Formber.Typ", "Dichte", "L", ifnull( "B", 0 ) AS "B", "H", 
( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H" 
       WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H" 
       WHEN "Formber.Typ" = 'Gewindestange' THEN  ( SELECT POWER( "D", 2 ) - SQRT( 3.0 ) * "D" * "P" + 3.0/2.0 * POWER( "P", 2 ) FROM "Gewindedefinition" WHERE "D" = "L" ) / 4 * PI( ) * "H" 
   ELSE 0 
   END ) / 1000000.00 AS "Volumen", 
( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H" 
       WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H" 
       WHEN "Formber.Typ" = 'Gewindestange' THEN  ( SELECT POWER( "D", 2 ) - SQRT( 3.0 ) * "D" * "P" + 3.0/2.0 * POWER( "P", 2 ) FROM "Gewindedefinition" WHERE "D" = "L" ) / 4 * PI( ) * "H" 
  ELSE 0 
  END ) * "Dichte" / 1000000000.00 AS "Gewicht" 
FROM "Teileliste" 
WHERE 
( UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) OR :m IS NULL ) AND 
( "H" >= :h OR :h IS NULL ) AND 
( "B" >= :b OR :b IS NULL ) AND 
( "L" >= :l OR :l IS NULL )
Und zum Schluß:

Code: Alles auswählen

UPPER
macht aus Manfred MANFRED während

Code: Alles auswählen

LOWER
aus USA usa macht.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

phaeton616
Beiträge: 15
Registriert: Mi 16. Jan 2013, 20:23

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von phaeton616 » So 7. Apr 2013, 15:58

Vielen Dank! Jetzt versteh ich auch wie man Werte aus anderen Tabellen abgleich mit FROM WHERE.

Ich zerbrech mir grad wieder den Kopf: Kaum füge ich was eigenes dazu hab ich schon wieder nen fehler, das frustriert mich total!
Dabei versteh ich nicht was an der Ergänzung um die Zeilen:

Code: Alles auswählen

            WHEN "Fromber.Typ" = 'Rohr' THEN PI( ) * POWER( "L" / 2.0 , 2) * "H" - PI( ) * POWER( "B" / 2.0 , 2) * "H"
           WHEN "Formber.Typ" = '3-Eck' THEN "L" * "B" * "H" / 2
           WHEN "Formber.Typ" = '4-Kant-Rohr-symm' THEN POWER( "L" , 2 ) * "H" - POWER( "B" , 2 ) * "H"
           WHEN "Formber.Typ" = '6-Kant' THEN POWER( "L" / SQRT( 3.0 ) , 2 ) * 3 / 2 * SQRT( 3.0 )     
falsch sein soll!?

Im Ganzen sieht das nun so aus:

Code: Alles auswählen

    SELECT "ID", "LfdNr.", "Material", "Formber.Typ", "Dichte", "L", ifnull( "B", 0 ) AS "B", "H",
    ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H"
           WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H"
           WHEN "Formber.Typ" = 'Gewindestange' THEN  ( SELECT POWER( "D", 2 ) - SQRT( 3.0 ) * "D" * "P" + 3.0/2.0 * POWER( "P", 2 ) FROM "ISO-Normgewinde" WHERE "D" = "L" ) / 4 * PI( ) * "H"
           WHEN "Fromber.Typ" = 'Rohr' THEN PI( ) * POWER( "L" / 2.0 , 2) * "H" - PI( ) * POWER( "B" / 2.0 , 2) * "H"
           WHEN "Formber.Typ" = '3-Eck' THEN "L" * "B" * "H" / 2
           WHEN "Formber.Typ" = '4-Kant-Rohr-symm' THEN POWER( "L" , 2 ) * "H" - POWER( "B" , 2 ) * "H"
           WHEN "Formber.Typ" = '6-Kant' THEN POWER( "L" / SQRT( 3.0 ), 2 ) * 3 / 2 * SQRT( 3.0 )            
       ELSE 0
       END ) / 1000000.00 AS "Volumen",
    ( CASE WHEN "Formber.Typ" = 'Block' THEN "L" * "B" * "H"
           WHEN "Formber.Typ" = 'Rund' THEN "L" * "L" / 4 * PI( ) * "H"
           WHEN "Formber.Typ" = 'Gewindestange' THEN  ( SELECT POWER( "D", 2 ) - SQRT( 3.0 ) * "D" * "P" + 3.0/2.0 * POWER( "P", 2 ) FROM "ISO-Normgewinde" WHERE "D" = "L" ) / 4 * PI( ) * "H"
           WHEN "Fromber.Typ" = 'Rohr' THEN PI( ) * POWER( "L" / 2.0 , 2) * "H" - PI( ) * POWER( "B" / 2.0 , 2) * "H"
           WHEN "Formber.Typ" = '3-Eck' THEN "L" * "B" * "H" / 2
           WHEN "Formber.Typ" = '4-Kant-Rohr-symm' THEN POWER( "L" , 2 ) * "H" - POWER( "B" , 2 ) * "H"
           WHEN "Formber.Typ" = '6-Kant' THEN POWER( "L" / SQRT( 3.0 ) , 2 ) * 3 / 2 * SQRT( 3.0 )            
      ELSE 0
      END ) * "Dichte" / 1000000000.00 AS "Gewicht"
    FROM "Teileliste"
    WHERE
    ( UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) OR :m IS NULL ) AND
    ( "H" >= :h OR :h IS NULL ) AND
    ( "B" >= :b OR :b IS NULL ) AND
    ( "L" >= :l OR :l IS NULL )
Fakt ist aber, ich bekomme den Fehler beim Aufruf der Suche: "column not found: Formber.Typ in statement <obige abfrage>"
Das is doch total widersinnig: ich ändere doch nur Formeln und füge cases für die Spalte Formber.Typ hinzu!? An der spalte Formber.Typ habe ich doch garnichts geändert!

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von F3K Total » So 7. Apr 2013, 18:39

Tja, aufpassen, gucken ...
WHEN "Fromber.Typ" = 'Rohr'
... und ganz wichtig, Fehlermeldungen richtig lesen, den da steht's ja schon ganz zu Anfang drin:
sqlerror.png
sqlerror.png (14.66 KiB) 3761 mal betrachtet
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

phaeton616
Beiträge: 15
Registriert: Mi 16. Jan 2013, 20:23

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von phaeton616 » Mo 8. Apr 2013, 08:48

"glaznliestung" von mir... :o :?
wenigstens hat mich meine dummheit ein wochenende gekostet, dann merk ichs mir vielleicht :roll:


EDIT: Das funktioniert jetzganz gut soweit mit der Suche nach Formen.
Allerdings bekomme ich als Abfrageergebnis nun jeden Datensatz auf den die Suchbedingungen zutreffen ganz oft in den Ergebnissen.

Auf ersterem aufbauend ist folgendes: Wenn ich mittels SELECT einen Datensatz aus einer anderen Tabelle auswähle auf den eine Bedingung zutrifft, und diesem ein Dropdown um Suchformular zuweise, dann müsste mir

Code: Alles auswählen

...
	FROM "Teileliste", "z.B.Werkstoffeigenschaften" 
	WHERE 	( UPPER ( "Formber.Typ") LIKE ( '%' || UPPER ( :fbt ) || '%') OR :fbt IS NULL) AND
			( UPPER ( SELECT  "z.B.Materialkategorie" FROM "Tabelle wo hinterlegt" WHERE "Teileliste"."Material" = "z.B.Werkstoffeigenschaften"."Material") LIKE ( '%' || UPPER (:kat) || '%' ) OR :kat IS NULL) AND
			( UPPER ( "Material" ) LIKE ( '%' || UPPER ( :m ) || '%' ) OR :m IS NULL ) AND 
			( "H" >= :h OR :h IS NULL ) AND 
			( "B" >= :b OR :b IS NULL )	AND 
			( "L" >= :l OR :l IS NULL )
die Möglichkeit geben z.B. alle Werte anzuzeigen die Teil dieser Materialkategorie sind. In der Praxis bekomme ich allerdings einen syntax error, der mich darauf hinweis, dass die Funktion unerwartet endet und entweder ein BETWEEN, IN oder SQL_TOKEN_LIKE erwartet wird. Ersetze ich das "=" durch ein LIKE bekomme ich allerdings den gelichen Fehler.

Ich denke mir dass dafür eigentlich die SELECT GROUP funktion geeigneter wäre, aber wie definiere ich eine Gruppe im SQL?

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Erstellung einer laufenden Inventurdatenbank

Beitrag von F3K Total » Mo 8. Apr 2013, 17:08

Hallo phaeton616,
phaeton616 hat geschrieben:Allerdings bekomme ich als Abfrageergebnis nun jeden Datensatz auf den die Suchbedingungen zutreffen ganz oft in den Ergebnissen.
Ist bei mir nicht der Fall. Ich bekomme nur die Datensätze angezeigt, auf die die Suchbedingungen zutreffen.
Keiner ist doppelt vertreten, das sehe ich an den ID's.
Achte drauf, die Suchbedingung für die Abmessungen heißt >=. Liegt es daran?
Anbei meine parallelgeführte DB in der du dies nachvollziehen kannst.

Gruß R
Dateianhänge
Fertige Liste.zip
(243.09 KiB) 180-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten