Hallo,
in der DB sollen nach Auswahl einer Option aus einem Drop-Down-Menü zwei andere Felder mit den entsprechenden Werten befüllt werden.
Soweit funktioniert das auch.
ALLERDINGS
Muss ich den im Drop-Down-Menü gewählten Wert nochmal in einer Paramterabfrage eingeben.
Genau diese Paramterabfrage hätte ich gern abgeschaltet.
Kann mir jemand helfen?
Hier mal der betreffende Code:
Private Sub VB_AfterUpdate()
Dim xVB, Abfrage1 As String
On Error GoTo Fehler
xVB = VB
If IsNull(VB) Then Exit Sub
Abfrage1 = "SELECT tbl_VB.VB, tbl_VB.Region, tbl_VB.vbPLZ " & _
"INTO [tbl_Abfragen_VB2] " & _
"FROM [tbl_VB] " & _
"Where (((tbl_VB.VB) = " & VB & "));"
DoCmd.SetWarnings False
DoCmd.RunSQL Abfrage1
DoCmd.SetWarnings True
Me!Region = DLast("Region", "tbl_Abfragen_VB2")
Me!vbPLZ = DLast("vbPLZ", "tbl_Abfragen_VB2")
Exit Sub
Fehler:
MsgBox "...", vbInformation, "Hinweis"
End Sub
Hallo,
Private Sub VB_AfterUpdate()
Dim Abfrage1 As String
On Error GoTo Fehler
If IsNull(Me!VB) Then Exit Sub
Abfrage1 = "SELECT tbl_VB.VB, tbl_VB.Region, tbl_VB.vbPLZ " & _
"INTO [tbl_Abfragen_VB2] " & _
"FROM [tbl_VB] " & _
"Where tbl_VB.VB = " & Me!VB
Currentdb.Execute Abfrage1, dbFailOnError
Me!Region = DLookup("Region", "tbl_VB","VB = " & Me!VB )
Me!vbPLZ = DLookup("vbPLZ", "tbl_VB","VB = " & Me!VB )
Exit Sub
Fehler:
MsgBox "...", vbInformation, "Hinweis"
End Sub
Hallo,
du musst mal kontrollieren, warum die Abfrage nochmal ausgeführt wird, bzw wieso der Parameter überhaupt noch mal zum Tragen kommt.
Wenn es NICHT notwendig ist diese Abfrage auszuführen (geht aus deiner Beschreibung nicht hervor) solltest du sie löschen.
ABER:
Den SQL-String hast du aus dem Abfrageeditor kopiert, soweit ich das sehen kann - hast du etwa die Abfrage danach gespeichert?
Der Name Abfrage1 läßt diesen Schluß nämlich zu!
Wenn das so ist, wird hier ...
DoCmd.RunSQL Abfrage1
... eventuell die gespeicherte Abfrage ausgeführt! (und die enthält wahrscheinlich keinen Parameter dafür aber den Verweis auf eine Variable (VB) , die in einer gespeicherten Abfrage nicht ausgelesen werden kann)
Ändere auch folgendes:
Abfrage1 As String
auf
Dim strSQL as String
und dann ...
strSQL = "SELECT tbl_VB.VB, tbl_VB.Region, tbl_VB.vbPLZ " & _
"INTO [tbl_Abfragen_VB2] " & _
"FROM [tbl_VB] " & _
"Where (((tbl_VB.VB) = " & VB & "));"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
Vielleicht hilfts?
Grüße
Peter
@DF6GL
Bei deiner Variante kommt immer nur meine Fehlermeldung (die mit den drei Punkten).
@database
Deine Variante läufte genauso wie meine ab - es kommt weiterhin die Parameterabfrage.
INFO: Wenn ich in der Parameterabfrage den Wert eingebe, den ich vorher per Drop-Down gewählt habe, stellt er auch die richtigen Werte dar. Wenn ich die Paramterabfrage abbreche, dann stellt er keine Werte dar.
Und ja, im Prinzip habe ich den Code aus einer funktionierende Abfrage kopiert und umgeschrieben!
Hallo,
dann mußt du feststellen an welcher Stelle der Aufruf erfolgt, diese Abfrage muss ja die Datenherkunft für irgendwas darstellen. ::)
Dass die Aufgerufen wird ist ja kein Feature von Access sondern das hat einen Grund ;)
ist diese Abfrage die Datenherkunft für dein Formular?
Zitatim Prinzip habe ich den Code aus einer funktionierende Abfrage kopiert
Schlimmstenfalls lade die DB komprimiert mit ein paar Spieldaten hier hoch, aus dem Codeausschnitt lässt sich nicht festlstellen wo hier ein Aufruf stattfindet und wie der unterbunden werden kann
Ich frage auch mal umgekehrt ...
Kann man diese Abfrage auch einfacher gestalten?
Im Prinzip wählt der Nutzer im Hauptformular aus einer Drop-Down-Liste einen Eintrag aus.
Dieser Eintrag (aus den Vorgegebenen) entstammt auch der Datenquelle (Spalte "VB").
Jetzt sollen zu dem ausgewählten VB aus der Datenquelle die Spalteninhalte der Spalten "vbPLZ" und "Region" ins Hauptformular "übertragen" werden.
Hallo,
im Prinzip gibt's alles in verschiedenen Ausführungen ... 8)
nur erscheint mir da das Konzept nicht ganz rein und klar - du liest Daten aus der Tabelle tbl_VB und trägst sie 1:1 in die Tabelle tbl_Abfragen_VB2 ein.
Grundsätzlich ist so etwas nichts Verwerfliches allerdings - da du auch Region und PLZ überträgst, im gegenständlichen Fall nicht notwendig
weil du diese Werte ja jederzeit auch über eine Abfrage aus den beteiligten Tabellen (in tbl_VB und tbl_Abfragen_VB2 in Beziehung gesetzt)
über den Schlüssel VB ermitteln kannst. Deine Vorgehensweise widerspricht den Normalisierungsregeln.
Da ich mir deswegen in einem anderen Thread gestern von Guru und Gott mehr oder weniger eine Rüge eingefangen habe ;D ;D ;), muss ich dich darauf hinweisen! :D
Falls die beiden mitlesen: Die Kurve hab' ich doch sauber hingekriegt oder? :-\ ::)
Zu deiner Frage aber:
Du KÖNNTEST das Kombi um genau diese beiden Felder erweitern und nach Auswahl einer VB die Werte für die beiden Felder aus dem Kombifeld direkt beziehen
Me!Region = Me!VB.Column(1)
Me!vbPLZ = Me!VB.Column(2)
Die richtigen Nummern der Spalten musst du ermitteln ... erste Spalte im Kombi = 0 !