Mehrere Abfragen in einem Formular Microsoft Access
Hi, ich habe folgendes Problem mit Microsoft Access: Ich habe mehrere Parameter Abfragen erstellt die alle auf eine Nutzer Tabelle zugreifen, so dass wenn man nur eine Information wie zum Beispiel den Nachnamen oder die Postleitzahl hat man den Rest herausfinden kann. Ich habe mir überlegt, dass es noch einfacher für den Endnutzer wäre, wenn ich einfach ein Formular erstelle und dann in das Formular Felder einfüge die mit den Parameter Abfragen der einzelnen Abfragen verbunden sind. Das Endergebnis soll dann so aussehen, dass der Nutzer einfach eine Abfragenseite hat auf der er dann eine Information die er hat auswählen kann und sie einträgt, dann einen Knopf drückt, der prüft in welches Feld etwas eingetragen wurde und dann die dementsprechende Abfrage startet. Ist das möglich und wenn ja wie? Oder gibt es eine bessere Lösung?
Danke schon mal im Vorraus
Mastermanx1
3 Antworten
Klar ist das Möglich... zum Beispiel könntest du in deiner Abfrage Kriterien wie
Wie "*" & [Formulare]![Formular1]![Name] & "*"
setzen. Hier bezieht sich das Kriterium auf das Textfeld "Name" welches auf deinem "Formular1" existiert... also da wo du zB einen Namen einträgst.
und dann könntest du einen Button einbauen, der dir die Abfrage anschließend öffnet. oder du baust in dein Formular ein Unterformular und darin wird die Abfrage geöffnet
Brauchst du gar nicht.... nehmen wir an du hast in deinem Formuar Folgene Felder mit jeweiligem Inhalt:
- Name: Meyer
- Vorname: leer
- Alter: leer
Sternchen sind Platzhalter.. also soetwas wie Enthält, sprich er schaut ob irgendwo in der Spalte Name etwas mit "Meyer" enthalten ist
Dann würdest du beim öffnen deiner Abfrage (wenn die Kriterien, wie oben schon erwähnt, gesetzt sind) folgene Kriterien in den Spalten haben:
- Spalte Name: Wie "*Meyer*"
- Spalte Vorname: Wie "**"
- Spalte Alter: Wie "**"
deinem Button sagst du entweder über VBA
DoCmd.OpenQuery "Name deiner Query"
oder du arbeitest mit dem Assistenten, da kann man , glaube ich, sogar durch anklicken sagen,w as er tun soll und welche Tabelle, Abfrage oder welches Formular geöffnet werden soll-
Wenn es Professionell sein soll, würde ich, wie micmen, schon schreibt mit Kombinationsfeldern arbeiten und anschließend per VBA Recordset übergeben. Aber das ist vermutlich ein bisschen zu Overdone für dein Verwendungszweck. Ich weiß ja nicht, wie fit du in VBA bist
danke, heißt dass, das ich nur eine Abfrage brauche und in für jedes feld in die Kriterien schreibe, dass er die Informationen aus dem Formular nehmen soll und wenn ich z. B. nichts in das Stadt Feld eintrage, dann ignoriert er das einfach und nimmt nur die vorhanden Kriterien oder muss ich eine oder: kriterie erstellen das falls nichts eingetragen ist, dass er einfach die einfach ignoriert?
Durch die Sternchen vorne und hinten sucht er dann nicht nach leeren Feldern sondern ignoriert deine Nichteingabe
Ok danke für die ganze Hilfe ich probier alles gerade aus. Eine Frage noch: Kann ich unter Ereignis bei geändert irgendwie einstellen, dass er dann automatisch die Abfrage startet und wenn ja wie? :)
Wie schon erwähnt... Wenn du bei "Bei Geändert" (oder jedem anderen Event) auf [...] klickst, müsste sich etwas öffnen, wo du die Wahl hast:
- Makro-Generator
- Ausdrucks-Generator
- Code-Generator
Entweder du klickst dir jetzt mit den Makro-Generator etwas zusammen oder wenn du auf "Code-Genrator" klickst, sollte sich der VB-Editor öffnen und etwas zu sehen sein wie
Private Sub blabla_Dirty(Cancel As Integer)
End Sub
dazwischen schreibst du dann
DoCmd.OpenQuery "Name deiner Query"
sodass es dann so ähnlich aussieht wie
Private Sub blabla_Dirty(Cancel As Integer)
DoCmd.OpenQuery "Name deiner Query"
End Sub
und das war es dann schon... Natürlich muss in dort statt Name deiner Query dein Abfragename stehen, welche dann geöffnet werden soll und statt blabla steht da auch etwas anderes...
Ok danke, ich hab mich für den Button entschieden und ich weiß ich muss mich wie ein idiot anhören. :) Aber noch eine letzte Frage und zwar: Was müsste ich als zusätzliche Zeile in VBA schreiben, dass er alle Textfelder leert für die nächste Suche?
muss ich das für alle einzeln machen oder gibt es irgendetwas, dass alle leert?
Wenn du natürlich 40 Felder hast, willst du natürlich nicht für jedes Feld eine Zeile schreiben... dann könntest du auch
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.TypeOf = acTextBox Then
ctl.Value = ctl.DefaultValue
End If
Next ctl
schreiben. "Default Value" ist der Standardwert... das heisst, wenn du in irgendeinem deiner Textfelder einen Standardwert definiert hast, wird es nicht geleert sondern der vorher definierte Wert eingetragen,
Sorry, hatte mich vertippt.... so sollte es funktionieren:
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Then
ctl.Value = ctl.DefaultValue
End If
Next ctl
Danke nochmal guck dir bitte nur noch einmal das Bild in der neuen Antwort an die ich hinzugefügt hab. :)
Ich hab das ganze jetzt einmal ausprobiert und das einzige problem, was ich jetzt noch habe ist diese error nachricht:

Das ganze heißt Laufzeitfehler 438. Ojekt unterstützt diese Eigenschaft oder Methode nicht.
Ich habe mich doch schon korrigiert...
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Then
ctl.Value = ctl.DefaultValue
End If
Next ctl
Oh tut mir leid ich konnte die Antwort irgendwie nicht sehen. Vielen dank für die investierte Arbeit und Zeit, die Antwort hat mir sehr geholfen und sobald ich kann kriegt sie auch den Stern :)
Wenn Formular, dann geht es besser:
Du läßt Dein Formular auf die gleiche Tabelle schauen. Und Du setzt in Dein Formular lauter Kombinationsfelder, die alle (so wie derzeit Deine Abfragen) auf diese gleiche Tabelle schauen. Dann wertest Du das Ereignis AfterUpdate (oder auch OnChange oder wie genau das heißt) aus und läßt in Deinem Formular den Filter entsprechend setzen (sowas wie Me.Filter = "Alter = 36": Me.FilterOn = True).
wurde nicht angenommen, Zeit überschritten, hier nachträglich separat... :-(
Bei OnChange wird der Filter immer gesetzt, egal, was man in einem Kombinationsfeld macht. Dafür kann man in den Feldern aber nicht tippen, sondern sie ausschließlich mit der Maus bedienen, das kann nerven (z.B. ein Feld für "Alter" und Du hast Leute aus 60 verschiedenen Jahrgängen drin und willst den zweitältesten wählen - 2 Zahlen tippen ginge deutlich schneller, als 59 Zeilen zu scrollen...). Bei AfterUpdate kannst Du tippen, aber wenn Du den Filter nochmal neu auf den Wert setzen wilst, der dort aktuell schon zu sehen ist, mußt Du erst was anderes wählen und dann zurück gehen, sonst passiert nix.
Danke, muss das gleich mal versuchen. Und wie würde ich den Butten dazu bringen zuerst eine Abfrage zu laufen um zu gucken welches Feld ich nutze? :)