Hallo Zusammen,
Momentan habe ich etwas Zeit und möchte mich mit dem Thema Access näher beschäftigen.
Ich habe (ziemlich vereinfacht) folgende Tabellen
Artikel
- ArtikelID
- ArtikelgruppenID
Artikelgruppen
- ArtikelgruppenID
- Marke
- Kategorie
Reparatur
- RepID
- ArtikelID
- KundeID
- Maßnahme
- Dauer
Kunde
- KundeID
- Kundenname
Nun möchte ich ein Formular erstellen, das es mir ermöglicht neue Reparaturen zu erfassen.
Hierfür habe ich mir jedoch einige Restriktionen auferlegt, welche ich gerne in das Formular einbauen möchte:
1.) Ich möchte die bereits erfassten Reparaturen nicht in dem Formular auswählen können, sondern nur neue Reparaturen erfassen
2.) Das Feld Kunde soll über ein Dropdown Menü auswählbar sein. Dieses soll nur den Namen enthalten
3.) Die Artikel sollen über drei Dropdown Menüs ausgewählt werden können. Dropdown eins ist für die Vorsortierung der Marke, Dropdown zwei für die Vorsortierung der Kategorie und in Dropdown 3 wähle ich dann den entsprechenden Artikel aus
Um dies zu erreichen, habe ich die folgenden Schritte unternommen.
1.) Ich habe ein leeres Formular erstellt
2.) und drei Kombinationsfelder hinzugefügt (im folgenden Dropdowns genannt)
3.) Diesen Dropdowns habe ich SQL Statements hinzugefügt um die Marken und die Kategorien auszuwählen.
4.) Diese Dropdowns habe ich mittels VB miteinander verknüpft, so dass nur die Kategorien angezeigt werden, welche auch für diese Marke verfügbar sind.
5.) Im dritten Dropdown Menü kann ich nun die Artikel anhand der Auswahl der Marken und der Kategorien auswählen.
Nun habe ich aber ein ganz triviales Problem:
Wie kann ich von hier aus fortfahren?
Wenn ich nun Kombinationsfelder aus der Tabelle "Reparatur" hinzufügen möchte (z.B. Dauer) und anschließend in die Formularansicht wechsle, bleibt mein Formular einfach weiß.
Ich denke dies liegt, an der Datengrundlage des Formulars.
Wenn ich jedoch über den Assistenten ein neues Formular auf Basis der Tabelle "Reparatur" erstelle, kann ich in den Dropdowns über SQL nicht mehr die Tabellen Artikel und Artikelgruppe abfragen.
Was mache ich falsch?
Ich hoffe mein Problem wird einigermaßen klar.
Wie würdet ihr so ein Projekt angehen? Welche Vorgehenswiese würdet ihr empfehlen?
Hallo,
Zu
A_1) Setze die Formulareigenschaft "Daten eingeben" auf ja.
A_2) Wo ist da das Problem? Datenherkunft für das an "KundeID_f" gebundene Kombi :
Select KundenID, Kundenname from Kunden Order by Kundenname
Spaltenanzahl: 2
Spaltenbreiten: 0cm; 5cm
A_3)
wenn "Marke" und "Kategorie" mit separaten Kombis ausgewählt werden müssen, so ist der Tabellenaufbau unvollständig. Es fehlt "tblMarken" die als Datenherkunft für das Marke-Auswahlkombi dient und die mit "Artikelgruppen" in 1:n-Beziehung stehen muss.
Desgleichen "tblKategorien" für die Vorauswahl einer Kategorie
Die beiden Vorauswahl-Kombis müssen ungebunden sein.
Das 3. Kombi für die Auswahl eines Artikels muss an "Reparatur.ArtikelID" gebunden sein und als Datensatzherkunft Tabelle Artikelgruppen haben.
Tipp: Benenne die Fremdschlüsselfelder eindeutig, d. h. ähnlich wie "ArtikelID_f" in Tabelle "Reparatur".
Das Formular erhält als Datenherkunft die Tabelle "Reparatur", bzw. eine Abfrage zu dieser Tabelle.
Vergiss den Assistenten, der nur beschränkte Möglichkeiten für komplexere Formulare bietet.
Zitatbleibt mein Formular einfach weiß.
entweder sind die Formeigenschaften "Bearbeitung zulassen" oder "Anfügen zulassen" auf nein gesetzt oder die Abfrage in der Datenherkunft ist nicht aktualisierbar.
ZitatWenn ich nun Kombinationsfelder aus der Tabelle "Reparatur" hinzufügen möchte (z.B. Dauer)
Wozu braucht es ein Kombi für die Eingabe einer "Dauer"? Welche Einheit (Stunden, Minuten,...) und welche Auflösung (Minuten, Sekunden,...) hat dieser Wert?
Hallo DF6GL,
vielen Dank für deine ausführliche Antwort.
Ich werde dies direkt ausprobieren.
Ich wusste nicht, dass ich eigene Tabellen für die Marken und die Kategorien brauche, da ich davon ausgegangen bin, dass die Informationen ja schon in der Tabelle Artikelgruppen enthalten sind.
Aber ich normalisiere die Tabellen dann und verwende die Tabelle Artikelgruppe dann nur noch als Zuordnungstabelle.
Vielen vielen Dank! Ich habe bestimmt noch Fragen und komme bestimmt noch mal auf dich zurück!
Hallo Zusammen,
leider habe ich es wohl doch nicht genau verstanden.
Also mein Problem ist folgendes:
tblMarken| IDMarken | txtMarke |
| 1 | Marke A |
| 2 | Marke B |
tblKategorien| IDKategorien | txtMarke |
| 1 | Kategorie A |
| 2 | Kategorie B |
| 3 | Kategorie C |
tblArtikelgruppen| IDArtikelgruppen | IDMarken_f | IDKategorien_f |
| 1 | 2 | 1 |
| 2 | 2 | 2 |
| 3 | 1 | 2 |
tblArtikel| IDArtikel | IDArtikelgruppen_f | Artikelbezeichnung |
| 1 | 2 | toller Artikel |
| 2 | 3 | den möchte ich auswählen können |
| 3 | 3 | den hier auch |
In der Konstellation möchte ich gerne in
Kombo 1 -> Marke -> "Marke A" auswählen
in
Kombo 2 -> Kategorie -> "Kategorie B" auswählen
Dann muss ich in tblArtikelgruppen die IDArtikelgruppen herausfinden die passt.
In diesem Beispiel also IDArtikelgruppen = 3
Nun brauche ich in Kombo 3 alle Artikel, welche IDArtikelgruppen_f = 3 haben.
Die Lösung von dir gibt mir die Artikelgruppen aus.
Momentan sehe ich in Kombo3 also nur eine Liste meiner Marken, so gut wie alle davon doppelt.
Ich möchte aber gerne die Artikelbezeichnung sehen und nur die IDArtikel in die dahinterliegende Reparaturdatenbank schreiben.
Ich hoffe ich habe es nicht zu kompliziert erklärt.
Hallo,
bevor ich hier ellenlange Prosa schreibe, lade die DB hier mal hoch, komprimiert/repariert und gezippt.
Dann baue ich das mal ein.
Frage: Was passiert anschließend mit der Anzeige im Kombi3 ?
Hallo DF6GL,
ich glaube ich habe es geschafft.
Während ich die Datenbank pseudo-anonymisiert nachgebaut habe, um sie hier hochzuladen, bin ich auf das Ergebnis gekommen! Freue mich sehr.
Dennoch lade ich die anonymisierte Datenbank hier hoch, damit auch andere an meinem Glück teilhaben können.
Die Lösung war ein SQL Statements mit 2 Joins.
Ich kann zwar ein wenig SQL aber hier musste ich mir mit dem Editor in Access helfen.
Hat aber geklappt.
Jetzt muss ich das nur noch in meine "echte Datenbank" einbauen.
Vielen vielen lieben Dank!
Hallo,
na, so ganz funktioniert es noch nicht...
1) Setze bei allen Beziehungen den Haken bei "Referenzielle Integrität" und evtl. (wo sinnvoll) auch bei "Aktualisierungweitergabe".
2) Das Kombi IDArtikel_f reagiert nicht auf die Auswahl der beiden anderen Kombis.
Dazu muss IDArtikel_f aktualisiert werden. Baue den folgenden Code im VBA-Editor ein:
Option Compare Database
Option Explicit
Private Sub IDArtikel_f_Enter()
Me!IDArtikel_f.Requery
End Sub
und vergewissere Dich, dass dann anschließend beim Ereignis "Beim Hingehen" des IDArtikel_f-Kombis "Ereignisprozedur]" eingetragen ist.