Hallo,
ich habe folgendes Problem.
Ich möchte gerne einem Material eine Kategorie zuordnen. Die Kategorien sind in einer eigenen Tabelle gespeichert. Am Material gibt es ein Feld zum Abspeichern der Kategorie.
Allerdings kann nicht jede beliebige Kategorie gewählt werden. Es hängt von der Zuordnung (Branche) des Materials ab, welche ich wählen darf.
Dafür gibt es jetzt eine zusätzliche Tabelle mit Branchen. Jede Kategorie hat (via Beziehung zur ID der Branche) genau eine Branche zugeordnet bekommen.
Wenn ich also nun ein Material abrufe, soll eine Abfrage für eine Kombinationsfeld herausfinden, welche Kategorien für die Branche des Materials zulässig sind.
Ich habe es schon geschafft, dass in dem Kombinationsfeld nur die Kategorin die für das erste Material zulässig sind anzuzeigen, nämlich über dieses Statement:
SELECT Kategorien.KategorieID, Kategorien.KategorieName, *
FROM Branchen LEFT JOIN Kategorien ON Branchen.BrachenID = Kategorien.KategorieBrancheID
WHERE (((Branchen.BranchenName)=[Forms]![Material bearbeiten]![manBranchen]));
Aber wenn ich dann weiterschalte auf ein Material mit einer anderen Branche, stehen immer nur dieselben Kategorien drinnen!
Was mache ich da falsch?
Bitte um Hilfe!
Hallo,
was ist das für ein Feld mit dem Branchennamen ?
Ist dieses Feld gebunden (Steuerelementinhalt ?)
Zu beachten wäre auch, dass die Where Klausel nicht über den Namen gehen sollte, sondern über die BranchenID (den Primärschlüssel) das ist ja der Sinn des Primärschlüssels. Überhaupt, wird grundsätzlich nicht der Klartext gespeichert sondern nur die jeweilige ID.
Der LEFT JOIN dürfte hier auch fehl am Platz sein.
Bitte beschreibe die Tabellen mit den Feldern mal genauer.
Kannst Du mal ein Beziehungsbild hier posten ?
Hallo,
die Branchen könnte ich natürlich gleich eindeutig gestalten - nämlich als eigene Schlüssel. Aber es sind halt keine numerischen Werte, deswegen will ich das nicht.
Jedenfalls generiere ich die Branchen beim Import der Excel Daten. Ich wüsste nicht, wie ich hier mit den IDs arbeiten könnte.
Hallo,
ZitatAm Material gibt es ein Feld zum Abspeichern der Kategorie.
welches Feld ?
Die Beziehungen halte ich in dieser Form für unbrauchbar.
Es ist keine referentielle Integrität eingestellt und eine Beziehung zur Kategorie fehlt.
Zitatdie Branchen könnte ich natürlich gleich eindeutig gestalten - nämlich als eigene Schlüssel.
das sollst Du natürlich nicht machen, habe ich auch nicht gesagt.
Du kannst den PS numerisch lassen und trotzdem darüber suchen/filtern.
Ich wüsste nicht, wie ich hier mit den IDs arbeiten könnte.
Beim Import nicht, aber bei den nachfolgenden Schritten.
Meine Fragen hast Du auch nicht beantwortet. Fragen enden mit einem Fragezeichen. ;D
Hallo,
neben der besagten fehlenden Normalisierung ( und den damit einhergehenden Fallgruben, sprich fehlerhaft funktionierender Datanbank) könnte der SQL-String für das Auswahl-Kombifeld so lauten:
SELECT KategorieID, KategorieName FROM Kategorien INNER JOIN Branchen ON Branchen.BrachenID = Kategorien.KategorieBrancheID
WHERE BranchenName = [Forms]![Material bearbeiten]![manBranchen]
Ich weiß, dass die Datenbank nicht gerade professionell entwickelt ist. Andererseits hab ich dafür auch nicht die Ausbildung und mache das nur, weil die externe Firma, die das früher gemacht hat, sich als recht gierig entpuppt hat. (Bewusst Fehler eingebaut --> Geld für Service verlangt.....)
Jedenfalls geht es auch mit dieser SQL Anweisung nicht. Oder nur für den ersten Datensatz.
Wie könnte ich die Datenbank denn jetzt noch normalisieren, damit es geht?
Hallo,
das Kombinationsfeld muss beim Wechseln des Datensatzes aktualisiert werden, und zwar mit Me.Kombifeld.Requery im Ereignis "Form_Current".
Perfekt! Das hat geklappt! Danke!