Neuigkeiten:

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

Mobiles Hauptmenü

Abfrage mit einem oder mehr Kriterien aus einem Listenfeld füllen

Begonnen von MrB, Juli 19, 2024, 15:23:27

⏪ vorheriges - nächstes ⏩

MrB

Hallo,
nach viel Zeit muss ich wieder an einem Thema weitermachen, das ich schonmal am Wickel hatte.
Ich erstelle eine Datenbank aus Teilen, die wir mit Teilen von Tisch bis zur Nähnadel bestücken um aus diesen Werkstätten oder Klassenräume zu bestücken. Es existieren bereits Stücklisten, die aus einer Teileliste befüllt werden.
Ich habe zu dem Thema auch einen Post gefunden und versucht umzusetzen https://www.access-o-mania.de/forum/index.php?topic=16145.msg97169#msg97169
Leider komme ich nicht weiter.
Ich habe versucht alleszu adaptieren, wie in den verschiedenen Antworten geschrieben, aber bekomme immer die gesamte Teileliste in den Bericht.

Option Compare Database
Private Sub Befehl_Stueckliste_Click()

    Dim strFilter As String, varElement As Variant, strSQL As String
   
    strFilter = ""
    If Not Me!ListenFeldAuswahlStueckliste.ItemsSelected.Count = 0 Then
        For Each varElement In Me!ListenFeldAuswahlStueckliste.ItemsSelected
        strFilter = strFilter & " OR [ID_StuecklistenName] = " & Me!ListenFeldAuswahlStueckliste.ItemData(varElement)
        Next
        End If
   
     DoCmd.OpenReport "rptStueckliste", acViewReport
   
End Sub

Wahrscheinlich ist es eine Kleinigkeit die ich übersehe, habe auch das Beziehungsfenster mit eingefügt.

Mfg Cord
Sie dürfen in diesem Board keine Dateianhänge sehen.
 

MzKlMu

Hallo,
ich würde mal als erstes behaupten, dass das Datenmodell (die Beziehungen) nicht passt.
Die Beziehung zwischen tblStückliste und tblTeile über die beiden Primärschlüssel kann so niemals stimmen.
Die Tabelle tblStückliste muss ja eine n:m Tabelle sein, also muss da die Beziehung über ID_Item laufen.

Das Feld ID_Stücklistenname ist in der Teiletabelle überflüssig.
Das Feld AnzahlStückliste erscheint mir auch fragwürdig, es kann doch immer nur eine Stückliste geben.

Warum stellst Du keine referentielle Integrität ein ?
In einer Datenbank ist das unerlässlich und sichert automatisch die Integrität der Daten.
Eine Datenbank ohne RI ist ein unstimmiger Datenhaufen in dem man in den Schlüsselfeldern auch unsinnige Daten eingaben kann.
Wenn Du keine RI einstellen kannst, hast Du Fehler in den Daten und/oder in der Struktur.
Gruß Klaus

ebs17

Zu Deinem obigen Text: Es genügt nicht, einen Filter zusammenzustellen (mit dem vorangehenden OR ist der auch noch syntaktisch falsch), sondern man muss ihn dann auch anwenden.
Mit freundlichem Glück Auf!

Eberhard

MrB

Hallo und erstmal Entschuldigung für die späte Antwort.

Zitat von: MzKlMu am Juli 19, 2024, 17:59:42Das Feld ID_Stücklistenname ist in der Teiletabelle überflüssig.
Wird zwar nicht genutzt ist ein Überbleibsel, habe ich aber entfernt genau wie 2 andere ungenutzte.

Zitat von: MzKlMu am Juli 19, 2024, 17:59:42Das Feld AnzahlStückliste erscheint mir auch fragwürdig, es kann doch immer nur eine Stückliste geben.
In diesem Falle ist es so, das in einem Gebäude die Anzahl x Klassenräume sind, die immer eine Stückliste darstellen, daher die Anzahl Stücklisten. Vielleicht sollte ich die umbenennen?

