Zoekformulier maken in acces 2007

Status
Niet open voor verdere reacties.

kwajong67

Gebruiker
Lid geworden
9 aug 2011
Berichten
179
Hallo hier ben ik al weer met de derde vraag :o:o:o:o:o:o:o:o:o:o

Ik ben bezig een dvd database te maken in acces 2007

nu wil ik graag een zoekformulier maken dat ik filmtitels of fils van bepaalde acteurs kan zoeken in de database.

hoe pak ik dat aan?

p.p. graag indien mogelijk wil ik de zoektocht niet hoofdlettergevoelig hebbeb
:D
 
Zoekfilters in Access zijn in beginsel niet hoofdlettergevoelig, tenzij je dat zelf instelt. Dus daar hoef je niet bang voor te zijn. In het forum zijn verschillende voorbeelden van filteren te vinden. Ik heb er eentje bijgevoegd...
 

Bijlagen

nog even een andere vraag ik ga zo kijken naar je voorbeeld maar ik probeerde net ook een bestand mee te sturen maar hij zit niet bij mijn vraag zie ik hoe doe jij dat?
 
ik zie in je voorbeeld een lijst met diverse gegevens met boven elke kolom een gekleud vak waar ik ik typen kan maar als ik er in typ gebeurd er totaal niets

als ik b.v. boven de vierde kolom VO typ krijg ik niet alleen de gegevens met VO te zien

ook krijg ik een foutmelding

de expressie na bewerken enz enz enz als ik dan help weergeven klik krijg ik het onderstaande:

Deze fout treedt op als een gebeurtenis niet is uitgevoerd omdat Microsoft Office Access de locatie van de logica voor de gebeurtenis niet kan beoordelen. Een voorbeeld: als de eigenschap OnOpen van de vorm is ingesteld op =[Field] doet deze out zich voor omdat Access verwacht dat er een macro of gebeurtenisnaam wordt uitgevoerd wanneer de gebeurtenis wordt geactiveerd.
 
De roze vakken zijn keuzelijsten; daar filter je dus op volledige waarden die uit de tabel worden gehaald. De blauwe vakken zijn tekstvakken; daar kun je dus in typen, en op basis van het gekozen filtermodel krijg je de filtering gelijk te zien. Staat de optie <Zoeken op willekeurig teken> aan, dan zoekt hij in die kolom naar elk(e) teken(combinatie) die je intypt. Dat moet 'live' gebeuren, dus je ziet gelijk wat je doet. Klik je op de knop dan verandert het filter naar <Zoeken vanaf begin veld>. Nu filtert hij op de eerste letter(s) die je typt.
Misschien staat de macro beveiliging aan, zodat de vba code niet werkt. Het kan ook zijn dat het formulier niet jofel werkt in 2007, dat heb ik niet getest.
 
Ik kom er nog niet echt uit met dit voorbeeld.
Ik probeerde al mijn database als voorbeeld er bij te doen maar dat lukte niet
 
Doet-ie het wel? of nog steeds een foutmelding?
 
als ik in het blauwe vak boven een kolom een woord die in die kolom voor komt typ dan gebeurd er niets met het beeld ik blijf gewoon alle records zien er wordt dus niets uitgefilterd
 
als ik in de rode vakken typ dan komt nog steeds de foutmelding bij me
 
Dat zijn dan ook keuzelijsten; je zou overigens een waarde moeten kunnen selecteren door de beginletter(s) te typen. En de blauwe tekstvakken?
 
de blauwe textvlakken gebruiken werkt ook niet ik kan wel typen maar er verandert niets

de rode vlakken kan ik wel typen maar ik krijg niet een keuze als ik de beginletters typ van een waarde in de lijst
 
Dan doet het formulier niet veel :D Dan denk ik toch dat ofwel de beveiligingsopties niet goed staan, ofwel dat het formulier niet werkt in 2007, maar dat zou ik al wel eerder gehoord hebben denk ik. Kreeg je niet de vraag of je de macro's moest toestaan of niet?
 
nee dat werd niet gevraagd maar waar kan ik dat in of uit zetten?
 
Ergens in je opties, in het Beveiligingscentrum.
 
ok ik heb het voor elkaar die filter formulier werkt nu bij mij en het is in feite precies wat ik zou willen

maar hoe krijg ik die nu werkend voor mijn database?
 
