Juli 15, 2020, 12:34:57

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Datenmodell richtig?

Begonnen von Tanzmaus4, Januar 18, 2012, 10:13:13

⏪ vorheriges - nächstes ⏩

Tanzmaus4

Hallo zusammen,

ich bin mir nicht sicher, ob die Probleme, die ich momentan mit einer Abfrage habe, vielleicht auf einem falschen Datenmodell beruhen.

Folgende Daten sind vorhanden:

tblCharge (Tabelle für Materialchargen)
- ChargenID (Primärschlüssel - Autowert)
- diverse Felder, die die Charge beschreiben (z.B. MaterialArt, Jahr, lfd.Nr)

tblPack (Tabelle für Packstücke)
-PackID (Primärschlüssel - Autowert)
- P_Charge (Fremdschlüssel - Long - Bezug zurChargenID aus tblCharge - 1 Charge : n Packstücke)
- diverse Felder zum Packstück (z.B. Menge, Verpackung)

tblMessungen (Tabelle für Messdaten)
- MessID (Primärschlüssel - Autowert)
- (hier im Fremdschlüssel liegt mein Problem)
- M_Wert (Messwert - Double)
- M_Datum (Datum der Messung)

Nun gibt es Messungen zu einzelnen Packstücken oder zur Charge oder beides oder keine Messung.
Wenn ich eine Liste aller Packstücke (Endlosformular mit ungebundenen Suchfeldern im Kopf) aufrufe, möchte ich den neuesten Messwert des Packstückes finden. Sollte es keinen geben, dann den Messwert der Charge bzw. keinen Wert, wenn es auch zur Charge (noch) keine Messung gibt.
Mein erster Gedanke war zwei Fremdschlüssel (einen zur Charge und einen zum Packstück) anzulegen. Ein zweiter Gedanke ist ein Feld zur Entscheidung, ob es sich um eine Packstück-Messung oder eine Chargen-Messung handelt und ein long-Feld mit der entsprechenden ID (entweder Charge oder Packstück). Aber mit beiden Versionen komme ich nicht an dem ,,wenn keine Packstück-Messung gefunden, dann Chargen-Messung suchen" Problem vorbei...  ???
MfG, Ute

DF6GL

Hallo,



Dein zweiter Gedanke wäre in diesem Fall umzusetzen.


Zitat,,wenn keine Packstück-Messung gefunden, dann Chargen-Messung suchen" Problem


ist eher kein Vorgang, sondern ein Formularaufbau-Problem.

Du brauchst

im (Einzel-) Formular "frmCharge":

ein UFO-St.El.  ("UfoChargenMessungen"), das das (Unter-)Form "frmMessungen" mit entspr. gesetzten Verknüpfungen anzeigt

ein UFO-St.El.  ("UfoPackStücke"), das das (Unter-)EndlosForm "frmPackStücke" mit entspr. gesetzten Verknüpfungen anzeigt



im Formularfuß des Forms "frmPackStücke ein UFO-St-El. ("UfoPSMessungen") das das (Unter-)Form "frmMessungen" mit entspr. gesetzten Verknüpfungen anzeigt

Frank77

Januar 19, 2012, 22:19:46 #2 Letzte Bearbeitung: Januar 19, 2012, 22:27:39 von Frank77
Hallo!
Ich hoffe ich mische mich da nicht ungelegen ein
Eigentlich habe ich ja auch mehr Fragen als antworten

Wenn ich das richtig verstanden habe dann hättest du gerne ein endlos Formular das
In einer Linie nebeneinander anzeigt und wen kein wert vorhanden ist soll das Feld leer sein
Da ich nicht so ein Profi bin habe ich das mal als Bild geladen  
Hof du kannst was damit als anregung anfangen

Im Formular würde  ich dann  ein Kombination Feld das alle Werte die ich suchen kann oder die es gibt beinhaltet
nach den aktualisieren dann ein Requery auf das UFO wenn darin entsprechend steht

[Forms]![frmWareneingang]![CboArtIDUmbuchNavi]