Zitat von: MzKlMu am Juli 19, 2024, 17:59:42Warum stellst Du keine referentielle Integrität ein ?
Weil es nicht funktionierte und ich einfach ohne eingestellt habe. Fehler wie ich jetzt weiß. Ich habe das bei fast allen Tabellen geändert und auf referentiell eingestellt. Einzig bei der Beziehung zwischen tblTeile_1 und tblStueckliste geht es nicht und ich finde den Fehler nicht.
Was wahrscheinlich daran liegt, das es keine n:m Tabelle ist.
Jetzt muss ich herausbekommen, wie ich die umstelle ohne alle Stücklisten neu schreiben zu müssen. Gibt es dafür eine standart Prozedur? Wohl eher nicht weil der Fehler von euch nicht begangen wird.
Danach kümmere ich mich um die Abfrage.
Cord
Sie dürfen in diesem Board keine Dateianhänge sehen.
so sollte das besser sein hoffe ich.
 

MzKlMu

Hallo,
gibt es die Tabelle "tblTeile_1" wirklich ?
Vermutlich nicht, die heißt "tblTeile".

ZitatEinzig bei der Beziehung zwischen tblTeile_1 und tblStueckliste geht es nicht und ich finde den Fehler nicht.
Das ist eine völlig unzureichende Fehlerbeschreibung. Was geht denn nicht ?
Welche Meldung gibt es ?
Wie hast Du die Beziehung versucht?
Die Tabelle "tblStueckliste" ist die n:m Tabelle und die braucht dann die Beziehung zur Teiletabelle.

Du hast die Teile Tabelle 2x ins Beziehungsbild aufgenommen und dann stett der tböTeile_1 die Tabelle tblTeile gelöscht.
Das solltest Du bereinigen.

Zitatdas in einem Gebäude die Anzahl x Klassenräume sind,
Dann sollte es auch jeweils eine Tabelle geben für die Gebäude und eine für die Klassenräume. Und vermutlich auch eine um die Klassenräume dem Gebäude zuzuordnen.
Und dann kannst Du für die eigentliche Stückliste die Klassenräume als Fremdschlüssel verwenden.

Die Tabellen tblBuildingStueckliste und tblStuecklistenName würden dann ersatzlos entfallen.
Gruß Klaus

MrB

#5
@ebs17 ja hast du natürlich recht, ich habe das hier schlecht dargestellt, hatte auch eine Kürzung drin, damit das vorstehende "or" wegfällt. Irgendwie ist das nach ich weß nicht wievielen gescheiterten Versuchen weggefallen.

@MzKlMu Habe die tblTeile angepasst

und versuche Licht ins dunkle zu bringen, ich glaube alle meine Beschreibungen sind eher so das sie verwirren als das sie helfen.
Das ganze Konstrukt soll hierarchisch Aufgebaut sein.
An oberster Stelle eine Schule, die aus Gruppen besteht(Administrative Gebäude, Unterbringungen, Ver und Entsorgung,usw).
Diese Gebäude bestehen aus einzelnen Räumen(Stücklisten) wie zB Klassenraumgebäude in dem Klassenräume * n und ein Computerraum oder Schneiderwerkstatt untergebracht wird.
Dann folgt der Raum, der aus einer Stückliste mit Teilen(können auch Möbel sein) besteht.
Dann gibt es noch die Idee die Stücklisten dynamisch anzupassen auf die Anzahl der Schüler sprich, wenn ich mehr Arbeitsplätze in einer Schweißwerkstatt haben möchte, weil 2 Klassen gleichzeitig Praxis machen können sollen. Normale Planung ist 10 sollen dann aber 20 werden.
Oder in eine Werkstatt Pakete hinzuzufügen oder rauszulassen (zB Hydraulik ja / Elektrohydraulik nein)
Soweit bin ich aber noch nicht, dafür müssten die Gruppen erstmal erstellt werden und logisch zusammengebaut werden.

Zitat von: MzKlMu am Juli 23, 2024, 17:14:57Die Tabellen tblBuildingStueckliste und tblStuecklistenName würden dann ersatzlos entfallen.
Zusätzlich habe ich die Namen scheinbar schlecht gewählt.

tblGroup enthält die Oberbegriffe (zB Administrative Gebäude)
tblBuildingStuecklisten enthält die Namen einzelnen Räume, die in einem Gebäude sein können.
Jetzt die tblStueckliste, diese muss ich ändern in eine m:n Tabelle in der dann die Teile aus der tblTeile mit der tblStuecklistenName verbunden werden.

Zitat von: MzKlMu am Juli 23, 2024, 17:14:57Das ist eine völlig unzureichende Fehlerbeschreibung. Was geht denn nicht ?
Hier muss ich erstmal sehen, das ich die tblStueckliste umwandle und danach probiere.

Cord

So nach langer Fehlersuche habe ich es nach meiner Meinung geschafft alles in die Reihe zu bekommen. Morgen dann endlich an die Mehrfachauswahl.
Sie dürfen in diesem Board keine Dateianhänge sehen.
Vielleicht schaut nochmal einer drüber, ob das jetzt so ok ist.
Cord
 



MrB

So neuer Anfang mit der ursprünglichen Frage  :)

Ich habe mich durch die vorhandenen Posts gelesen und komme bis zu einem Punkt und dann aber nicht weiter.

Der Teil ist nur um die Filter zurückzusetzen, ist aber glaube ich inzwischen über.

Option Compare Database
Private Sub Befehl_Leere_Listenfeld_Click()

strFilter = ""
strSQL = ""
Me.txtGewaehlteStueckliste = ""


End Sub
Private Sub Befehl_Stueckliste_Click()
'Private Sub ListenFeldAuswahlStueckliste_AfterUpdate()

Dim strFilter As String, varElement As Variant, strSQL As String

 
  strSQL = "SELECT tblStuecklistenName.Name_short, tblTeile.SG_ITEM_German, tblTeile.G_ITEM_German, tblTeile.HK_SG_SP, tblStueckliste.QTY, [HK_SG_SP]*[QTY] AS Zwischensumme, tblStuecklistenName.Name_EnglFROM tblTeile INNER JOIN (tblStuecklistenName INNER JOIN tblStueckliste ON tblStuecklistenName.[ID_StuecklistenName] = tblStueckliste.[ID_StuecklistenName]) ON tblTeile.[ID_ITEM] = tblStueckliste.[ID_ITEM]"
   With Me.ListenFeldAuswahlStueckliste
     For Each varElement In .ItemsSelected
        strFilter = strFilter & ", " & .ItemData(varElement)
     Next
   End With
  If Len(strFilter) > 0 Then
     strSQL = strSQL & " Where ID_Stueckliste IN (" & Mid(strFilter, 3) & ")"
 
  End If
Debug.Print strFilter
Debug.Print strSQL

    Me!txtGewaehlteStueckliste = strFilter
   
    CurrentDb.QueryDefs!abfStuecklisteEinzeln.SQL = strSQL

    DoCmd.OpenReport "rptStueckliste", acViewReport

End Sub

Wenn ich den zweiten Code ausführe bekomme ich die Fehlermeldung
Laufzeitfehler'3075': Syntaxfehler fehlender Operator
was fehlt denn hier?
Sie dürfen in diesem Board keine Dateianhänge sehen.

Vergessen habs hinbekommen, war ein fehlender Blank jetzt scheint alles zu gehen.

MzKlMu

Hallo,
ZitatVielleicht schaut nochmal einer drüber, ob das jetzt so ok ist.
Nein, die Beziehungen sind nicht OK. Man kann über 2 Primärschlüssel keine 1:n Beziehung herstellen. Und somit ist das keine n:m Beziehung. ID_Item in der Stückliste darf kein PS sein. Füge einen Autowert als PS ein.

Auf meine Hinweise zu Gebäude und Räume in #4 bist Du nicht weiter eingegangen.
Wo ist denn die von Dir erwähnte Tabelle "tblGroup" in den Beziehungen ?

Den Sinn des Filters habe ich nicht verstanden, was willst Du denn Filtern ?
Gruß Klaus

