Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Listeneintrag individuell ordnen

Begonnen von Anfängerfehler, April 02, 2020, 18:35:25

⏪ vorheriges - nächstes ⏩

Anfängerfehler

Hallo zusammen, ich bin neu im Forum und auch noch ein ziemlicher Anfänger was Access angeht. Für meine DB möchte ich Listeneinträge mit mehreren Auswahlfunktionen individuell ordnen:

Wenn ich als Beispiel die Zutaten-Tabelle habe:
1 Äpfel
2 Baumnüsse
3 Birnen
4 Haselnüsse
5 Salz
6 Mehl
7 Zucker

Und eine Rezept-Tabelle:
1 Apfelkuchen (mit Zutaten aus Listeneintrag 1; 3; 5; 6; 7)
1 Nusstorte (mit Zutaten aus Listeneintrag 2; 4; 5; 6; 7)

Dabei möchte ich die Zutaten anhand der eingesetzten Menge im Rezept ordnen. Der Zucker stünde beim Apfelkuchen an 5. Stelle, während er bei der Nusstorte vielleicht an 2. Stelle steht. Access ordnet die Zutaten aber alphabetisch. Gibt es hierfür eine einfache Lösung?

Vielen Dank im Voraus und liebe Grüsse

MzKlMu

#1
Hallo,
wie genau ist die Rezept Tabelle aufgebaut?

Ob das mit der Mengensortierung eine gute Idee ist ?

1 Esslöffel Öl würde dann im Rezept ganz vorne stehen.

Gruß Klaus

ebs17

Zitatanhand der eingesetzten Menge
Die kommt in Deinem Beispiel noch gar nicht vor, für einen programmatischen Ansatz sollte man zudem auf eine reichlichere Datenbasis zugreifen, weil da doch viele Unterschiede zu erwarten sind.

ZitatGibt es hierfür eine einfache Lösung?
Klar. Wobei einfach relativ ist.

Mein Ansatz wäre eine m:n-Beziehung zwischen Gericht und Zutat. In der nötigen Verknüpfungstabelle  kann man die jeweiligen Mengen hinterlegen und danach bei Eignung sortieren. Womöglich wäre aber ein zusätzliches Feld einzusetzen, wo man über eine Ordnungszahl eine individuelle Sortierung vergeben kann.

Also: Etwas mehr als eine Tabelle würde man schon benötigen.
Mit freundlichem Glück Auf!

Eberhard

Anfängerfehler

Sorry meine lange Absenz. Ich habe die letzten Tage an anderen Baustellen rum getüftelt. Danke euch beiden!

Zitat von: MzKlMu am April 02, 2020, 18:44:38
wie genau ist die Rezept Tabelle aufgebaut?
Nun ich muss vielleicht etwas ausholen. Es geht dabei um Rechtliche Angaben, die Birne wäre daher nicht als "Birne" deklariert (wie sie im Rezept steht) sondern muss als "Pyrus" nach Menge absteigend geordnet deklariert werden. Sie steht daher nicht in direkter Verbindung mit dem Rezept, da ein Rohstoff auch mehrere lateinische Bezeichnungen haben kann. Ich habe deshalb eine Tabelle mit den lateinischen Bezeichnungen hinterlegt.

Zitat von: ebs17 am April 03, 2020, 09:25:09
Zitatanhand der eingesetzten Menge
Mein Ansatz wäre eine m:n-Beziehung zwischen Gericht und Zutat. In der nötigen Verknüpfungstabelle  kann man die jeweiligen Mengen hinterlegen und danach bei Eignung sortieren. Womöglich wäre aber ein zusätzliches Feld einzusetzen, wo man über eine Ordnungszahl eine individuelle Sortierung vergeben kann.
Also: Etwas mehr als eine Tabelle würde man schon benötigen.
Jedem Rezept kann ich die lateinischen Bezeichnung über eine m:n-Bezeichnung mit einem Listeneintrag mit mehrfach Auswahl zuordnen. Ich habe bisher in der Rezepttabelle eine weitere Spalte eingefügt, wo ich die Geordnete lateinischen Bezeichnungen (nach Menge) als langer Text eingefügt habe. Wenn sich nun aber in der Rezeptur etwas ändert, und ein lateinischer Text beispielsweise gestrichen wird, muss ich diesen Inhaltsstoff aus dem Listenfeld und aus dem geordneten Text streichen. Ich wollte fragen, ob es hier eine "elegantere" Variante gibt, damit ich die Listeneinträge zusätzlich ordnen kann, somit also nur ein Feld mit der geordenten Rezeptur hätte. Wäre es also möglich, beispielsweise beim Apfelkuchen (mit Zutaten aus Listeneintrag 1; 3; 5; 6; 7), die Listenteinträge ordnen zu können, also beispielsweise 1:(3); 2:(5); 3:(1), 4:(7), 5:(6)?

Liebe Grüsse

DF6GL