Mit 2 Datums Felder und der Funktion habe ich dann noch das ganze gefiltert
Die ID muss da sein das Datum kann optional sein  wenn kein Datum da ist dann werden alle zur ID ausgegeben

Me!FrmUnterform.Form.RecordSource = fcFilterUfo(Me!TxtDatumbeginn, Me!TxtDatumende, Me!LstStaendeAuswahl.Column(0))

Private Function fcFilter(Optional datVon As Variant, _
                         Optional datBis As Variant, _
                         Optional ID As Long = 0) As String

   Dim sSQL As String
   Dim sFilter As String

   Const SqlDtFmt = "\#yyyy-mm-dd\#"

   sSQL = "SELECT tblBestandsaenderungen.BestandsaenderungID, tblBestandsaenderungen.BestandDatum, tblBestandsaenderungen.BestandAnzahl, tblBestandsaenderungen.BestandArtIDRef" & _
        " FROM tblBestandsaenderungen" & _
        " INNER JOIN tblWareneingang " & _
        " ON tblBestandsaenderungen.BestandsaenderungID = tblWareneingang.BestandsaenderungIDRef" & _
        " WHERE $1" & _
        " ORDER BY tblBestandsaenderungen.BestandsaenderungID;"

   Debug.Print sSQL

   If IsDate(datVon) Then
       sFilter = "AND BestandDatum >= " & Format(datVon, SqlDtFmt)
   End If

   If IsDate(datBis) Then
       sFilter = sFilter & "AND BestandDatum <= " & Format(datBis, SqlDtFmt)
   End If

   If ID <> 0 Then
       sFilter = sFilter & "AND BestandArtIDRef = " & ID
   End If

   If Len(sFilter) Then
       '-- erstes And abschneiden
       sFilter = Mid(sFilter, 5)
   Else
       sFilter = "1"
   End If

   fcFilter = Replace(sSQL, "$1", sFilter)

End Function


Grusß frank
Selbstständig = Selbst und Ständig

Tanzmaus4

Hallo Franz und Frank,

vielen Dank für eure Anregungen...

Ich habe jetzt den Tabellenaufbau so geändert, dass ich ein Ja/Nein-Feld habe, welches mir angibt, ob ich eine Messung zur gesamten Charge habe oder zum einzelnen Packstück. Außerdem dann das Feld mit dem Fremdschlüssel (da nur der Schalter angibt, ob es sich um einen Fremdschlüssel zur Chargentabelle oder zur Packstücktabelle handelt, habe ich keinerlei Beziehungen zu dieser Tabelle angelegt)

Dann habe ich in meiner Abfrage (die als Grundlage für mein Endlosformular dient) ein ungebundenes Feld "Messung" erzeugt, welches folgenden Inhalt hat:

Messung: Format(Wenn(IstNull((Select Top 1 M_Wert from tblMessungen WHERE Mes_Art = 1 AND Mes_Zuordnung = TRUE AND Mes_ChaOrPStk = PackID));(Select Top 1 M_Wert from tblMessungen WHERE Mes_Art = 1 AND Mes_Zuordnung = FALSE AND Mes_ChaOrPStk = MP_Charge);(Select Top 1 M_Wert from tblMessungen WHERE Mes_Art = 1 AND Mes_Zuordnung = TRUE AND Mes_MatOrPStk = PackID));'Standardzahl')
MfG, Ute

Frank77

Hi!
Freut mich das ich auch mal was beitragen konnte!

Wenn ich das richtig gesehen habe fehlt das ORDER BY in deiner Abfrage das könnte dir falsche werte geben da das select top 1 den ersten obenstehenden wert nimmt
Das ist mir passiert bei der Ermittlung des  Inventur Datums
in der Datenblatt Ansicht  muss dein gesuchter wert dann ganz oben stehen

Order By M_Wert DESC

Gruß Frank
Selbstständig = Selbst und Ständig

Tanzmaus4

Hi Frank,

danke für den Tipp. Habe ich auch schon dran gedacht, aber vorerst wird es nur einen Messwert zu einem Packstück oder einer Charge geben. Wenn sich das ändern sollte, werde ich nach dem Erfassungsdatum sortieren um den aktuellsten Wert zu finden.
MfG, Ute