8.4k Aufrufe
Gefragt in Datenbanken von
Ich habe ein kleines Problem

ich habe ein Formular mit 4 Kombiboxen.
Die Herkunft bezieht sich immer auf die gleiche Tabelle, aber auf die verschiedene
Spalten. Was ich möchte ist, wenn ich den Text in Kombibox 1 auswähle, dann will
ich in der zweiten Kombibox nur die Datensätze angezeigt bekommen, welche mit
Kombibox 1 passen.
Ich habe schon hier auf paar Themen gesehen, aber irgendwie klappt das nicht.
Was ich bis jetzt gemacht habe ist folgendes.

In Kombibox 1 habe in im Feld "nach Aktualisierung", die "Ereignisprozedur"
gestartet und den code so eingetippt:

Private Sub Spalte_1_AfterUpdate()
Spalte_2.Requery
End Sub

Leider werden die Datensätze in Spalte 2 gar nicht upgedatet, sondern ich sehe
alles.

Kann mir bitte jemand genau sagen, was ich falsch mache?
und mir vielleicht detailliert beschreiben, wie man es richtig umsetzt?

Danke

7 Antworten

0 Punkte
Beantwortet von marie Experte (2k Punkte)
Also dein Kombi 1 heißt Spalte_1 und dein Kombi 2 heißt Spalte_2 oder was??

Private Sub Spalte_1_AfterUpdate()
Spalte_2.Requery
End Sub

Leider werden die Datensätze in Spalte 2 gar nicht upgedatet, sondern ich sehe alles.


Also wo hast Du Deiner Meinung nach geschrieben, nach welchem Kriterium gefiltert werden soll? Und was soll Requery bewirken?

versuchs mal so:

Private Sub Kombinationsfeld1_AfterUpdate()

Kombinationsfeld2 = Null

End Sub

Private Sub Kombinationsfeld2_Enter()

Dim SQL As String

SQL = "SELECT Spalte2 FROM deineTabelle"
If Not IsNull(Me.Kombinationsfeld1) Then SQL = SQL & " WHERE Spalte1='" & Me!Kombinationsfeld1 & "' "
Kombinationsfeld2.RowSource = SQL

End Sub


Falls Du nicht klarkommst lies Dir das mal durch:
www.office-loesung.de/ftopic6700_0_0_asc.php

Gruß marie
0 Punkte
Beantwortet von
Hallo Marie,

danke für die Antwort,