MrB

Hallo Klaus,

Zitat von: MzKlMu am Juli 25, 2024, 14:09:29Auf meine Hinweise zu Gebäude und Räume in #4 bist Du nicht weiter eingegangen.
Sie dürfen in diesem Board keine Dateianhänge sehen.
Hier eine komplette Ansicht, was ich habe.
Sie dürfen in diesem Board keine Dateianhänge sehen.
Das ist die Liste der Gebäude(stelle grad fest muss ich anpassen) Diese ist über die tblBuildingStueckliste, in der die möglichen Stücklisten stehen, mit der tblStuecklistenName verbunden.

Sie dürfen in diesem Board keine Dateianhänge sehen.
Sie dürfen in diesem Board keine Dateianhänge sehen.
Diese Tabellen enthält die einzelnen Räume/Werkstätten und verknüpft dann über die tblStueckliste zur tblTeile in der alle vorhandenen Teile gespeichert sind.
Sie dürfen in diesem Board keine Dateianhänge sehen.

Die tblGroup habe ich noch nirgends verwendet, nur erstellt. Ich sehe noch keinen so richtigen Sinn darin.
Sie dürfen in diesem Board keine Dateianhänge sehen.

Zitat von: MzKlMu am Juli 25, 2024, 14:09:29Den Sinn des Filters habe ich nicht verstanden, was willst Du denn Filtern ?
Im Grunde brauche ich diesen Filter immer wenn ich mehrere Dinge aussuchen muss, in diesen Fall nicht nur eine Stückliste sondern 2 oder mehr. Brauche ich zB wenn ich einem Lieferanten eine Liste mit Teilen aus verschiedenen Räumen/Werkstätten zukommen lassen muss.

Zitat von: MzKlMu am Juli 25, 2024, 14:09:29Nein, die Beziehungen sind nicht OK. Man kann über 2 Primärschlüssel keine 1:n Beziehung herstellen. Und somit ist das keine n:m Beziehung. ID_Item in der Stückliste darf kein PS sein. Füge einen Autowert als PS ein.

Habe mich an die Anweisung von MS gehalten, die ich hier gefunden habe.

Cord

 

 

MzKlMu

Hallo,
ZitatHabe mich an die Anweisung von MS gehalten, ...
nein, nicht ganz. Hier wird ein zusammengesetzter Primärschlüssel verwendet, hast Du aber nicht. Von zusammengesetzten PS wird aber im allgemeinen abgeraten. Du brauchst für die n:m Tabelle einen extra PS und das Feld ID_Item darf auf keinen Fall der PS sein.

Aber mal noch zur Tabelle "tblTeile".
Kann ein Teil in mehreren Stücklisten vorkommen ?
Gruß Klaus

MrB

Und ich dachte jetzt habe ich endlich eine gute Anleitung gefunden.
Also muss das so sein wie in meiner tblStuecklisteBuilding, die hat einen eigenen PS und verbindet die PS der 2 anderen Tabellen über 1:n mit referentieller Integrität, siehe Bild.
Sie dürfen in diesem Board keine Dateianhänge sehen.

Zitat von: MzKlMu am Juli 25, 2024, 15:22:49Kann ein Teil in mehreren Stücklisten vorkommen ?

Ja sogar in vielen.

MzKlMu

Gruß Klaus

MrB

Kann ich die denn so lassen?
Habe mir gestern die Augen wund gelesen, um die doppelten Werte zu finden und zu eleminieren.


MzKlMu

Hallo,
Deinen letzten Beitrag verstehe ich nicht.

Was willst du denn so lassen ?

Um welche doppelten Werte geht es ?

PS: Um doppelte Werte zu finden, kann man Access selbst verwenden. Dazu erstellt man eine Abfrage zur Duplikatsuche. Access hat dazu sogar eine Vorlage bei den Abfrageassistenten (Siehe Bild).
Gruß Klaus

MrB

Meinte die Tabelle mit den beiden Schlüsseln, dort waren auch doppelte drin, sprich die Kombination der beiden Schlüssel war gleich.