Tja, dat kan ik uiteraard zo niet zeggen; ik heb je db niet... Zonder voorbeeld kan ik je niet vertellen hoe je het moet integreren in je eigen db. In grote lijnen werkt het zo: elk zoekveld (zowel tekstveld als keuzelijst) zoekt in een specifiek eigen veld. De filterfuncties zijn heel algemeen opgezet, om de filters te kunnen combineren. Omdat je bij het maken van een filter uiteraard moet weten op welk veld je wilt filteren, moet de functie de veldnaam ergens vandaan halen. En dat doen we door de naam van het tabelveld vast te leggen in de eigenschap <Extra Info> op het tabblad <Overige> van de zoekvelden. Als voorbeeld het zoekveld [f2]. Dit veld staat in de koptekst boven het tabelveld [DocOnderwerp], dus je mag aannemen dat [f2] gebruikt wordt om te zoeken in [DocOnderwerp], en dat is dus ook zo. Bij het tekstveld f2 vind je dus bij <Extra Info> de tekst: [DocOnderwerp].
In de functie wordt de extra info uitgelezen met de parameter TAG.
Dus: elk zoekveld heeft in <Extra Info> een tekstverwijzing staan naar een tabelveld. In de functie wordt deze uitgelezen, en wordt vervolgens gefilterd op het tabelveld dat overeenkomt met deze TAG. Deze constructie werkt prima zolang je in de tabel de veldnamen niet veranderd. Doe je dat wel, en verander je bijvoorbeeld de veldnaam [DocOnderwerp] in [Onderwerp], en pas je de Extra Info niet aan in het tekstveld f2, dan zul je zien dat het filter niet meer werkt. Op zich dus wel een goede manier om te zien waarvan het filter afhankelijk is...
 
Ik heb je db bekeken, en ik vind 'm nog niet heel geweldig; je hebt bijvoorbeeld één veld voor alle acteurs. Dat druist tegen nogal wat database principes in, wat je uiteraard weet, want je hebt de cursus Access ook gelezen :) Door deze opzet is het bijna onmogelijk om een lijst te maken van de films die een bepaalde acteur gemaakt heeft bijvoorbeeld. Door in hetzelfde veld stembijdragen te vermelden als 'de stem van Bruce Willis' maakt het er ook niet makkelijker op. Ik heb daarom een routine gemaakt die de acteurs per film in een aparte tabel zet, en de stem optredens apart vermeld in een Ja/Nee veld. Daarmee is de db al wat beter genormaliseerd.
Maak een nieuwe knop op een formulier met deze code, en je kunt het proces zelf ook uitvoeren...

Code:
Dim strSQL As String, tmp
Dim i As Integer, iFilm As Integer

    strSQL = "SELECT FilmID, Acteurs FROM [dvd invoer]"
    With CurrentDb.OpenRecordset(strSQL)
        .MoveLast
        .MoveFirst
        Do While Not .EOF
            If Not Nz(.Fields("Acteurs"), "") = "" Then
                iFilm = .Fields("FilmID").Value
                tmp = Split(.Fields("Acteurs"), ",")
                With CurrentDb.OpenRecordset("Acteurs per Film")
                    If LBound(tmp) = UBound(tmp) Then
                        .AddNew
                        .Fields("FilmNummer") = iFilm
                        .Fields("Acteur") = tmp(0)
                        .Update
                    Else
                        For i = LBound(tmp) To UBound(tmp)
                            .AddNew
                            .Fields("FilmNummer") = iFilm
                            If InStr(1, tmp(i), "stem van") > 0 Then
                                .Fields("Acteur") = Trim(Mid(Trim(tmp(i)), 12))
                                .Fields("Stem") = -1
                            Else
                                .Fields("Acteur") = Trim(tmp(i))
                            End If
                            .Update
                        Next i
                    End If
                    .Close
                End With
            End If
            .MoveNext
        Loop
    End With

Ik snap niet helemaal hoe je het formulier wilt gebruiken om te zoeken; je hebt wel een macroknop gemaakt, maar ik heb geen idee op welke tabel hij moet werken. Zowiezo ben ik een fervent tegenstander van macro's....
 
Ik heb zelf een nieuwe tabel gemaakt met de naam "Acteurs per film". Die naam zie je ook terug in de code. Als je een andere tabelnaam gebruikt, en waarom niet ( :) ) moet je die in de code uiteraard aanpassen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan