Ga naar inhoud

verwijzing naar bepaalde rij in recordset


arnoderuig

Aanbevolen berichten

Ik wil voor elk record in een database een apart rapport als output. Ik denk dat ik daarvoor via VBA iets zou moeten doen namelijk het openen van de tabel en dan via een loop-constructie naar een bepaalde rij in de tabel verwijzen waarna het rapport kan worden geprint (er komt dan een pdf-bestand uit). Het verwijzen naar elk apart record lukt me niet. Ik kan via een sql-string de tabel openen en het rapport draaien maar dan komt er één rapport uit voor alle records tesamen. Hoe verwijs ik in een sql-string naar één bepaald rijnummer?

Link naar reactie
Delen op andere sites

  • Reacties 20
  • Aangemaakt
  • Laatste reactie

Beste reacties in dit topic

Beste reacties in dit topic

Geplaatste afbeeldingen

Stegisoft, dank voor je reactie. Ik zal proberen wat meer duidelijkheid te geven.

Al jaren worden facturen vanuit een tabel met behulp van een rapport direct op papier geprint. Ik wil nu dat deze facturen als pdf-bestand beschikbaar komen. En dan niet één bestand met alle facturen, maar één bestand per factuur. De VBA-instructies om de output als pdf te krijgen beheers ik. Dat gaat uitstekend. Alleen; hoe krijg ik nu voor elkaar dat er per regel uit het bestand een factuur wordt afgedrukt.

Aansturing van het rapport gebeurt vanuit een formulier. Ik heb daarop een knop gemaakt die het rapport start. In het rapport staat de verwijzing naar de te gebruiken tabel waarin dus meerdere regels (lees factuurregels) staan. Ik had nu bedacht om via een loop-constructie via een sql-string (via een gebeurtenis) steeds één regel op te roepen, daarna het rapport starten, en dan via de loop het volgende record aan te roepen. Daarvoor heb ik dan een sql-instructie nodig om steeds slechts één record op te roepen. Ik kom er niet achter op welke wijze ik slechts één record kan aanwijzen. Ik heb veel op internet gezocht en kom daar een enkele keer iets tegen met 'rownum' maar dat levert bij mij steeds een foutmelding op dat parameters ontbreken hoewel ik (als probeersel) steeds heb aangegeven 'rownum = 1'.

Ik zie graag een oplossing tegemoet. Het kan natuurlijk ook zijn dat er een totaal andere manier is om dit op te lossen. Dan hoor ik dat graag.

Ik werk overigens met Access 2010.

Dank voor de inspanningen.

Arno.

Link naar reactie
Delen op andere sites

Je maakt een query van de tabel met de factuurnummer

Zet het in ontwerp

Bij factuur typt je bij creteria dit: [welke factuurnummer?]

Bij formulier maakt je een knopje en dan in eigenschappen dan tab gebeurtenis bij klikken in VB dit doen:

On Error GoTo factuurdrukfout

Dim BoekAfdelingdrukken_Click As Integer

DoCmd.OpenReport "naamvanreport", acPreview

factuurdrukfout:

Exit Sub

Resume factuurdrukfout

Zet de report in ontwerp.

Klik nu op pagina-instelling en dan nog eens pagina-instelling en dan tab pagina

Klik daar op specefiek printer en dan kies je pdf printer.

[ATTACH]7760[/ATTACH]

Ofwel zo doen:

Je maakt een query van de tabel met de factuurnummer

Zet het in ontwerp

Bij factuurnummer klik je bij creteria op opbouw en ga naar de betreffende formulier en dan klik je op factuurnummer en dan waarde

Je maakt formulier maakt je een knopje en dan in eigenschappen dan tab gebeurtenis bij klikken in VB dit doen:

On Error GoTo factuurdrukfout

Dim BoekAfdelingdrukken_Click As Integer

DoCmd.OpenReport "naamvanreport"

factuurdrukfout:

Exit Sub

Resume factuurdrukfout

Zet de report in ontwerp.

Klik nu op pagina-instelling en dan nog eens pagina-instelling en dan tab pagina

Klik daar op specefiek printer en dan kies je pdf printer.

[ATTACH]7761[/ATTACH]

Nota: acPreview betekend eerst laten kijken alvorens af te drukken.

Zonder acPreview wordt onmiddelijk afgedrukt

Voorbeeld is van access 2003 maar in 2010 is dat niet veel verschil doch ik heb op dit moment geen verlengkabel voor mijn andere computer.

Je kan ook uw database uploaden en dan zal ik kijken wat je kan doen.

Best comprineren met winrar want zip bestand kan ik hier op de forum niet openen.

post-6829-1417704240,7885_thumb.jpg

post-6829-1417704240,8194_thumb.jpg

aangepast door stegisoft
Link naar reactie
Delen op andere sites

Stegisoft,

Bedankt voor je uitgebreide reactie. Ik denk alleen dat dit niet is wat ik zoek. Ik zoek een oplossing om met letterlijk één druk op de knop vele indiiduele facturen als pdf-bestand te verkrijgen. Alle gegevens die nodig zijn zitten al in één tabel die record voor record kan worden doorlopen. Als ik jouw oplossing goed begrijp zou ik iedere keer handmatig een gegeven moeten selecteren. Dat is helaas bij 2.000 facturen per maand geen optie. Of heb ik je verkeerd begrepen?

Groet,

Arno.

Link naar reactie
Delen op andere sites

Je moet maar een keer doen.

Of je nu 1 factuur moet maken of miljoen dat maakt niks uit.

Bij de eerste geval moet je handmatig de factuurnummer opgeven wat soms handig kan zijn.

Bijvoorbeeld:

Een klant vraagt om factuur die hij niet kreeg te verzenden.

In dat geval is het handig op factuurnr 485 in te geven zodat die factuur wordt afgedrukt en niet de laatste factuur.

Zo kan je bijvoorbeeld alle facturen op datum afdrukken i.p.v. factuurnummer geven.

In dat geval geeft je in cretaria dit: [welke datum wenst je af te drukken?]

In de tweede geval moet je factuurnummer niet ingeven want dat doet de computer.

Ik zal iets vergelijkbaar geven zoals tweede geval met voorbeeld.

Hier is de tweede formulier gekoppelt aan de bestelnummer.

Zodra in dit geval het bedrag betaald is ingevuld kan je op ticket afdrukken klikken en wordt bon 68 afgedrukt.

Dus de computer weet dankzij de query dat hij bon 68 moet afdrukken.

Stel dat ik dan op bon 65 terug gaat dan zal de computer bon 65 afdrukken.

post-6829-1417704240,9402_thumb.jpg

aangepast door stegisoft
Link naar reactie
Delen op andere sites

Ik blijf het vermoeden houden dat de laatste opzet niet dat geeft wat ik zoek. Ik heb de zaak goed werken bij de volgende VBA-opdrachten:

Dim db As Database

Dim rst As Recordset

Dim strSQL As String

Dim vAantal As Integer

vAantal = 1

Set db = CurrentDb()

strSQL = "SELECT * FROM tblFactuurVoorlopig WHERE ((Rijnummer)= 8)"

'Rijnummer' is dus een kolom in de tabel tblFactuurVoorlopig. Deze lopen opvolgend vanaf 1 tot en met een willekeurig getal.

Bovenstaand voorbeeld geeft me de gegevens van rij 8. Dit werkt in de praktijk. Ik wil echter ook de andere rijen kunnen benaderen via een For Next constructie. Daartoe zou ik in dit voorbeeld de waarde 8 willen vervangen door de benoemde variabele waarde 'vAantal'. Omdat deze variabele in eerste instantie de waarde 1 meekrijgt zou het eerste record moeten kunnen worden benaderd.

de instructie luidt dan dus:

strSQL = "SELECT * FROM tblFactuurVoorlopig WHERE ((Rijnummer)= vAantal)"

Ik krijg echter een foutmelding 'Fout 3061 tijdens uitvoering. Er zijn te weinig paramaters. Verwachte waarde is 1.".

Enig idee wat hier fout gaat?

Link naar reactie
Delen op andere sites

kweezie wabbit,

Fijn dat je er even naar wil kijken. De bedoeling van de instructies is (uiteindelijk) om steeds 1 record te benaderen vanuit de tabel tblFactuurVoorlopig waarna een rapport kan worden gedraaid dat een pdf-bestand voor dat betreffende record aanmaakt. De instructies zijn dus nog niet af. Ik wilde eerst zien of ik één bepaald record kan bereiken omdat ik zeker geen ster in VBA ben.

Dim db As Database

Dim rst As Recordset

Dim strSQL As String

Dim vFactuur As String

Dim vDatum As String

Dim vAantal As Integer

vAantal = 1

Set db = CurrentDb()

strSQL = "SELECT * FROM tblFactuurVoorlopig WHERE ((Rijnummer)= 5)"

Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

vDatum = Forms!frmAfdrukkenFacturen!DatumJJJJMMDD

rst.MoveFirst

Do While Not rst.EOF

Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

vKlant = Right$("000000" & rst!KlantID, 6)

vFactuur = Right$("000000" & rst!FactuurID, 6)

DoCmd.OutputTo acOutputReport, "rptFacturenPrintenPDFindividueel", acFormatPDF, "X:\BAS\PDF\Factuur\Factuur-" & vKlant & "-" & vFactuur & "-" & vDatum & ".PDF"

vAantal = vAantal + 1

rst.MoveNext

Loop

rst.Close

Indien gewenst wil ik je wel de database sturen. Geef me in dat geval een privé-bericht.

Groet,

Arno.

Link naar reactie
Delen op andere sites


×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.