irgendwie scheint es bei meiner Lösung nicht zu funktionieren :(
woran es liegt weiß ich leider nicht,

der Link von dir war gut, aber nicht in bei meiner Lösung. Den dort geht es um die 3 Tabellen, und jede
Tabelle hat noch einen Aktivschlüssel.
Bei meiner jedoch ist alles in einem. Man kann es so vorstellen wie z.b.

die Tabelle heisst z. B.
01 Auto

dort gibt es solche Darstelltung

Auto Marke Аuto Modell Auto Motor
Audi A4 2,0
Audi A6 2,4
BMW 320 2,0
BMW 535 3,5

Wenn ich deine Formel so einsetzte dann müsste es so heissen:

Private Sub Auto_Marke_AfterUpdate()
Auto_Modell = Null
End Sub

Private Sub Auto_Modell_Enter()
SQL = "SELECT Level_Modell FROM [tabelle]![T01 Auto]"
If Not IsNull(Me.Auto_Marke) Then SQL = SQL & " WHERE [Auto Marke]='" & Me![Auto_marke] & " ' "
Auto_Modell.RowSource = SQL

End Sub

Ich nutze das Office Access 2007.

Danke für die Antwort bzw. die Lösung

Ruslan
0 Punkte
Beantwortet von marie Experte (2k Punkte)
SQL = "SELECT Level_Modell FROM [tabelle]![T01 Auto]"


Hm, das verstehe ich nicht, was Du da schreibst, "DeineTabelle" heisst "T01 Auto", war um tippst Du nicht ganz konkret meinen Text ab?? Dann muss es heißen
SQL = "SELECT Spalte2 FROM [T01 Auto]"


oder bestenfalls

SQL = "SELECT [T01 Auto].Spalte2 FROM [T01 Auto]"


so hatte ich es ausprobiert, und so hatte es funktioniert. Wenn Du halt künftig gleich die richtigen Tabellen und Spaltennamen nehmen würdest hätte ich es damit ausprobiert und man würde Deinen Fehler schneller orten können, nun musste halt selbst mit Deinen bezeichnungen umändern, aber bitte nur eckige Klammern setzen bei namen mit Leerzeichen, sonst nix ändern. Und künftig solchen Blödsinn unterlassen, keine Leerzeichen oder Sonderzeichen in Tabellennamen oder Feldnamen.

Datensatzherkunft von Kombinationsfeld1 ist bei mir:
SELECT DISTINCTROW deineTabelle.Spalte1 FROM deineTabelle;


also:
SELECT DISTINCTROW [T01 Auto].Spalte1 FROM [T01 Auto];


Datensatzherkunft von Kombinationsfeld2 muss leerbleiben, weil Du ja per Code füllst.
Kombinationsfeld2.RowSource = SQL


Und wenn etwas nicht geht kann ich dir nur weiterhelfen wenn du mir sagst was nicht geht, bzw welche fehlermeldung wo erscheint
Gruß Marie
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Im übrigen hast Du vergessen
Dim SQL As String
zu schreiben, dadurch kriegste natürlich auch eine Fehlermeldung. Und den fehler hätte ich sofort geortet, wenn Du die fehlermeldung hingeschrieben hättest :-(
0 Punkte
Beantwortet von
Hallo,

is es möglich dir meine DB zu mailen? irgendwie habe ich glaube ich einen blackout bei der geschichte.
Oder hast du Skype?

Danke und Gruß

Ruslan
0 Punkte
Beantwortet von marie Experte (2k Punkte)
nö, office 2007 hab ich zwar irgendwo installiert, aber ich arbeite nicht damit, kenn mich irgendwie noch nicht aus mit Access 2007 und hab auch keine Zeit im Moment mich damit zu befassen. Warum kannst Du nicht versuchen hier zu schreiben was Du tust und welche Fehlermeldung kommt? Ich hab das getestet, wie ich es Dir oben geschrieben habe. Und Du brauchst locker mal eine Woche bis Du überhaupt hier reinschaust, das erste Mal sogar zwei Wochen, und dann bist Du noch zu bequem das mal konsequent auszuprobieren und hier zu schreiben was nicht funktioniert? Das finde ich nicht in Ordnung, das ist ein Forum wo auch andere mit demselben Problem die Antworten für sich verwenden können sollten, die haben nichts davon wenn ich in Deiner Datenbank schaue was Du jetzt nicht verstanden hast.

Wenn Du jetzt mal konkret das tust was ich geschrieben habe und mir ordentlich erklärst was wie wo nicht läuft, dann schau ich gerne mal rein, aber nicht wenn Du nach Wochen mal sagst: Ich kanns nicht und mich rumrätseln lässt was Du nicht hinkriegst.

Gruß Marie
0 Punkte
Beantwortet von ruslan7576 Einsteiger_in (5 Punkte)
Ich habe es gelöst das Problem

und der Code lautet dann so:

Private Sub Bezeichnung_AfterUpdate()
Dim SQL As String

SQL = "select distinct [tabelle].[spaltenbezeichunung] from [tabelle]"
if not IsNull (Me.Bezeichung Kombibox.Value) Then SQL = SQL & "where [tabelle].[spaltenbezeichnung]= '"
+ Me.Bezeichung Kombibox.Value + "'"
Bezeichnung Kombibox.Rowsource = SQL

Bezeichnung Kombibox.Requery
End Sub
...