Hallo,

zeig mal den Screenshot des Beziehungsfensters, bei dem alle Tabellen und deren Feldnamen zu sehen sind.

Zitatwo ich die Geordnete lateinischen Bezeichnungen (nach Menge) als langer Text eingefügt habe.

Das ist die schlechteste Lösung überhaupt.


Zitatsondern muss als "Pyrus" nach Menge absteigend geordnet deklariert werden

Unverständlich.  Kann ein Gericht mehrere unterschiedliche Mengen an Birne(n-Zutat) haben?

Zitat
Sie steht daher nicht in direkter Verbindung mit dem Rezept, da ein Rohstoff auch mehrere lateinische Bezeichnungen haben kann.


Ist "Rohstoff" eine "Zutat" (zum Rezept)?  Oder was ist hier mit Rohstoff" gemeint.

Was soll die DB überhaupt bezwecken, bzw. verwalten?







Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Anfängerfehler

Anbei ein Screenshot des Beziehungsfensters.
Es geht eigentlich nicht um Kochrezepte, sondern um Kosmetikprodukte. Habe gedacht mit Kochrezepten sei das ganze etwas einfacher zu verstehen. Die lateinischen Namen sind die INCI-Nomenklaturen (tbl_01_03), welche jeweils hinten auf der Verpackung steht, hat also nichts mit dem eigentlichen Rezept und den Rohstoffen zu tun. Ein Mandelöl könnte beispielsweise aus verschiedenen Fettsäuren bestehen, hat also auch mehrere INCI-Bezeichnungen. Im Screenshot sind die Felder, welche ich beschrieben auf tbl_01_01 zu sehen (Feld INCI geordent und INCI_Daten). Diese zwei Felder würde ich gerne auf ein Feld vereinen. Somit beim auswählen der Listeneinträge auch eine Rangordnung verleihen.

Liebe Grüsse und danke für die Bemühungen!

DF6GL

Hallo,

naja, Kosmetik-Zutaten sind halt schon was Anderes als Kochgericht-Zutaten...  Obwohl, manche legen sich Gurkenscheiben auf die Augen und drücken sich Quark um die Nase...   :D  :)

Zum Thema:

Entferne die Mehrwertfelder und bilde die Konstellation mit 1:n-Tabellenbeziehung nach.

Zudem kommt mir der Beziehungszirkel bei "Produkte" , "Produktions.." und "Rezepturen" noch sehr obskur vor.  Die Beziehung zwischen nicht-Schlüsselfeldern ist problematisch. Hier besteht m. E. Korrektur-Bedarf.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
Und: Für die Übersetzungen (Bezeichnung und Etikettentext) sollte es eine eigene Tabelle geben mit je einem Datensatz für die entsprechnde Sprache. Zweckmäßigerweise legt man auch noch eine Tabelle an für die Sprachen.
Gruß Klaus

Anfängerfehler

Lebensmittel und Kosmetika sind in der Tat gar nicht so weit entfernt :-)

Danke für den Hinweis mit der 1:n Tabellenbeziehung. Mir ist aber jetzt noch immer schleierhaft, wie ich die INCI-Nomenklaturen aus tbl_01_03 in tbl_01_01 nach meinem Wunsch ordnen kann. Die Listenfunktion mit mehreren Werten finde ich hierzu sehr praktisch, da ich nur den Haken beim entsprechenden INCI setzen muss, jedoch fehlt mir die richtige Reihenefolge. Gibt es hierzu eine gute Lösung? Entschuldige bitte, wenn ich noch etwas auf dem Schlauch stehe.

Den Beziehungszirkel bei den Produkten habe ich zur Rezeptureingabe gebildet, mit der ich noch nicht durch bin. Integriert ist auch eine Lagerverwaltung. So werden sämtliche Rohstoffe angezeigt, auch die ohne Bestand (da die Bestände noch nicht geführt werden). Ist somit nur zur Visualisierung und noch nicht abgeschlossen. Falls es für soetwas eine gute Vorlage gibt, bin ich natürlich auch nicht abgeneigt. Die Nordwind-Vorlage hat mir hierzu nur wenig geholfen, da keine Produktion ins Lager integriert wird.

Zitat von: MzKlMu am April 14, 2020, 14:44:42
Hallo,
Und: Für die Übersetzungen (Bezeichnung und Etikettentext) sollte es eine eigene Tabelle geben mit je einem Datensatz für die entsprechnde Sprache. Zweckmäßigerweise legt man auch noch eine Tabelle an für die Sprachen.

Danke, werde ich auch so aufnehmen. Nehme an, da geht es um die spätere Performance der DB?

Liebe Grüsse



DF6GL

Hallo,

wenn es um eine individuelle und definierte Reihenfolge geht, muss ein "Sortier"-Feld in der Tabelle mitgeführt werden, damit manuell die Sortierreihenfolge festgelegt werden kann. Zweckmäßigerweise sind das Ganzzahlen (Kardinalzahlen) in 10-Schritten, um später dazwischenliegende Einträge hinzufügen zu können. Alternativ wären auch der Datentyp Single/Double oder aus Performancegründen Währung geeignet.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Anfängerfehler

Danke für die rasche Antwort. Leider denke ich, dass ich mein Problem noch immer nicht richtig geschildert habe. Ich versuche es deshalb erneut, anhand eines Beispiels, welches nur zur Erklärung dient (zu beachten ist der angehängte Screenshot): Angenommen bei Produkt 1 stünde der INCI-Name "Eugenol" an erster Stelle, "Glycerin" an zweiter und "D-Limonene" an dritter, während in Produkt 2 "Glycerin" an erster, "D-Limonene" an zweiter und "Eugenol" an dritter Stelle steht. Gibt es eine Möglichkeit diese Listeneinträge individuell zu ordnen? Damit meine ich, dass ich beim Anwählen des INCI-Namens eine Reihenfolge pro Produkt festlegen kann? Am Ende sollte die Auflistung wie folgt aussehen:
Produkt 1: Eugenol; Glycerin; D-Limonene
Produkt 2: Glycerin; D-Limonene; Eugenol

DF6GL

Hallo,

1) Wirf dieses Mehrwertfeld wie gesagt heraus. Damit kommst Du nicht weit.
2) Führe in der INCI-Tabelle ein wie beschriebenes Feld mit, das die Reihenfolge definiert.
3) Erstelle für ein Listenfeld (oder Kombifeld) in einem Formular eine Abfrage über die INCI-Tabelle  mit Sortierung des Reihenfolge-Feldes.
4) Stelle vorab die Tabellen und die Beziehungen fertig.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Anfängerfehler

#12
Vielen Dank! Ich habe eine Tabelle jetzt so aufgebaut. Ist zwar zum einpflegen aufwändiger, aber dafür sind die Daten danach um einiges besser abgelegt und leichter zu bewirtschaften.

Eine Frage habe ich doch noch, wie kann ich nun die INCI darstellen, das sie als Text formatiert erscheinen? (z.B. Eugenol; Glycerin; D-Limonene)

DF6GL

Hallo,

Zitat..die INCI darstellen, das sie als Text formatiert erscheinen? (z.B. Eugenol; Glycerin; D-Limonene)

Warum sollen die INCI als "Liste" erscheinen? Diese Umstellung bedeutet Entnormalisierung der Tabelle und ist somit nicht erwünscht.

Allenfalls zur "schönen" Darstellung in einem Bericht z. B. kann dies sinnvoll sein.

Siehe http://www.dbwiki.net/images/d/d8/AccSampleSQLListe.zip
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Anfängerfehler

#14
Danke nochmals für Deine Hilfe, echt klasse!  :)
Ja, es geht mir später um die Darstellung, da ich diesen Baustein verschiedentlich verwenden möchte. Ich habe die SQLListe eingesetzt, wobei sich die Auflistung anhand der Anzahl INCI pro Produkt wiederhohlt (siehe Screenshot). Was habe ich falsch gemacht? Anbei auch ein Screenshot der INCI-Zuordnung für die Produkte.

Folgenden befehl habe ich im Bericht eingesetzt:
=SQLListe("SELECT [INCI] FROM [qry_01_01_INCI Sortiert] WHERE Produkt = '" & [Produkt] & "'";", ";": ")

Den Befehl habe ich aus der SQLListe-DB übernommen:
Option Compare Database
Option Explicit

Public Function SQLListe(SQL As String, _
  Optional SepR As String = ";", Optional SepF As String = ";", _
  Optional NoNullFields As Boolean = True) As String
'
' Die Felder, die mit dem SQL-String gewonnen werden,
' werden feldweise mit SepF, datensatzweise mit SepR getrennt
' Wenn NoNullFields gesetzt ist, werden leere Felder unterdrückt
'
Dim DB As Database, RS As Recordset, I As Long, Res As String, Tmp As String
  On Error Resume Next
  Set DB = CurrentDb()
  Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot)
  If Err <> 0 Then
    Res = "#Fehler"
  Else
    On Error GoTo 0
    Res = ""
    Do While Not RS.EOF
      Tmp = ""
      For I = 0 To RS.Fields.Count - 1
        If Not (NoNullFields And IsNull(RS(I))) Then Tmp = Tmp & SepF & RS(I)
      Next
      If Tmp <> "" Then Res = Res & SepR & Mid(Tmp, Len(SepF) + 1)
      RS.MoveNext
    Loop
    RS.Close
    If Res <> "" Then Res = Mid(Res, Len(SepR) + 1)
  End If
  SQLListe = Res
End Function


Ich habe 0 Erfahrung beim programmieren von Makros. Was muss ich zudem anpassen, damit sich die einzelnen INCI durch ein Semikolon anstatt eines Kommas trennen?