Dynamische Tabelle automatische Hochrechnung
#11
Erklärung? ,Ok ich dachte das wäre selbsterklärend.

Du willst Rezepte abspeichern um sie später zu verwenden oder nur aufzuheben.

Dabei ordnest du die Werte alle in einer Zeile an was ja auch logisch ist auf den ersten Blick. 
In deiner Aufteilung speicherst du Werte aber doppelt. Denn % und ml kann man aus dem jeweils anderen Wert, bei gegebener Menge berechnen. Also brauchst du eigentlich nur ml oder % und die Gesamtmenge.

Bei Datenbanken soll man die Datenstruktur normalisieren. Damit man keine gleichen Daten mehrfach(redundant) speichert. Es kommt nämlich vor das man die Daten an einer Stelle ändert aber an Anderer vergisst und schon ist der Datenbestand inkonsistent.
Man teilt die Daten deshalb auf mehrere Tabellen auf. Um die Verbindung zu behalten verwendet man einen Fremdschlüssel(ForeignKey) , der in der anderen Tabelle den passenden Datensatz markiert. Hier die 1 (FK_R_ID  = ForeignKey_Rezept_ID ) zeigt auf den Datensatz 1 in der andern Tabelle.

Ein weiterer Vorteil der vertikalen Anordnung ist die Möglichkeit das mit Excelmitteln auszuwerten. Denn die meisten Formeln arbeiten vertikal nicht horizontal.
Antworten Top
#12
Hallo Andreas,

du suchst vermutlich so was:
Code:
Option Explicit
Sub EintragenInDatenbank()
    Dim i&, arr(): arr = Array(tb_Eingabeformular.Range("G5").Value, tb_Eingabeformular.Range("H11").Value, tb_Eingabeformular.Range("L11").Value, _
                    tb_Eingabeformular.Range("G14").Value, tb_Eingabeformular.Range("H14").Value, tb_Eingabeformular.Range("K14").Value, tb_Eingabeformular.Range("L14").Value, _
                    tb_Eingabeformular.Range("G17").Value, tb_Eingabeformular.Range("H17").Value, tb_Eingabeformular.Range("K17").Value, tb_Eingabeformular.Range("L17").Value, _
                    tb_Eingabeformular.Range("G20").Value, tb_Eingabeformular.Range("H20").Value, tb_Eingabeformular.Range("K20").Value, tb_Eingabeformular.Range("L20").Value, _
                    tb_Eingabeformular.Range("G23").Value, tb_Eingabeformular.Range("H23").Value, tb_Eingabeformular.Range("K23").Value, tb_Eingabeformular.Range("L23").Value, _
                    tb_Eingabeformular.Range("G26").Value, tb_Eingabeformular.Range("H26").Value, tb_Eingabeformular.Range("K26").Value, tb_Eingabeformular.Range("L26").Value, _
                    tb_Eingabeformular.Range("G29").Value, tb_Eingabeformular.Range("H29").Value, tb_Eingabeformular.Range("K29").Value, tb_Eingabeformular.Range("L29").Value)
    For i = 7 To 23 Step 2
        arr(i) = arr(i) * 100    ' ist erforderlich wenn Zellen nicht % formatiert sind wie im Beispiel
    Next i
    tb_Datenbank.ListObjects(1).ListRows.Add.Range.Resize(1, UBound(arr) + 1) = arr
    tb_Eingabeformular.Range("H11,L11,G14,G17,G20,G23,G26,G29,K14,K17,K20,K23,K26,K29") = ""    'Leeren der Eingabezellen
End Sub
Packe in Zelle G5 "Eingabeformular die Formel: =MAX(Tabelle1[ID]+1) dann klappt es mit einer forlaufenden Nummer in Spalte A des Listobjekts.

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste