Vraag & Antwoord

Programmeren

Search in een Report van Access

14 antwoorden
  • Het programma genereert een Report met op elke pagina een brief aan iemand uit de database, met aangepaste gegevens (naam, adres, te betalen, lidmaatschap, en dergelijke). Omdat de lijst ongeveer 700 namen heeft, zijn er dus evenveel pagina's in het Report. Stel ik will kijken wat er precies staat in de pagina voor meneer Jan Jansen (of ik wil alleen die brief afdrukken). Om op die pagina te komen moet if een schatting maken van het paginanummer en dat invullen in de Navigation Box en corrigeren als ik tever of niet ver genoeg ben. Ik heb lang geleden ergens een code gezien om de Navigation balk te maken. Je kunt dan de originale navigation balk uitschakelen. Op die nieuwe balk zou ik wellicht een search knop kunnen plaatsen.
  • [code:1:b6e50618f4] DoCmd.OpenReport "Factuur", acViewPreview, , "[Factuurnummer] = Forms![Facturering]![Factnr]" [/code:1:b6e50618f4] dmv de code kunt u een report openen met een filter. in dit voorbeeld heet het report [Factuur] De onderliggende database bevat een veld [Factuurnummer] Dit "Factuurnummer" wordt vergeleken met een tekstvak in een formulier [Factnr] Je kunt een knop op het formulier maken om de code aan te roepen. Wim
  • Bedankt voor de suggestie, maar dat weet ik al. Tenmisnste als je bedoelt dat het (gefilterde) Report gegenereerd wordt door de aanroep op het formulier. De vraag gaat echteer over de situatie waarin het volledige Report al op het scherm staat. Je kunt dan naar een bepaalde pagina navigeren door een getal in te vullen in de navigatie balk. Ik zoek een manier wwarbij je bovendien in een navigatie balk een naam kunt invullen. Joop
  • [code:1:645fb3e6e2]Function zoek_naam() Dim zoekwoord As String zoekwoord = InputBox("geef de naam op: ", "Zoek naam") Reports![reportnaam].Filter = "Naam = " & zoekwoord Reports![reportnaam].FilterOn = True End Function [/code:1:645fb3e6e2] Ik heb een test gedaan met een procedure die het filter van het report goed zet. Als je deze procedure aanroept met een knop welke in de werkbalk van het report. (werkbalk : afdrukvoorbeeld) Is dat een optie? Wim[/code]
  • Bedankt. Het lijkt een optie. Maar waar moet ik de knop plaatsen. De zaak is dat ik al jaren de Engelse versie van Access gebruik. Ik ben helemaal niet vertrouwd met de Nederlandse woorden. Met 'de werkbalk' bedoel je naar ik aanneem: Toolbar. Maar wat is dan de werkbalk 'afdrukvoorbeeld'. Ik ben me nooit bewust geweest dat een report een eigen werkbalk heeft. (Een mens houdt niet op met leren). Kun je me wat verder brengen? Joop
  • open een afdrukvoorbeeld van het raport. Ga met de muis op de knoppenbalk staan en druk op de rechter toets kies: Customize. dan Tablad Commands. Sleep de bovenste button in de rechterlijst (Custom) naar boven in de knoppenbalk (Print preview genaamd). Laat het Customize window open staan en ga met de muis naar de nieuwe "Custom" knop en druk op de rechter toets, kies:properties vul bij "On actions" de procedurenaam in bv: =procedurenaam() Succes Wim
  • Ik had het moeten weten. Bedankt
  • Je gaf me het idee voor zoeken in een report. Ik gebruik nu: Function zoek_naamInReportNaam(filteren as Boolean) Dim zoekwoord As String If filteren = True then zoekwoord = InputBox("geef de naam op: ", "Zoek naam") Reports![reportnaam].Filter = "Naam = " & zoekwoord End if Reports![reportnaam].FilterOn = filteren End Function Nadeel is dat ik nu voor elk report zo'n functie moet maken. Vraag: Is er een manier waarbij de naam van het report as parameter kan worden ingevoerd: Function zoek_naam(reportnaam as Report, filteren as Boolean) Wat moet ik dan in de plaats van [reportnaam] in Reports![reportnaam].Filter schrijven? Joop P.S. Ik heb hetdeels opgelost door een indicator als parameter in de functie te brengen en dan met Select Case indicator te werken: Function zoek_naam(indicator as String, filteren as Boolean) enzovoort. Het blijft een nadeel dat ik dan voor elk report een Case met een andere waarde van de indicator moet schrijven. De functie wordt wel erg lang zo.
  • [code:1:23ad195843]Dim rptHuidigRapport As Report Set rptHuidigRapport = Screen.ActiveReport MsgBox "Huidig rapport is " & rptHuidigRapport.Name [/code:1:23ad195843] Kijk eens bij de help van ActiveReport Daar vond ik bovenstaande code. Hiermee kun je dus de naam van het openstaand rapport opvragen en toewijzen aan een variabele. Die kun je weer gebruiken om je programma aan te passen. Wim
  • Bedankt. Het lost nog steeds niet het probleem van Reports![reportname].Filter = enz op, maar het geeft me wel de mogelijkheid om alleen 1 tool bar te gebruiken in plaats van voor ieder report een aparte toolbar te maken. Ik kan nu de reportnaam gebruiken als indicator voor Selec Case in 1 procedure.
  • Het is de bedoeling dat je de code in een module plaats en niet onder een report. zodoende hoef je maar een code te hebben voor alle reports die je nog maakt. (zie laatste tab van de database venster [ACCESS97]) :-? succes, Wim
  • :D ‘Ja, dat wist ik. Wellicht ben je ge-interesseerd in wat ik heb gedaan. ‘Bij het openen van een report komt er een Tool bar waarop onder een Zoek button ‘met in het OnAction veld: =SearchName(CurrentReport(),true) ‘en een Unfilter button met in het OnAction veld: =SearchName(CurrentReport(),false) ‘De volgende twee functies staan in een module Function CurrentReport() On Error GoTo 1 'If no Report is current, then just goto End Function Dim rptCurrentReport As Report Set rptCurrentReport = Screen.ActiveReport CurrentReport = rptCurrentReport.Name 1 End Function Function SearchName(rpt As String, AddFilter As Boolean) 'SearchName("DEPOSIT") Dim zoekwoord As String If AddFilter Then zoekwoord = UCase(InputBox("Enter family name: ")) rpt = UCase(rpt) ‘Ucase voor de zekerheid om eventuele vergissingen op te heffen Select Case rpt ‘Nu komen een twintigtal Case-s, elke voor een ander report, die er allemaal zo uitzien: Case "reportname" If AddFilter Then Reports![reportname].Filter = "Ucase([Family name]) _ Like '*" & zoekwoord & "*'" Reports![reportname].FilterOn = AddFilter End Select End Function ‘Het geheel werkt prima. Je hebt me een eind op het spoor gezet. ‘Om het helemaal mooi te maken zou ik in plaats van de Case-s een variable voor ‘Reports![reportname]. willen hebben. ‘Merkwaardigerwijze geeft het programma wel Screen.ActiveReport.Filter en ‘Screen.ActiveReport.FilterOn als mogelijkheid, maar bij het testen kreeg ik de ‘dat het attribute niet geldig is. Misschien moet er een library in de Relations van het ‘Tool menu aangevinkt worden, maar ik zou niet weten welke. ‘Bedaknt voor je moeite. ‘Joop
  • [code:1:1608104d40]Function zoek_naam() Dim zoekwoord As String zoekwoord = InputBox("geef de naam op: ", "Zoek naam") zoekwoord = "veldA = '" & zoekwoord & "'" Reports(0).Filter = zoekwoord Reports(0).FilterOn = True End Function [/code:1:1608104d40] Ik snap nu wat je bedoeld Ik heb even zitten oefenen en mischien is dit iets. Het werkt alleen maar als je maximaal 1 rapport open hebt staan. (danwel het eerste rapport dat geopend is) mischien een ideetje? Wim
  • Prachtig, Wim. Precies wat ik zocht. Bedankt Joop

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.