Mehrere Abfragen in einem Formular Microsoft Access

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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


mastermanx1 
Beitragsersteller
 30.04.2013, 09:17

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? :)

0
ShitzOvran  30.04.2013, 09:47
@mastermanx1

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-

1
ShitzOvran  30.04.2013, 09:53
@ShitzOvran

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

0
mastermanx1 
Beitragsersteller
 30.04.2013, 09:57
@ShitzOvran

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?

0
ShitzOvran  30.04.2013, 09:59
@mastermanx1

Durch die Sternchen vorne und hinten sucht er dann nicht nach leeren Feldern sondern ignoriert deine Nichteingabe

1
mastermanx1 
Beitragsersteller
 30.04.2013, 11:36
@ShitzOvran

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? :)

0
ShitzOvran  30.04.2013, 12:34
@mastermanx1

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...

1
mastermanx1 
Beitragsersteller
 30.04.2013, 12:54
@ShitzOvran

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?

0
mastermanx1 
Beitragsersteller
 30.04.2013, 13:45
@ShitzOvran

muss ich das für alle einzeln machen oder gibt es irgendetwas, dass alle leert?

0
ShitzOvran  30.04.2013, 13:50
@ShitzOvran

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,

0
ShitzOvran  30.04.2013, 13:58
@ShitzOvran

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
0
mastermanx1 
Beitragsersteller
 30.04.2013, 14:09
@ShitzOvran

Danke nochmal guck dir bitte nur noch einmal das Bild in der neuen Antwort an die ich hinzugefügt hab. :)

0

Ich hab das ganze jetzt einmal ausprobiert und das einzige problem, was ich jetzt noch habe ist diese error nachricht:

VBA Error - (Informatik, Microsoft, Datenbank)

mastermanx1 
Beitragsersteller
 30.04.2013, 14:11

Das ganze heißt Laufzeitfehler 438. Ojekt unterstützt diese Eigenschaft oder Methode nicht.

0
ShitzOvran  30.04.2013, 14:15
@mastermanx1

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
0
mastermanx1 
Beitragsersteller
 30.04.2013, 14:20
@ShitzOvran

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 :)

0

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).


micmen  30.04.2013, 09:47

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.

0