doskias
Goto Top

Suchfeld in Access 2010

Hallo zusammen,

nach 7 Jahres Access-Abstinenz bin ich doch wieder gezwungen mich an Access zu setzen und eine kleine Datenbank mit entsprecehenden Formularen zu entwerfen. Der datenbankaufbau und alles hat wunderbar funktioniert. Nur scheitere ich aktuell an einem Suchfeld. Nachdem ich jetzt über 20 verschiedene Links und Möglichkeiten aus Internet ausprobiert habe (und auch hier im Forum fündig wurde), möchte ich mein Anliegen nun doch einmal expliziet zum Ausdruck bringen:

Vorweg:
Ich habe das Formular erstellt und alle Felder im Formular stimmen auch überein. Es geht hier um Kunden, daher ist der Kundenname für das hier beschrieben Suchverfahren ausschlaggebend.

Als nächstes habe ich ein Listenfeld erstellt. Hierzu habe ich den Assistenten verwendet und die Option "Einen Datensatz im Formular anhand des Wers suchenm den ich im Listenfeld ausgewählt habe" ausgewählt. Das ausgewählte Feld ist lediglich der Kundenname. In der Übergabe sehe ich nun meine 5 Testeinträge. Wechsel ich nun von der Entwurfsansicht auf die Formularansicht, kann ich die 5 Einträge sehen und auswählen. Hierbei wird der entsprechende Datensatz dann ausgewählt. Soweit so gut.

Problem 1: Unter "Enthält Modul" des Formulars ist die option "ja" angewählt. Mit dieser Option lässt sich das Formular jedoch nicht speichern. Deaktiviere ich das Formular hingegen, so kann ich das Formular zwar speichern, aber die Auswahlfunktion funktioniert nicht mehr. Ich kann dann alle Werte anklicken, aber die Datensätze aktualisieren sich nciht mehr.

Also habe ich zunächst ohne Speichern weiter gearbeitet und getüftelt. Der Plan ist, ein Suchfeld vorzuschalten. In dieses Suchfeld soll ein beliebiger Begriff eingegeben werden und das Ergebnis soll automatisch in das eben beschrieben Listenfeld
gelistet werden. Hierzu wollte ich die Option "Bei Eingabe" als Ereignis nutzen. Aber auch hier habe ich es nicht geschafft ein Ereignis zu definieren, welches das Listenfeld füllt. Ich habe folgende Kunden eingegeben:
- test
- testeins
- einstzwei

Die Eingabe von "test" soll demnach 2 Eiträge im Listenfeld, die Eingabe von "teste" 1 Eintrag und die Eingabe von "st" 3 Einträge im Listenfeld erzeugen. Ein Klick auf den ausgewählten Eintrag soll dann alle Daten des Datensatz im Formular anzeigen

Problem 2: Wie bekomm ich das hin?

Ich kann auf Grund der Vielzahl der Versuche in den letzten Tagen nicht alle Seiten auflisten, daher bitte ich von Links abzusehen, es sei denn sie beschreiben direkt meinen Wunsch. Die Seite http://www.tutorials.de/relationale-datenbanksysteme/144014-access-such ... beschreibt es hervorragend, funktioniert aber aus irgendeinem Grund bei mir nicht. Ich vermute auch hier schlägt Problem 1 zu.

Noch etwas zur Datenbank: Alle Felder sind mit Standardwerten vorbelegt, so dass es keine leeren Datenbankfelder geben kann.

Noch etwas zu mir. Eine komplette Lösung meines Problems wäre natürlich perfekt, aber auch mit hinweisen und/oder der Reihenfolge der zu verwenden Befehle ist mir weitergeholfen. Ein kleiner Bastler steckt doch in jedem der sich mit Datenbanken rumschlägt. face-smile

Content-Key: 206447

Url: https://administrator.de/contentid/206447

Printed on: April 20, 2024 at 04:04 o'clock

Member: Xaero1982
Xaero1982 May 15, 2013 at 08:11:04 (UTC)
Goto Top
Moin,

ich bin vermutlich nicht der einzige, der spätestens bei Problem 1 abgeschaltet hat.

Ich kann nicht ganz nachvollziehen was du vor hast.

Was ich verstanden habe:
Du hast ein Formular - so weit so gut.

Dort hast du ein Suchfeld.
In dieses Suchfeld gibst du ein was du suchst bzw. wählst es aus?

Ist dies erfolgt soll automatisch dieser Kunde gewählt werden und weitere Daten in dem gleichen Formular angezeigt werden?

Du willst eine Suche mit Wildcards?

Wenn ich Kunden habe weiß ich zumindest den Anfang und nicht irgendwas aus der Mitte des Namens...ist das sinnvoll?

Vielleicht kannst du etwas "einfacher" beschreiben was du vor hast.

Ansonsten einfach mal die DB bereit stellen ohne Daten - wobei da vermutlich eh nur Testdaten enthalten sind bisher.


Gruß
Member: Doskias
Doskias May 15, 2013 at 08:52:31 (UTC)
Goto Top
So.. hier nun mal das Bild (nachdem es mir gelungen ist, es hochzuladen face-smile )

98ea63b63b8bb56472b5993f7b25020e

Im Schritt 1 möchte ich in das Suchfeld ein Begriff Eingeben. Zum Beispiel "Test". Unter Kundenliste sollen dann alle Kunden angezeigt werden, in denen Irgendwo Test drin vorkommt. Am Anfang, am Ende oder irgendwo dazwischen. Dann möchte ich aus der Kundenliste einen Kunden auswählen und dieser soll dann im 2.Schritt unten angezeigt werden.

Der zweite Schritt funktioniert solange ich in den Formulareingeschaft die Option Enthält Modul auf "ja" gesetzt lasse. Stelle ich die Option auf Nein, dann funktionier die Auswahl im Schritt zwei nicht. Stell ich sie jedoch nicht auf Nein, so kann ich das Formular nicht abspeichern. Ohne das Suchfeld, zeigt mir die Kundenliste immer alle Kunden an, was aber ab einer gewissen Kundenanzahl nicht mehr sinnvoll ist. Daher die Idee das Suchfeld vorzuschalten um diese Auswahl einzugrenzen.

Ich weiß, dass diese Möglichkeit existiert, da ich vor 5 Jahren einmal in einem Unternehmen gearbeitet habe, wo eine solche Suche in Access existierte. Leider arbeitet der Entwickler dort nicht mehr und ich habe keinen Kontakt mehr zu ihm.
Member: Xaero1982
Solution Xaero1982 May 19, 2013, updated at Nov 12, 2014 at 11:19:24 (UTC)
Goto Top
Hi,

da wir das Problem nun mehr oder minder per Mail geklärt haben; hier noch mal für alle ein kleiner Ansatz:

Suchfeld: Das Suchfeld ;P
Text22: Das ist das Listenfeld (zu faul zum umbenennen;P ) Muss bei "Herkunftstyp" den Eintrag "Wertliste" haben.
allgemeinReaktion: Ein Feld aus der Tabelle

Option Compare Database
Option Explicit


Private Sub Suchfeld_AfterUpdate()
    Dim rcsKunden As Recordset
    Set rcsKunden = CurrentDb.OpenRecordset("SELECT Servicekunden.Kundenname FROM Servicekunden WHERE Servicekunden.Kundenname Like '*" & Me.Suchfeld & "*'", dbOpenDynaset) 'Die Abfrage sollte klar sein... mit '*" & Me.Suchfeld & "*' greifst du auf das Suchfeld zu die * sind Platzhalter  
    Text22.RowSource = "" 'hiermit leerst du das Listenfeld, damit bei einer neuen Suche die alten Einträge gelöscht sind  
      
    Do Until rcsKunden.EOF 'Eine Schleife so lange Suchergebnisse in rcsKunden vorhanden sind  
        'Me.Text22 = Me.Text22 & rcsKunden.Fields("Kundenname") & vbCrLf ''hiermit fügst du die ausgelesenen Werte aus der DB Zeilenweise einem TEXTFELD hinzu - das habe ich aber entfernt  
        Text22.AddItem rcsKunden.Fields("Kundenname") 'hiermit fügst du die ausgelesenen Werte aus der DB Zeilenweise dem LISTENFELD hinzu  
        rcsKunden.MoveNext 'damit rufst du einfach den nächsten gefundenen Datensatz auf  
    Loop
    
    If rcsKunden.RecordCount = 0 Then 'hiermit zählst du die Anzahl von Datensätzen. Wenn die Zahl 0 ist, gibt es keinen Kunden mit dem Namen  
        MsgBox "Kein Kunde mit dem Namen '" & Me.Suchfeld & "' gefunden!" 'hier wird eine Fehlermeldung ausgegeben  
    End If

End Sub

Private Sub Text22_Click()
Dim rcsKunden As Recordset
    Set rcsKunden = CurrentDb.OpenRecordset("SELECT * FROM Servicekunden WHERE Servicekunden.Kundenname = '" & Me.Text22.Value & "'", dbOpenDynaset)  
    
    Me.allgemeinReaktion = rcsKunden.Fields("allgemeinReaktion")  

End Sub

Das "Testformular" bestand nur aus drei Feldern.
Aus dem "Suchfeld", einem Listenfeld in dem die Suchergebnisse ausgegeben wurden und zum Testen der Auswahl aus dem Listenfeld ein Feld aus der Tabelle.

In der "Prozedur" Text22_Click() werden die Felder, entsprechend der Kundenauswahl, mit den Daten aus der Tabelle die bei dem entsprechenden Kunden hinterlegt sind, gefüllt.

Man kann natürlich noch einen Button hinzufügen zum Ausführen der Suchfunktion - dort kopiert man die gleichen Zeilen ein wie oben unter Suchfeld_AfterUpdate().

Gruß