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?
Hallo,
schau dir mal das an:
http://www.office-loesung.de/ftopic13271_0_0_asc.php (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
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
Hallo,
ZitatOption-Anweisung mehrfach vorhanden
sagt doch alles...
wirf eine der beiden Option Compare Database -Zeilen heraus.