Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

individuelle Abfrage / Formular

Begonnen von dobby110, Juni 04, 2015, 11:53:30

⏪ vorheriges - nächstes ⏩

dobby110

Hallo zusammen,

ich habe eine Tabelle mit vielen Datensätzen.
Es kommt immer mal wieder vor, dass wir den ein oder andere Datensatz darin suchen. Das haben wir bisher mit dem Filter in der Tabelle geregelt.
Nun würde ich gerne eine individuelle Abfrage aufbauen, die meherere Suchkriterien anbietet.
Dabei soll man aber frei entscheiden können, welches Kriterium man suchen möchte.

Bspw. will ich folgende Felder abfragen können:

ISIN
WKN
Depot
Lieferdatum
evtl. Name (aber nur wenn dieser auch gefunden wird, wenn man einen Teil des kompletten Namens eingibt)

Wie kann ich sowas anstellen?
Bin leider nicht so versiert und arbeite mit den Assistenten. Aber an der Stelle stößt ein Assistent an seine Grenzen.
Kann mir jemand leicht verständlich erklären, was ich tun muss?

Vorgestellt habe ich  mir das als Formular.
Oben hat man die Suchfelder und darunter baut sich die Tabelle in Form eines Unterformulares? auf und liefert die Ergebnisse.

Vorab schon einmal vielen Dank für eure Hilfe

Es soll aber so funktionieren, dass ich nur ein Kriterium eingeben muss, damit die Suche funktioniert. Das kann immer unterschiedlich sein.
Ich könnte verschiedene Abfragen erstellen. Einmal eine Abfrage nach ISIN, einmal nach WKN usw.... aber das geht doch bestimmt auch leichter?

HB9876

Hallo,
schau dir mal das an:
http://www.office-loesung.de/ftopic13271_0_0_asc.php
ist eine einfache aber sehr gaengige loesung.
Das sollte dich zum ziel fuehren.

Gruss
Jens
Mit jeder Antwort komme ich weiter und lerne.<br /><br />Danke!!!

dobby110

Ich bekomme es leider nicht hin.
Ich fasse mal kurz zusammen.

Habe ein neues Formular erstellt, welches auf meiner gewünschten Tabelle basiert.
Im Formularkopf habe ich vier Textfelder (ungebunden) erstellt.
Dann habe ich über Code anzeigen den aufgeführten Code eingefügt. (als Microsoft Axxess Klassenobjekt)

Option Compare Database

Option Compare Database
Option Explicit

Private myCriteria As String

Public Sub SQLString(FieldValue As Variant, FieldName As String, _
                     Criteria As String, ArgCount As Integer, _
                     Typ As Integer, Optional bAnd As Boolean = True)
    '*************************************************************************
    'In dieser Prozedur (Sub) muß und darf nichts geändert werden
    '*************************************************************************
    ' Erstelle Kriterien für die WHERE-Klausel.
    If Nz(FieldValue, "") <> "" Then
        If bAnd Then
            ' Füge "Und" hinzu, falls andere Kriterien vorhanden sind.
            If ArgCount > 0 Then Criteria = Criteria & " AND "
          Else
            ' Füge "Oder" hinzu, falls andere Kriterien vorhanden sind.
            If ArgCount > 0 Then Criteria = Criteria & " OR "
        End If
        Select Case Typ
          Case 1 'Datum
            Criteria = Criteria & FieldName & "= #" & _
                       Format(CDate(FieldValue), "mm-dd-yyyy") & "#"
          Case 2 'String Like
            Criteria = Criteria & FieldName & " Like '*" & FieldValue & "*'"
          Case 3 ' Zahl
            Criteria = Criteria & FieldName & " = " & Str(FieldValue)
                                 'Fehlendes = eingefuegt Willi Wipp 2004.10.07
                          'Fehlendes Str(...) eingefuegt Willi Wipp 2007.08.07
          Case 4 'String =
            Criteria = Criteria & FieldName & " = '" & FieldValue & "'"
          Case 5 'Ja/nein
            If FieldValue = "Ja" Or FieldValue = "True" Or _
               FieldValue = True Then
                Criteria = Criteria & FieldName & " = -1"
              Else
                Criteria = Criteria & FieldName & " = 0"
            End If
        End Select
        '  Inkrementiere die Zahl der Argumente.
        ArgCount = ArgCount + 1
    End If
End Sub

Private Function Filterbedingung() As String
    Dim ArgCount As Integer
   
    ' Initialisiere die Argumentenzahl.
    ArgCount = 0
    myCriteria = ""
    '*************************************************************************
    ' Nur hier muß man die Zeilen anpassen:
    ' Variable1 = Feldname im Formular in dem das Suchwort eingegeben wird
    ' Variable2 = Feldname im Formular der gefiltert werden soll
    '                                                 (Feld aus der Datenbank)
    ' Variable3 = Typ zum Angeben des Datenfeldes
    '             1 = Datum
    '             2 = String, alle die das Suchwort entahlten, egal wo
    '             3 = Zahl
    '             4 = String, findet nur die die genau übereinstimmen
    '             5 = ja/nein vom Typ Boolen
    ' Optional bAnd = Hier kann man dann noch angeben ob man die Kriterien mit
    '                 AND (True) oder OR (False) verknüpfen möchte.
    '                 Wenn Argument bAnd weggelassen => mit AND verküpft.
    ' Beispiel:
    ' SQLString Me!Sucheingabefeld, "Datenfeld", mycriteria, ArgCount, _
    '           2, False
    ' => Hier wird mit OR (Oder) verknuept.
    ' Beliebig erweiterbar, wenn man beispielsweise 5 Felder filtern
    ' will muß man die folgende Zeile gerade 5 mal kopieren und anpassen
    '*************************************************************************
    ' SQLString Variable1, Variable2, mycriteria, ArgCount, Variable3
    '*************************************************************************
   
   
    SQLString Me!sucheISIN, "ISIN", myCriteria, ArgCount, 4
    SQLString Me!sucheWKN, "WKN", myCriteria, ArgCount, 4
    SQLString Me!sucheDepot, "Depot", myCriteria, ArgCount, 4
    SQLString Me!sucheLiefertag, "Liefertag", myCriteria, ArgCount, 1
   
   
   
    ' Falls kein Kriterium spezifiziert wurde, gebe alle Datensätze zurück.
    If myCriteria = "" Then myCriteria = "True"
    Filterbedingung = myCriteria
End Function



Private Sub Befehl44_Click()

    Me.Filter = Filterbedingung()
    Me.FilterOn = True


End Sub


Die drei Variablen habe ich wie folgt ergänzt: (das ist auch das einzige was ich überhaupt an dem Code gemacht habe)

    SQLString Me!sucheISIN, "ISIN", myCriteria, ArgCount, 4
    SQLString Me!sucheWKN, "WKN", myCriteria, ArgCount, 4
    SQLString Me!sucheDepot, "Depot", myCriteria, ArgCount, 4
    SQLString Me!sucheLiefertag, "Liefertag", myCriteria, ArgCount, 1


Habe dann eine Schaltfläche hinzugefügt. Erstmal so, dass ein Datensatz gesucht werden soll.
Bin dann aber hingegangen und habe eine Ereignisprozedur - Bei Klicken - eingestellt und den Code eingegeben


Private Sub Befehl44_Click()

    Me.Filter = Filterbedingung()
    Me.FilterOn = True


End Sub


So war es in dem anderen Thread beschrieben.

Wenn ich jetzt zum Test eine WKN eingebe und auf Suchen klicke, kommt folgende Fehlermeldung:

Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Beim Klicken eingegeben. Dieser Ausdruck hat einen Fehler verursacht : Option-Anweisung mehrfach vorhanden.

Kann mir jemand sagen, was ich falsch gemacht habe?

Anbei noch ein Screenshot meiner Entwurfsansicht

DF6GL

Hallo,


ZitatOption-Anweisung mehrfach vorhanden

sagt doch alles...

wirf eine der beiden Option Compare Database -Zeilen heraus.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access