Hallo Access - Experten,
ich habe mal gegoogelt und etwas gefunden,
was bereits schon vor langer Zeit mal gepostet wurde.
Ich habe einen Commandbutton mit einer Ereignisprozedur bei Klicken belegt.
Private Sub Befehl459_Click()
Call suchenStr(tabelle$)
End Sub
Dann wird hieraus die Function aufgerufen.
Allerdings bekomme ich eine Laufzeitfehler 3078.
Das Microsoft Jet-Modul findet die Tabelle, oder Abfrage nicht.
Es ist diese Zeile, um die es geht.
Set rs = db.OpenRecordset(Kunden)
Im Original stand dort Set rs = db.OpenRecordset(Tabelle)
Ich habe das Wort Tabelle gegen den Namen Kunden getauscht, weil meine Tabelle so heißt.
Die müsste die Function doch finden?
Kann mir da jemand sagen, warum die nicht gefunden wird?
Function suchenStr(tabelle$)
'diese Funktion sucht in einer Tabelle in beliebig vielen Feldern auch einen Teilstring
'Eingabe in die Inputbox ohne Sternchen und ohne "
'Günther Ritter gritter@ gmx.de
'http://www.ostfrieslandweb.de/ kostenlose ACCESS-Beispiele
Dim db As Database
Dim rs As Recordset
Dim FeldCnt%, I%, strSQL$, begriff$
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Function
Set db = CurrentDb
Set rs = db.OpenRecordset(Kunden)
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & tabelle & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount = 1 Then
MsgBox "Treffer"
Else
MsgBox "Kein Treffer"
End If
rs.Close
Set db = Nothing
End Function
Hallo,
wenn du mit Klick auf den Button den Namen der Tabelle übergeben willst, muss dieser Name an der Stelle auch bekannt sein:
Private Sub Befehl459_Click()
Dim TabellenName as String
TabellenName = "NameDeinerTabelle"
Call suchenStr(TabellenName)
End Sub
Dann sollte die Übergabe / Übernahme an eine Andere Prozedur auch funktionieren.
Nimm statt einer Function in DIESEM Fall eine 'normale' Prozedur ;)
Sub suchenStr(TabellenName)
'diese Funktion sucht in einer Tabelle in beliebig vielen Feldern auch einen Teilstring
'Eingabe in die Inputbox ohne Sternchen und ohne "
'Günther Ritter gritter@ gmx.de
'http://www.ostfrieslandweb.de/ kostenlose ACCESS-Beispiele
Dim db As Database
Dim rs As Recordset
Dim FeldCnt%, I%, strSQL$, begriff$
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Function
Set db = CurrentDb
Set rs = db.OpenRecordset(TabellenName)
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & tabelle & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount = 1 Then
MsgBox "Treffer"
Else
MsgBox "Kein Treffer"
End If
rs.Close
Set db = Nothing
End Sub
Kleiner Nachtrag zu "komfortable Suche":
Wenn eine Zeichenkette in allen Feldern einer Tabelle (inklusiv der vorhandenen ID?) gesucht wird, ist das vor allem ein Hinweis auf Planlosigkeit und in einer wohlgeordneten Tabelle entsprechend einer vorgenommenen Datenmodellierung wohl kaum vorstellbar,
- weil dann gleiche Informationen in einem Feld liegen würden
- und ein Textvergleich für Boolean-, Zahlen und Datumsfelder sicher an Fehlern scheitern würde.
MfGA
ebs
Hallo Peter,
ich habe es mal nach deinen Vorgaben geändert.
Leider ist der Fehler immer noch der gleiche, an gleicher Stelle.
Private Sub Befehl459_Click()
Dim TabellenName As String
TabellenName = "Kunden"
Call suchenStr(Kunden)
End Sub
Private Sub suchenStr(Kunden)
Dim db As Database
Dim rs As Recordset
Dim FeldCnt%, I%, strSQL$, begriff$
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Sub
Set db = CurrentDb
Set rs = db.OpenRecordset(Kunden)
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & tabelle & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount = 1 Then
MsgBox "Treffer"
Else
MsgBox "Kein Treffer"
End If
rs.Close
Set db = Nothing
End Sub
Hallo,
Call suchenStr(Tabellenname)
...
Private Sub suchenStr(Tabellenname As String)
...
& " from " & Tabellenname & " where "
Hallo erstmal,
sag mal, hast du den Code bei dir mal getestet?
Läuft der bei dir?
Also ich kann hier ändern was ich will,
ich bekomme immer diesen Laufzeitfehler 3078.
Auch mit deinem Vorschlag..
Hallo Achim,
Lass Dir doch mal die Variable "strSQL" im Direkt-
fenster ausgeben und schau was da raus kommt.
Wenn Du da den Fehler nicht selber findest, kannst
Du den String ja hier posten.
gruss ekkehard
Hallo,
also:
Wenn du den Namen der Tabelle aus dem Buttonklick heraus an die Prozedur übergeben willst machst du das so:
Private Sub Befehl459_Click()
Dim TabellenName As String
TabellenName = "Kunden"
Call suchenStr(TabellenName)
End Sub
Die Variable 'TabellenName' enthält zu diesem Zeitpunkt bereits den Namen deiner Tabelle 'Kunden'
Die Prozedur sollte dann genau so aussehen:
Private Sub suchenStr(TabellenName As String)
Dim db As Database
Dim rs As Recordset
Dim FeldCnt%, I%, strSQL$, begriff$
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Sub
Set db = CurrentDb
Set rs = db.OpenRecordset(TabellenName)
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & TabellenName & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount = 1 Then
MsgBox "Treffer"
Else
MsgBox "Kein Treffer"
End If
rs.Close
Set db = Nothing
End Sub
Weiter sollte diese Bedingung geändert werden ...
If rs.RecordCount = 1 Then
Sollte deine Suche nämlich 2 Datensätze ergeben bekommst du als Message 'Kein Treffer'
Daher:
If rs.RecordCount >= 1 Then
HTH
Hallo Ekkehard,
das mit dem Direktfenster habe ich nicht so drauf.
Wie muss ich denn die Variable da eingeben, um etwas erkennen zu können?
Bin leider kein VBA Experte. Das Überwachungsfenster nutze ich schon gelegentlich.
Aber mit diesem Direktfenster kann ich irgendwie nichts anfangen.
Hallo Peter,
wir kommen der Sache langsam näher.
So sieht der Code nun aus:
Jetzt kommt der Laufzeitfehler 13, Typen unverträglich.
Und es ist wieder diese Zeile hier.
Set rs = db.OpenRecordset(TabellenName)
Ich vermute, dass hier ein Konflikt zwischen STRING und Objekt vorliegt.
Private Sub Befehl459_Click()
Dim TabellenName As String
TabellenName = "Kunden"
Call suchenStr(TabellenName)
End Sub
Private Sub suchenStr(TabellenName As String)
Dim db As Database
Dim rs As Recordset
Dim FeldCnt%, I%, strSQL$, begriff$
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Sub
Set db = CurrentDb
Set rs = db.OpenRecordset(TabellenName)
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & tabelle & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount >= 1 Then
MsgBox "Treffer"
Else
MsgBox "Kein Treffer"
End If
rs.Close
Set db = Nothing
End Sub
Hallo,
ich muß ganz ehrlich sagen, dass ich das selbst noch nie so verwendet habe:
Set rs = db.OpenRecordset(TabellenName)
Schreib statt dessen einfach mal Set rs = db.OpenRecordset("SELECT * FROM Kunden")
oder lege den Code so an, wie du ihn auch weiter unten verwendest:
Dim strSQL1 As String
strSQL1 = "SELECT * FROM '" & TabellenName & "'"
Set rs = db.OpenRecordset(strSQL1)
Und diese Zeile ist noch immer falsch!
& " from " & tabelle & " where " _die MUSS so lauten:
& " from " & TabellenName & " where " _oder
& " from Kunden where " _ZitatAber mit diesem Direktfenster kann ich irgendwie nichts anfangen.
Mit Hilfe des Direktfensters ist es Möglich verschiedene Anweisungen dort DIREKT ausführen zu lassen
oder z.B. den Wert einer Variablen zur Laufzeit auszugeben.
Das kannst du bewerkstelligen in dem du den Befehl 'debug.print' verwendest.
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & TabellenName & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
'Ausgabe von strSQL ins Direktfenster
Debug.Print strSQL
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
Auf diese Zeile ...
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
...setzt du einen Haltepunkt, dann kannst du sehen, welchen SQL-String du gegen die DB schickst.
Hallo Peter,
habe alle deine Vorgaben umgesetzt.
Der Haltepunkt brachte mir ebensowenig eine neue Erkenntnis wie das Debug.print im Direktfenster,
weil der Code gleich in der Zeile
Set rs = db.OpenRecordset("SELECT * FROM Kunden")
mit der gleichen Fehlermeldung stehen bleibt wie gehabt.
Fehler 13, Typen unverträglich.
Der Code ist nicht von mir, Peter.
Den habe ich gefunden beim Googeln.
Der ist 8 Jahre alt.
Hallo,
Dim db As DAO.Database
Dim rs As DAO.Recordset
und Verweis setzen auf die Dao3.6-Library
Also den Verweis brauchte ich nicht setzen; der war schon aktiviert.
Dann habe ich die beiden
Dim db As DAO.Database
Dim rs As DAO.Recordset
eingebaut.
Es wird mit jedem Hinweis interessanter, ob das je funktionieren wird.
Jetzt sieht der Code so aus und bringt den
Laufzeitfehler 3131 Syntaxfehler in FROM-Klausel.
und es wird diese Zeile hervorgehoben.
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
Private Sub suchenStr(TabellenName As String)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim FeldCnt%, I%, strSQL$, begriff$
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Sub
Set db = CurrentDb
Set rs = db.OpenRecordset(TabellenName)
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & tabelle & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount >= 1 Then
MsgBox "Treffer"
Else
MsgBox "Kein Treffer"
End If
rs.Close
Set db = Nothing
End Sub
Hallo,
strSQL = "select " _
& rs.Fields(0).Name _
& " from " & TabellenName & " where " _
& rs.Fields(0).Name _
& " like '*" & begriff & "*'"
For I = 1 To rs.Fields.Count - 1
strSQL = strSQL & " or " & rs.Fields(I).Name _
& " like '*" & begriff & "*'"
Next
rs.Close
'Ausgabe von strSQL ins Direktfenster
Debug.Print strSQL
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
Du hast die oben rot markierte Änderung noch immer nicht umgesetzt.
Der Fehler in der FROM-Klausel kommt daher, dass Access die Variable 'tabelle' nicht kennt, du musst stattdessen die Variable 'TabellenName' verwenden!
Hallo,
habe den Code nicht komplett analysiert und auch nicht den ganzen Thread durchgelesen... Was genau willst Du denn machen?
Eine Suche nach einem bestimmten Begriff über alle Tabellenfelder ist eher konzeptlos anstatt in irgendeiner Form nötig. Und eine allgemeine Funktion für die Suche nach/in einem bestimmten Feld einer bestimmten Tabelle erfordert wesentlich höheren Aufwand wegen der nötigen Berücksichtigung der Datentypen der einzelnen Tabellenfelder.
Eine Suche über alle auswertbaren(!) Felder in einer bestimmten Tabelle könnte im Prinzip so aussehen:
Private Sub suchenStr(TabellenName As String)
Dim db As DAO.Database
Dim rs As DAO.Recordset, fld As DAO.Field
Dim FeldCnt As Long, I As Long, strSQL As String, begriff As String
begriff = InputBox("Suchbegriff eingeben")
If begriff = "" Then Exit Function
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from [" & TabellenName & "]", dbOpenSnapshot)
Do Until rs.EOF
On Error Resume Next
For Each fld In rs.Fields
If fld.Value Like "*" & begriff & "*" Then
MsgBox fld.Name & ": " & fld.Value
End If
Next
rs.MoveNext
Loop
rs.Close
Set db = Nothing
End Sub
Hallo Franz,
Zitatist eher konzeptlos anstatt in irgendeiner Form nötig
den Hinweis und die von dir zitierten weiteren Nachteile gab es auch schon zu Anfang wobei es ungeachtet dessen
halt für den TO ganz interessant sein kann aus den
Code-Zeilen ein paar Lehren zu ziehen, die er in weiterer Folge verwenden kann.
Abgesehen von allen Optimierungsmöglichkeiten liegt der Grund für den neuen Fehler hier begraben:
from [" & TabellenName & "]"
es steht im SQL-String eine Variable, die es nicht gibt.
Hallo,
Zitates steht im SQL-String eine Variable, die es nicht gibt
Was uns Gelegenheit gibt mal wieder folgenden essentiellen
Lehrsatz zu zitieren:
Verwende "Option Explicit" in
jedem Modul.
;) 8)
Ja, sorry, dass ich die Variable nicht geändert habe.
Also,
der Code läuft nun, aber total unsinnig.
Ich bekomme zwar eine Meldung, dass der Begriff gefunden wurde,
aber nicht WO, bzw. es wird gar nicht zum DS gesprungen.
Dann habe ich mal den Code von Franz genommen.
Der funktioniert auf Anhieb ohne Fehler,
zeigt zwar das Datenfeld an, in dem der Begriff gefunden wurde, aber nicht zugehörigen, gesamten DS.
Und man hat keine Chance der LOOP Schleife zu entkommen, denn die läuft ja so bis EOF.
Eigentlich müsste man die Art der Schleife auf EXIT DO ändern.
Also die MsgBox müsste noch ein "Weitersuchen" und "Cancel" haben.
Dann wäre es wohl perfekt.
Was muss man denn ändern, damit der Code von Franz den DS zeigt?
Vielleicht nochmal etwas zur Sinnigkeit dieser Suche.
Ich habe da mal vor langer Zeit ein kleines EXCEL-Programm geschrieben,
bei dem ich über den Spezialfilter nach Textteilen suche.
Wenn ich einen Begriff eingebe, bei dem ich nicht wußte in welcher Textbox der steht,
ist das über den Spezialfilter eine sehr elegante Lösung.
Einfach InputBox aufrufen, Texteil eingeben und über den gesamten Bereich filtern.
Wird der Textteil gefunden, werden alle DS mit gefundener Lösung in einer Listbox aufgelistet.
Dann nur noch auf die entsprechende Zeile klicken und man hat den DS, den man suchte.
Hallo,
ich sag es nochmal: das Ganze ist ein Holzweg...
Zitat
Wenn ich einen Begriff eingebe, bei dem ich nicht wußte in welcher Textbox der steht,
ist das über den Spezialfilter eine sehr elegante Lösung.
Das mag in Excel sinnvoll sein, in einer DB aber nicht. Dort wird nicht blind in allen möglichen Textfeldern nach einem Text-Vorkommen gesucht, dort wird nach dem Vorkommen eines Textes (oder anderer Werte) in einer Domäne (--> Tabellenfeld/-spalte) gesucht und entspr. der Datensatz mit einem FORMULAR z. B. angezeigt. Wenn eine Suche über mehrere Felder mit gleicher Sinnhaftigkeit erfolgen soll, deutet das auf ein grundlegendes Normalisierungsproblem hin. Solche Suchereien passieren in aller Regel mit einem SQL-Statement (auch Abfrage genannt) etwa nach folgendem Code:
Formular, gebunden an die entspr. Tabelle, in der Daten gesucht (,bzw. aus der Daten gefiltert) werden sollen, und mit Form-Textfeldern, die an die entspr. (und evtl. auch nur erforderlichen) Tabellenfelder gebunden sind. Für die Ausführen des Codes (der die Filterung vornimmt) , ist die Nutzung einer Ereignisprozedur vorgesehen. In diesen Fällen ist auch ein ungebundenes Textfeld für die Eingabe des Such-Kriteriums anstelle der Inputbox zu empfehlen. Dabei ist , weil die Tabelle(nfelder) und auch Form-Textfelder in aller Regel in einer fertigen DB nicht (mehr) veränderlich sind, keine variable Anzahl von Tabellenfelder vonnöten. Eigentlich weiß man (sollte man zumindest ;-) ), was wo etwas zu finden ist.
Sub btnSuchen_Click()
Me.Filter ="TabellenFeld1 Like '*" & Me!Suchfeld & "*' or TabellenfeldFeld2 Like '*" & Me!Suchfeld & "*' or TabellenFeld3 Like '*" & Me!Suchfeld & "*'"
Me.FilterOn =true
End SubHier wird das Filterkriterium wie in einem SQL-String (Abfrage) syntaktisch als "Where-Condition" , ohne das "Where" , der Filter-Eigenschaft des Forms zugewiesen. Der Effekt ist, dass das Form dann nur die passenden Datensätze anzeigt, was das eigentliche Ziel des Ganzen ja nun war.
Andere Möglichkeit ist, einen "richtigen" SQL-String an die Eigenschaft "Recordsource" (Datenherkunft) des Formulares zuzuweisen:
Sub btnSuchen_Click()
Me.Recordsource="Select * from tblDeineTabelle Where TabellenFeld1 Like '*" & Me!Suchfeld & "*' or TabenfeldFeld2 Like '*" & Me!Suchfeld & "*' or TabellenFeld3 Like '*" & Me!Suchfeld & "*'"
End SubIch empfehle, sich auf www.dbwiki.net mal umzusehen....
Wenn dann das Dingens zum Laufen gebracht wurde, bestehen da immer noch einige Probleme:
1) Wenn man einen Filter auf ein Feld setzt, werden dann dort erst einmal Null-Werte nicht berücksichtigt, weil man mit Null nicht vergleichen kann. Wenn ich also alle Felder filtere, habe ich eine gute Chance, Datensätze auszufiltern, die ich eigentlich als Treffer sehen wollte.
2) Indexnutzung und damit verbunden mögliche Performance des Filterns spielt anscheinend gar keine Rolle.
MfGA
ebs
Okay Leute,
ich beuge mich der Erfahrung und gebe dieses Vorhaben auf über alle Felder zu suchen.
Ihr habt ganz sicher Recht, dass mein Excel-Spezialfilter hier auf Access keinen Sinn macht.
Aber Annahme, ich reduziere mein Vorhaben auf EIN Datenfeld.
So, wie ihr es sinnigerweise sagt.
Dann wäre das hier aus meiner Sicht echt benutzerfreundlich. Beispiel:
Ich stehe mit dem Cursor im Feld Adresse
Ich klicke auf den CommandButton,
die InputBox will den zu suchenden Begriff haben,
Die Auswahl ist automatisch auf "Teil des Feldinhalts" eingestellt.
Nachdem der zu suchende Begriff in sagen wir mal 22 Datensätzen gefunden wurde,
wird automatisch auf Datenblattansicht geschaltet und tabellarisch angezeigt.
Ende des Suchen Dialogs.
Ich denke, dass der eine, oder andere von euch die Suche
bestimmt schon bedienerfreundlicher umgestaltet hat;
vielleicht sogar exakt so wie in diesem Beispiel.
Wenn ja, dann würde ich den Code gern übernehmen.
Du fährst Deine Ansprüche zurück, willst aber im Prinzip immer noch excel-like arbeiten. Warum? Was ist das für eine Tabelle, die die Datenherkunft des Formulars darstellt?
Die Frage kann man auch anders formulieren: Willst Du jetzt irgendwie in irgendeiner Tabelle (= Ansammlung von Werten in Zeilen und Spalten) irgendetwas selektieren, oder arbeitest Du in einer geplanten Datenbank (modelliert, normalisiert) und möchtest effektiv und nachhaltig arbeiten?
ZitatDie Auswahl ist automatisch auf "Teil des Feldinhalts" eingestellt.
Warum? Ist das eine Eingabeverkürzung, oder sind im Feld keine atomaren Informationen?
MfGA
ebs
Hallo,
@accessy:
ZitatIch empfehle, sich auf www.dbwiki.net mal umzusehen....
http://www.dbwiki.net/wiki/Access_Beispieldatenbanken
http://www.dbwiki.net/images/1/19/AccSampleSuchen.zip
http://www.dbwiki.net/images/7/75/AccSampleSearchPopUp.zip
http://www.dbwiki.net/images/e/e0/AccSampleSearchPopUp2.zip
http://www.dbwiki.net/images/6/6f/AccSampleKombiAuswahl.zip
http://www.dbwiki.net/images/9/95/AccSampleKombiAuswahlEndlosform.zip
usw..
Es ist schon nicht ganz einfach aus der EXCEL-Welt mal rauszutreten und in die ACCESS-Welt einzutreten.
Für mich ist ACCESS Neuland.
Ihr habt bestimmt Recht mit all euren Hilfen und kritischen Betrachtungen zu meinen Fragen.
In 95% aller Fälle sucht man einen Teilbegriff. Das behaupte ich jetzt mal so. Und da geht es schon los.
Wie dermaßen benutzerunfreundlich das abgeht.
"Dieser Kunde da, hmmm..... Namen hab ich jetzt nicht drauf.... das war in der ääähhh... irgendeine Allee glaube ich....mal suchen....moment.
So, und nun öffne ich den Formularbasierten Filter.
Ich klicke dann ins Datenbankfeld "Adresse"und gebe erstmal den "*" ein, dann "allee", dann wieder den "*".
So, nun "Filter anwenden"
Der Filter zeigt mir jetzt 75 Treffer an....
Klasse.... Klick..Nein...Klick..Nein....Klick..Nein, auch nicht.....habs gleich...... hmmmm, mal auf Tabellenansicht umschalten und scrollen.
Aaaah, das ist er... gefunden.
Ich weiß, das klingt ein bißchen nach Alzheimer..... aber sagt doch selbst, dass ist benutzerunfreundlich.
In Excel programmierte ich den Filter so, dass die Wildcards automatisch vor und hinter dem Suchbegriff stehen.
Und dann Suche als lookat:=xlPart, statt lookat:=xlWhole.
Daher meine Frage nach einem benutzerfreundlicheren Filter
über die InputBox, Wildcard vorne und hinten, suchen, umschalten auf Tabelle.
Fertig....
Hallo,
Daher meine Frage nach einem benutzerfreundlicheren Filter
über die InputBox, Wildcard vorne und hinten, suchen, umschalten auf Tabelle.
Würde eher chaotisch dazu sagen... ;D
Beispiel anbei... (Suchen nach Textfragment im Adressblock)
[Anhang gelöscht durch Administrator]
Hallo Achim,
Weiss jetzt gerade nicht welche Access-Version
Du verwendest, aber ab mind. A2010 (2007
weiss ich nicht), ist die gewünschte Funktiona-
lität bereits eingebaut in den Navigationsschalt-
flächen.
Da gibt es jetzt ein Feld "Suchen". Wenn Du
da ein Zeichen eingibst wird sofort zum ersten
DS im Formular gesprungen, der das Zeichen
in irgendeinem Feld enthält. Wenn Du weitere
Zeichen eingibst wird die neue Zeichenfolge ge-
sucht; mit ENTER dann der nächste DS mit dem
Vorkommen des Suchbegriffs. Ausnahme: der
Suchbegriff kommt in einem DS mehr als einmal
vor. Dann wird erst dieser DS durchlaufen bevor
zum nächsten gewechselt wird.
gruss ekkehard
Hallo Franz,
eine bemerkenswerte Sache mit diesem Universalfeld als Filter.
Das ist ja noch besser, als meine Idee mit der Inputbox..etc..etc..
Aber etwas unglücklich ist, dass man nur EINEN Wert, also einen Buchstaben eingeben kann.
Wenn man da ein paar mehr eingeben könnte, das wäre es dann.
Hallo Ekkehard,
ich habe ACCESS aus dem Office XP 2002
Hallo,
Extras/Optionen/Tastatur/Zum Ende des Feldes gehen anhaken...
oder auch:
Private Sub txtSuchen_Change()
Me.Filter = " K_Vorname & K_Nachname & K_Strasse & K_PLZ & K_Ort like '*" & Me!txtSuchen.Text & "*'"
Me.FilterOn = True
Me!txtSuchen.SelStart = 255
End Sub
Zitateine bemerkenswerte Sache mit diesem Universalfeld als Filter.
Das ist ja noch besser, als meine Idee mit der Inputbox..etc..etc..
Du liest offensichtlich die Postings nicht richtig:
ZitatIn diesen Fällen ist auch ein ungebundenes Textfeld für die Eingabe des Such-Kriteriums anstelle der Inputbox zu empfehlen.
Hallo accessy,
nebem den guten Limks von Franz zu entsprechenden Beispielen mal ein einfach gehaltenes Beispiel zum Erläutern des Prinzips. So könntest du nach zahlreichen Feldern "gleichzeitig" filtern u. natürlich auch mit Teilbegriffen. Auch können die Suchfelder im Formularkopf eingebaut sein usw....
Gruß Oma
[Anhang gelöscht durch Administrator]
Hallo Franz,
ich habe dein Beispiel übernommen und mal eingebaut.
Sobald ich auch nur einen Buchstaben klicke,
kommt der Laufzeitfehler 2448.
Sie können diesem Objekt keinen Wert zuweisen.
Muss ich noch irgendwo einen Haken setzen, oder entfernen,
oder eine andere Eigenschaft zuweisen.....??
Fehler gefunden !!!!
Funktioniert bestens.
Ich danke dir Franz für deine tatkräftige Hilfe dazu.