Ga naar inhoud

verwijzing naar bepaalde rij in recordset


arnoderuig

Aanbevolen berichten

Zoals ik heb geprobeerd uit te leggen in mijn vraagstelling werkt de SQLstring niet als ik daarin de variabele vAantal plaats. Deze moet in de plaats komen van het cijfer 5. Ik heb namelijk vastgesteld dat als er een vaste waarde in staat (zoals 5) de sql wel werkt. Maak ik daar de variabele vAantal van dan krijg ik de foutmelding dat er een parameter ontbreekt. Alle records in de tabel hebben een uniek cijfer staan in de kolom rijnummer. Via de sql probeer ik dus steeds één rij te selecteren, waarvan ik later in de procedure gebruik van maak. De kolom Rijnummer is een integer. Daarom heb ik ook de variabele vAantal als integer gedefinieerd.

Schrik niet van wat de procedure in zijn huidige vorm uiteindelijk doet. Het is slechts in eerste instantie een probeersel om steeds één rij te kunnen selecteren. Als dat lukt (met de variabele) dan kan ik de procedure bouwen zoals ik uiteindelijk wil.

Link naar reactie
Delen op andere sites

  • Reacties 20
  • Aangemaakt
  • Laatste reactie

Beste reacties in dit topic

Beste reacties in dit topic

Geplaatste afbeeldingen

Ondertussen blijf ik bezig ook zelf oplossingen te zoeken. Mede door de reactie van Stegisoft heb ik de volgende oplossing eens geprobeerd.

Op het formulier frmAfdrukkenFacturen heb ik 3 velden geplaatst. Het eerste veld berekend de laagste waarde in de tblFacturenVoorlopig en wel in de kolom Index (dit is het sleutelveld van de tabel). Daarnaast een tweede veld dat de hoogste waarde berekend.

Onder een knop waarmee ik facturen wil printen heb ik onderstaande code staan:

Private Sub KnopAfdrukkenEnEmailFacturen_Click()

Dim db As Database

Dim rst As Recordset

Dim strSQL As String

Dim vFactuur As String

Dim vDatum As String

Dim vIndexActief As Long

Dim vIndexLaagste As Long

Dim vIndexHoogste As Long

vDatum = Forms!frmAfdrukkenFacturen!DatumJJJJMMDD

vIndexLaagste = Forms!frmAfdrukkenFacturen!IndexLaagste

vIndexHoogste = Forms!frmAfdrukkenFacturen!IndexHoogste

Set db = CurrentDb()

strSQL = "Select * from qryFactuurVoorlopig"

For vIndexActief = vIndexLaagste To vIndexHoogste

Forms!frmAfdrukkenFacturen!IndexActief = vIndexActief

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"

Next

rst.Close

End Sub

Deze code haalt dus de eerdergenoemde twee waarden van het formulier op. Via de For Next wordt de eerste waarde opgehaald en plaatst dit in een derde veld op het formulier. Dit veld (IndexActief) is meteen een parameter voor een nieuwe query qryFactuurVoorlopig.

Ook in deze constructie komt de foutmelding dat er een parameter mist hoewel deze parameter is benoemd in de query. Bij controle blijkt dat de query wel degelijk de juiste record weergeeft. Haal ik de parameter uit de query (waardoor eigenlijk de hele tabel tblFactuurVoorlopig wordt geselecteerd) dan krijg ik dezelfde foutmelding. Wijzig ik het aanroepen van de query in het aanroepen van de tabel dan heb ik geen foutmelding.

Ik snap dus nog steeds niet naar welke parameter de SQL-string op zoek is.

Link naar reactie
Delen op andere sites

Stegisoft,

Ik kan je niet helemaal volgen. Wil je me aangeven in welk bericht ik de tekst

strSQL = "SELECT * FROM tblFactuurVoorlopig WHERE ((Rijnummer)= Forms!frmAfdrukkenFacturen!Rijnummer)"

heb gebruikt?

De enige keren waarin ik het tekstdeel

WHERE ((Rijnummer)=

heb gebruikt is met vaste waarden 5 en 8 en ook heb ik de variabale vAantal gebruikt. Verder dus geen verwijzing naar een formulier.

Link naar reactie
Delen op andere sites

Zie bericht 9 van u.

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

Je zegt toch van Tabel tblFactuurVoorlopig en rijnummer.

Dus zit er in de tabel een kolom met rijnummer

Je maakt een formulier verondersteld ik en die je maakt van Tabel tblFactuurVoorlopig

In die formulier staat toch rijnummer.

Als je afdrukt dient je een parameter op te geven

Dus Rijnummer van tblFactuurVoorlopig moet de computer vergelijken met forumulier frmAfdrukkenFacturen en Rijnummer

aangepast door stegisoft
Link naar reactie
Delen op andere sites

Nu zie ik wat je bedoelt. Het feit dat er een tabel tblFactuurVoorlopig is wil niet zeggen dat de daarin opgenomen Rijnummer zich ook op mijn formulier bevindt. Die veronderstelling is onjuist. De factuurgegevens op zich zijn via een ander formulier ingevoerd en daarna automatisch voorzien van een rijnummer. Het formulier wat ik noem bevat slechts een knop waarmee het facturatieproces (bestaande uit het daadwerkelijk printen van facturen) wordt gestart. Onder die knop bevindt zich de procedure die ik hierboven heb aangehaald. De bedoeling van de procedure is dat volautomatisch de te gebruiken rijnummers ophaalt vanuit de tabel en daarna gebruikt om record voor record te benaderen en er een pdf-bestand (inhoudende een individuele factuur) van te maken.

Groet,

Arno.

Link naar reactie
Delen op andere sites

Even samenvatten

Je wil alle records uit de tabel tblFactuurVoorlopig een voor een inlezen en afdrukken in een rapport.

In de tabel tblFactuurVoorlopig staat een kolom "rijnummer" met een uniek getal gaande van 1 tot xxx

Je wil dit rijnummer gebruiken om de records te selecteren.

Eigenlijk heb je dit rijnummer niet nodig.

Je moet eerst de tabel tblFactuurVoorlopig volledig inlezen in je recordset.

Indien gewenst kan je sorteren op rijnummer

Dan kan je in een loop door de recordset gaan van first tot EOF

De code ziet er dan ongeveer als volgt uit.

Rood = te verwijderen

Blauw = aan te passen

Dim db As Database
Dim rst As Recordset
Dim strSQL As String
Dim vFactuur As String
Dim vDatum As String
[color=red]' Dim vAantal As Integer[/color]
[color=red]' vAantal = 1[/color]
Set db = CurrentDb()
[color=blue]strSQL = "SELECT * FROM tblFactuurVoorlopig"[/color]
Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
vDatum = Forms!frmAfdrukkenFacturen!DatumJJJJMMDD
rst.MoveFirst
Do While Not rst.EOF
[color=red]' Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)[/color]
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"
[color=red]' vAantal = vAantal + 1[/color]
rst.MoveNext
Loop
rst.Close

Link naar reactie
Delen op andere sites

kweezie wabbit,

Bedankt voor je reactie. Er blijft helaas een probleem:

In jouw oplossing wordt voor elk record in de tabel een overzicht opgesteld met de gegevens van alle records in de tabel. Anders uitgelegd:

Als de tabel 5 records bevat worden 5 bestanden aangemaakt (keurig met verschillende namen) maar met elk 5 facturen. Dat is dus niet de bedoeling. Elk bestand zou slechts de gegevens van 1 bijbehorend record moeten bevatten.

Zoeken op internet (ik zoek wat af tegenwoordig rond dit probleem) zou het mogelijke probleem kunnen zijn dat voor elk record in de tabel het rapport wordt aangeroepen. Dat rapport heeft echter weer een verwijzing naar de (volledige) tabel. Dat was oorspronkelijk voor mij de reden om te zoeken naar een mogelijkheid om per record een query op te roepen die dus slechts van 1 factuur de gegevens bevat. Het rapport zou dan per keer voor 1 factuur de gegevens als output aanmaken. Bij de keuzxe van een query krijg ik echter telkens het probleem dat het aanroepen van de SQL-string een foutmelding oproept dat een parameter ontbreekt.

Indien dat helpt heb ik een test-database beschikbaar.

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.