Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: accessy am November 21, 2012, 07:13:22

Titel: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 21, 2012, 07:13:22
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: database am November 23, 2012, 11:01:59
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


Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: ebs17 am November 23, 2012, 11:28:03
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 23, 2012, 14:29:59
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: Maxel am November 23, 2012, 14:51:42
Hallo,

Call suchenStr(Tabellenname)

...

Private Sub suchenStr(Tabellenname As String)

...

& " from " & Tabellenname & " where "
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 23, 2012, 15:02:13
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..
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: Beaker s.a. am November 23, 2012, 16:31:40
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: database am November 23, 2012, 17:23:04
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 23, 2012, 17:59:17
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: database am November 23, 2012, 20:40:53
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.
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 23, 2012, 22:18:11
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.
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: DF6GL am November 23, 2012, 22:35:09
Hallo,


Dim db As DAO.Database
Dim rs As DAO.Recordset

und Verweis setzen auf die Dao3.6-Library
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 24, 2012, 09:06:17
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: database am November 24, 2012, 10:33:34
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!
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: DF6GL am November 24, 2012, 10:38:11
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: database am November 24, 2012, 11:03:41
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.
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: Beaker s.a. am November 24, 2012, 13:51:06
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)
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 24, 2012, 15:06:44
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.
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: DF6GL am November 24, 2012, 21:14:08
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 Sub


Hier 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 Sub


Ich empfehle, sich auf www.dbwiki.net mal umzusehen....



Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: ebs17 am November 25, 2012, 11:12:42
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 25, 2012, 12:24:23
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.
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: ebs17 am November 25, 2012, 12:57:28
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: DF6GL am November 25, 2012, 13:06:07
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..
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 25, 2012, 13:42:53
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....
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: DF6GL am November 25, 2012, 14:12:16
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]
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: Beaker s.a. am November 25, 2012, 14:27:39
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
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 25, 2012, 14:31:39
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.

Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 25, 2012, 14:32:56
Hallo Ekkehard,

ich habe ACCESS aus dem Office XP 2002
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: DF6GL am November 25, 2012, 14:37:09
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.
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: oma am November 25, 2012, 14:52:01
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]
Titel: Re: Komfortable Suche - Fehler 3078 im VBA Code
Beitrag von: accessy am November 25, 2012, 14:59:02
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.