Hallo,
ich habe leider gar keine Erfahrung mit Access. Nun sitze ich an einem Formular fest:
Ich habe ein Kombinationsfeld welches ich erfolgreich durch eine Tabelle füllen kann.
Wenn ich dort eine Auswahl getroffen habe, soll die Auswahlmöglichkeit im zweiten Kombifeld dementsprechend sein. Die Daten sollen sollen aber aus einer Tabelle gezogen werden.
Alternativ über das bereits funktionierende eingebundene Listenfeld.
Beispiel:
Kombifeld 1, Auswahl Artikel-Nummer - Kombifeld 2 = Spalte Artikelnummer aus tbl_xyz
Kombifeld 2, Auswahl Artikelbezeichnung - Kombifeld 2 = Spalte Artikelbezeichnung aus tbl_xyz
...
Geht sowas? Bisher war ich immer mit Excel VBA unterwegs.
Dankeschön.
Hallo,
Zitatie Daten sollen sollen aber aus einer Tabelle gezogen werden.
Klar, woher denn sonst?
Schau mal hier (https://www.donkarl.com?FAQ4.36) wegen abhängiger Kombifelder.
gruss ekkehard
Hi, ich kenne den Artikel von Donkarls. Aber leider verstehe ich es nicht.
Ich weiß einfach nicht, wie ich den Bezug von dem ersten Kombifeld zu dem zweiten Kombifeld aufbauen soll, die Daten aber abhängig von der Auswahl, aus einer anderen Tabelle gelesen werden können.
Auswahl des ersten Kombifelds soll sich auf Spalten einer anderen Tabelle beziehen und bisher sehe ich nur, wie ich Spalten zueinander verknüpfen kann, aber nicht Datensätze zu Spalten.
Hallo,
zeige ein Bild des beziehungsfensters, damit man sich ein Bild von den Zusammenhängen machen kann.
Beziehungen sind ja hoffentlich angelegt.
@uncontrolled Mal abgesehen von deiner etwas wirren Prosa, habe ich die FAQ grad noch
mal nachgelesen und verstehe wohl dein Unverständnis; - da wird der Aufbau
des ersten Kombis nicht erläutert.
Das erste Kombi für die Vorauswahl sieht normal so aus:
es ist ungebunden, d.h. besitzt keinen Steuerelemente Inhalt
DS-Herkunft:
SELECT EineTabelle_ID, TextfeldZurAuswahl FROM EineTabelle(weitere Felder im SELECT möglich)
Anzahl Spalten: min. 2 ansonsten entsprechend der Feldliste
Spaltenbreiten: 0cm, weitere nach Anforderung
gebundene Spalte: 1
Die DS-Herkunft des zweiten, abhängigen Kombis muss zwingend ein Fremd-
schlüsselfeld zur Tabelle im ersten haben. Diese wird dann vom 1. Kombi
dynamisch gesetzt
Private Sub ErstesKombi_AfterUpdate()
Me.ZeitesKombi.RowSource = _
"SELECT AndereTabelleID, TextfeldZurAuswahl " _
& "FROM AndereTabelle " _
& "WHERE EineTabelleID_F = " & Me.ErstesKombi
End SubDas Ganze natürlich ohne zu wissen, was dann mit dem 2. Kombi passieren
soll.
gruss ekkehard
Hallo,
erst einmal danke Euch beiden für die Antworten. Also das mit dem zusätzlichen Schlüssel habe ich insofern nicht umsetzen können, da ich keine Schlüssel direkt zuordnen kann. Mit den Beziehungen komme ich bei dieser Konstellation nicht klar.
Mit VBA habe ich es so funktional umgesetzt, komme aus Excel VBA und möchte von dort nun auf Access umsteigen, habe damit aber kaum gearbeitet. Daher fällt es mir mit VBA leichter.
Dennoch würde ich das natürlich gerne "richtig" lösen.
Private Sub KombiFeld01_AfterUpdate()
Dim strSQL As String, Auswahl As String, cbo As ComboBox, cbo2 As ComboBox, sortieren As String
Set cbo = Me!KombiFeld01
Set cbo2 = Me!KombiFeld02
cbo2 = ""
Select Case cbo
Case Is = "Artikelbezeichnung"
Auswahl = cbo
Case Is = "Artikel-Nummer"
Auswahl = "ArtikelNummer"
Case Is = "FA-Nummer"
Auswahl = "FANummer"
Case Is = "Fehlermeldung Nr."
Auswahl = "Nr"
Case Is = "Kunde"
Auswahl = "KundeLang"
Case Is = "Status"
Auswahl = cbo
Case Is = "Zuständig"
Auswahl = "zustaendig"
End Select
If cbo = "Fehlermeldung Nr." Then
sortieren = "MAX(ID)"
Else
sortieren = "" & Auswahl & ""
End If
strSQL = "SELECT " & Auswahl & " FROM tbl_Fehlermeldungen GROUP BY " & Auswahl & " ORDER BY " & sortieren & " ASC"
'Debug.Print strSQL
cbo2.RowSource = strSQL
End Sub
Theoretisch könnte ich auch versuchen den Bezug zur Listbox herzustellen, welche bereits mit der Tabelle verknüpft ist. Aber wie gesagt, ich kenne mich nicht aus und mache gerade Learning by Doing mit 42 Jahren :-).
O.K., das ist aber eine etwas andere Nummer; - geht aber auch.
In diesem Fall wird ja der SELECT-Teil dynamisch verändert und
nicht die WHERE-Klausel. Das hast du ja umgesetzt, wenn auch
noch verbesserungswürdig soweit ich das beurteilen kann.
Ohne Schlüsselfelder und Beziehungen wirst du allerdings nicht
viel weiter kommen.
Und genau das ist der Punkt, ich weiß nicht wie es geht. Das genau wäre schön zu erfahren, damit ich nicht alles komplizierter mache.
Vielleicht kannst du mir ein Beispiel nennen, wie ich diese Beziehungen hinbekomme?
Habe einen Abfrageentwurf gestartet ohne Verbindung der beiden Tabellen und das wäre das Ergebnis. Ist das was gemeint ist mit Schlüsselfeldern?
Hallo,
Beziehungen sind das A+O einer Datenbank.
Beziehungen anzulegen ist der 1.Schritt nach dem Anlagen der Tabellen.
Nur mit Beziehungen wird Deine Datenbank richtig funktionieren. Und vieles wird mit Beziehungen viel einfacher zu realisieren sein. Unter anderem auch abhängige Kombifelder.
Um es mal krass zu formulieren, eine Datenbank ohne Beziehungen kannst du in die Tonne treten.
Das Beziehungsfenster ist auch ein wirksames Hilfsmittel die Struktuer einer Datenbank Außenstehenden auf einen Blick zugänglich zu machen.
Sind in der Datenbank wirklich keine Beziehungen angelegt ?
Nachtrag:
Zitat von: undefinedIst das was gemeint ist mit Schlüsselfeldern?
Nein, die Schlüsselfelder sind die Felder "ID". Das ist der Primärschlüssel (PS). In abhängigen Tabellen braucht es dann einen Fremdschlüssel (FS) der auf den PS verweist.
Die gezeigte Abfrage ist unbrauchbar, weil es zwischen den Tabellen keine Beziehung gibt.
Die Abfrage liefert ein Kreuzprodukt beider Tabellen.
Bei 100 Datensätze (DS) bei den Fehlern und 20 DS beim Filter zeigt die Abfrage 100*20 DS = 2000 DS.
Was kommt denn in die Tabelle "tblFilter"?
Alleine der Name ist schon suspekt, für einen Filter braucht es im Regelfall keine Tabelle.
Die Tabelle für die Fehlermeldungen ist auch weit von der in einer Datenbank erforderlichen Normalisierung entfernt.
Da fehlen Tabellen für die Artikel, für die Maschinen und für die Werkzeuge. Ich bin sicher, wenn man von der Tabelle alle Felder sehen könnte, kommt da noch viel mehr dazu.
Du solltest Dich mit den Grundlagen zu Access bzw. relationalen Datenbanken beschäftigen.
Mit Excelerfahrung wirst Du da nicht weiterkommen. Tabellen mit Excelgestaltung sind im Regelfall für Access unbrauchbar.
Hier mal 2 Links:
https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/
Und:
https://www.access-tutorial.de/
Danke für die Antwort.
Ich verstehe und dachte, es wäre einfacher...
Die Tabelle Fehlermeldungen ist ein 1 zu 1 Import aus Excel. Dies ist die Auflistung von erstellten Fehlermeldungen und aktuell wird jede Fehlermeldung aus Excel dort übertragen, da ich auf Access wechseln müsste (Excel ist da einfach schon lange am Limit).
Tatsächlich habe ich bereits Beziehungen. Diese konnte ich bereits aus einer SQL-Datenbank importieren. Letztendlich sind darüber Verknüpfungen möglich, welche ich für die Fehlermeldungen verwenden muss, da ich diese auch in Excel bereits verwendet habe.
Die Tabelle tblFilter ist an sich kein Filter sondern sind die Filter bzw. Suchmöglichkeiten für den Filter.
EDIT: Also verstehe ich es richtig, dass ich zunächst alle Einträge der Liste Fehlermeldungen in eine eigene Tabelle in Access tragen müsste um daraus dann über Schlüsselfelder eine Verbindung aufbauen zu können?
Ich möchte ja anhand der Auswahl Fehlermeldungen suchen können.
Nur wie ich das sehe, muss ich das Ganze schon wieder neu aufbauen (6 Monate VBA-Programmierung umsonst).
Und dazu fehlt mir dann das Wissen. :-(
ZitatTatsächlich habe ich bereits Beziehungen.
Dann zeig doch mal dein Beziehungsbild. Eine datenreduzierte
Beispiel-Db wär auch nicht schlecht.
Hi,
ich habe wohl nur eine Beziehung. Der Rest war nur SQL-Code für die Verknüpfungen aus der Datenbank.
Ich sende mal wie es aussieht, aber muss ja wie ich es verstehe, nun irgendwie die Tabelle "Fehlermeldungen" auseinander nehmen, sodass ich eine Verbindung herstellen kann.
Das kann ja nichts werden.
Ich versuche mich mal reinzudenken, jetzt ist ja noch der Anfang.
Hallo,
Die angelegte Beziehung ist Quatsch, kannst du löschen. Die beiden Tabellen
haben doch gar nichts miteinander zu tun. Die Filtertabelle ist doch nur
eine Hilfstabelle.
Wenn du der tbl_FM_Filter ein zusätzl. Feld mit dem Feldnamen spendierst,
würde die RowSource von Kombi01 dann so aussehen
SELECT Feldname, FMFilter FROM tbl_FM_FilterSpalten dann zwei (0cm, 3cm), gebundene Spalte bleibt dabei auf 1.
Deinen Code kannst du dann folgermassen "eindampfen"
Private Sub KombiFeld01_AfterUpdate()
Dim strSQL As String
Dim Auswahl As String
Dim cbo As ComboBox
Dim cbo2 As ComboBox
Dim sortieren As String
With Me
.KombiFeld02 = Null
Auswahl = .KombiFeld01
If .KombiFeld01 = "Fehlermeldung Nr." Then
sortieren = "MAX(ID)"
Else
sortieren = "" & Auswahl & ""
End If
strSQL = "SELECT " & Auswahl & " FROM tbl_Fehlermeldungen GROUP BY " & Auswahl & " ORDER BY " & sortieren & " ASC"
'Debug.Print strSQL
.KombiFeld02.RowSource = strSQL
End With
End Sub
gruss ekkehard
Super, danke. Auf den Feldnamen in der Tabelle bin ich nicht gekommen.
Ich versuche mich gerade in Access einzulesen und fange gerade mit einfachen Formularen an. Z. B. dem Anlegen einer Tabelle für Maschinen.
Ich habe es schon besser verstanden.
Kombifeld = NULL ist das so üblich? Gut zu wissen.
Danke für die Hilfe.
Edit: Ähm, wo finde ich denn den Knopf "Thema gelöst"?