Avatar billede -anders- Juniormester
09. august 2001 - 18:17 Der er 8 kommentarer og
1 løsning

Fritekstsøgning i popup formular

Hej

Først en indledning:
Den indbyggede søgefunktion i access97 fungere, men er efter min mening ikke så brugervenlig, man skal feks. huske at bruge diverse jokertegn hvis man ikke lige ved havd man søger efter e.t.c.

Det jeg kunne tænke mig var:
Jeg har en fortløbende formular som altid vises i dataarkvisning, formularen har forskellige felter som helt naturligt for data fra en tabel.
Når jeg står i dataarkformularen vil jeg gerne åbne en popupformular, på denne formular har jeg tilføjet en ubundet tekstboks som jeg kalder \"Criteria\", der er ydermer to knapper \"Find\" og \"Find næste\".

Hvis jeg feks. skriver \"amager\" i den ubunde tekstboks, og klikker \"find\" skal søgningen så vise mig den første post der opfylder det jeg tastet. Hvis så søgningen returnerer en post hvor der i et evt. adressefelt står \"amagerbrogade\" og jeg så klikker på \"find næste\", skal søgningen returnere næste post feks. Amagerland e.t.c. Hvis søgningen ikke giver resultat skal der vises en meddelse (msgBox).

Ideen er at søgefunktionen skal søge alle felter igennem i dataarket.

Jeg har tidligere arbejdet men en ligende søgefunktion på en formular der ikke vises som dataark, men som alm. formular, og det virker fint, men her er feltet criteria sat på formularen som rent faktisk indeholder posterne, men det kan man jo ikke på dataark.

findes der en løsning på dette er der mange point at tjene. Nedenstående kode virker fint på en alm. formular, men som sagt er Tekstboksen \"criteria\" tilføjet den alm formular. Håber det er nogenlunde klart hvad jeg ønsker. *SSS*
\'Nedenstående kode søger efter en bestemt post i en formular\'
\'det vigtigt at indsætte et ubundet kontrolelement i formularen\'
\'eks. søger på fire felter i en formular\'
\'koden skal indsættes på en kommandoknap\'

    Private Sub Find_Click()
On Error GoTo Err_Find_Click

    Dim rst As DAO.Recordset
    Dim strSearchName As String
    [Find næste].Enabled = True
    If IsNull(Me![Criteria]) Or (Me![Criteria] = \"\") Then
        Beep
        Me![Criteria].SetFocus
    Else
        Set rst = Me.RecordsetClone
        strSearchName = Me!Criteria

            rst.FindFirst \"[BookingNr] like \'*\" & strSearchName & \"*\'\"
            Me![BookingNr].SetFocus
            If rst.NoMatch Then
                rst.FindFirst \"[Kundens navn] like \'*\" & strSearchName & \"*\'\"
                Me![Kundens navn].SetFocus
                If rst.NoMatch Then
                    rst.FindFirst \"[Telf1] like \'*\" & strSearchName & \"*\'\"
                    Me![Telf1].SetFocus
                    If rst.NoMatch Then
                        rst.FindFirst \"[dato] like \'*\" & strSearchName & \"*\'\"
                        Me![Dato].SetFocus
                        If rst.NoMatch Then
                            MsgBox \"Søgningen gav intet resultat\", vbQuestion, \"Søgning\"
                        DoCmd.GoToControl \"Criteria\"
                        End If
                    End If
                End If
            End If
        End If
        If Not rst.NoMatch Then Me.Bookmark = rst.Bookmark
        rst.Close
   
   
Exit_Find_Click:
    Exit Sub

Err_Find_Click:
    MsgBox \"Der skal indtastet mindst et tegn i den hvide boks\", vbQuestion, \"Søgning\"

    Resume Exit_Find_Click
   

End Sub

Avatar billede -anders- Juniormester
09. august 2001 - 18:34 #1
Hej Igen

smutter nu hjem fra arbejde, håber der nogen indlæg i morgen *SSS*
09. august 2001 - 19:44 #2
Har du en mailadresse? Jeg har en formular, som du måske kan bruge.
Avatar billede -anders- Juniormester
09. august 2001 - 20:48 #3
Hej Thomasjepsen.Det lyder spændende her er min mailadrr.  anj@nationalbanken.dk
Avatar billede nih Novice
09. august 2001 - 23:14 #4
Function Search(strSearch As String)
   
    Const SourceTbl As String = \"tbl_ElArt\"
    Const DestTbl As String = \"searchTbl\"
    \'destTbl skal hva mindst lige så mange felter som sourceTbl
   
    Dim db As DAO.Database
    Dim fld As Field
    Dim strTarget As String
    Dim rstSource As Recordset, rstDest As Recordset
    Dim i As Integer
    Dim var As Variant
   
    Set db = CurrentDb
    Set rstDest = db.OpenRecordset(DestTbl)
    Set rstSource = db.OpenRecordset(SourceTbl)
   
    db.Execute \"DELETE * FROM \" & DestTbl
On Error Resume Next
    With rstSource
        .MoveFirst
        Do Until .EOF
            For Each fld In .Fields
                strTarget = CStr(fld)
                If InStr(strTarget, strSearch) > 0 Then
                    var = .GetRows
                    rstDest.AddNew
                    For i = 0 To UBound(var, 1)
                        rstDest(i) = var(i, 0)
                    Next i
                    i = 0
                    rstDest.Update
                    .MoveLast
                    Exit For
                End If
            Next fld
            .MoveNext
        Loop
    End With
   
    rstDest.Close
    rstSource.Close
    db.Close
   
End Function

Sub test()
Search \"s\"
End Sub
Avatar billede nih Novice
09. august 2001 - 23:21 #5
Jeg har lavet ovenstående funktion

Du skal have 2 tabeller:
  Den du vil søge i.
  Den du vil have resultattet i.
indskriv disse øverst i koden.

kald funktionen med et søgeord som vist i sub test og alle poster der indeholder et felt med søgeordet eller tallet vil blive kopieret over i resultat tabellen.
Resultattabellen kan du bruge som kilde til lister comboboxe osv. (formular med alm navigations knapper.

On error resume next er pga felter med Null værdier, de giver fejl, men det er der måske nogen der kan løse ??????

Niels
Avatar billede nih Novice
09. august 2001 - 23:41 #6
Forskel på store/små bogstaver:

If InStr(1, strTarget, strSearch, 1) > 0 Then

Niels
Avatar billede terry Ekspert
10. august 2001 - 09:29 #7
hi a!
Perhaps you should take a look at this question which refers to other questions on this subject.

It doesnt give you a find/find next, but it finds them all in one go. Also easy to code too!

http://www.eksperten.dk/spm/95670

terry

Avatar billede -anders- Juniormester
10. august 2001 - 09:48 #8
Hej alle

Forløbig tak for jeres indlæg, jeg vil prøve at teste de forskelige løsninger i løbet af dagen, og vil så vende tilbage

aandersen
Avatar billede -anders- Juniormester
11. august 2001 - 20:36 #9
Hej Thomasjepsen
Jeg har nu arbejdet med en masse løsninger på min søgefunktion, det var noget af en udfordring!

Jeg har fået udviklet en funktion som består af både noget af den kode jeg havde i forvejen, samt noget kode du har forslået. Anyway uden dine kodeforslag var det ikke lykkes,så du har fortjent de 400 point, de er på vej til dig.

Også tak for alle de andre indlæg, det har været meget lærerigt.

*SSSS*
aandersen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester