Query werkt niet vanuit vba Access

  • Onderwerp starter Onderwerp starter BjKai
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

BjKai

Nieuwe gebruiker
Lid geworden
4 mrt 2012
Berichten
2
Hallo allemaal,
Ik ben niet helemaal onbekend met Access en Vba, maar toch loop ik tegen een probleem aan. Ik probeer het zo eenvoudig mogelijk uit te leggen....

Ik moet bepaalde gem.waarden in tabellen wegschrijven vanuit vba; rechtstreeks gaat dit niet (dan schiet mijn kennis wel even te kort). Dus gebruik een tussen oplossing:
1. verzamel de gegevens van de laatste 6 records mbv een bestaande query met als criterium een in een formulier ingevuld veld. In mijn geval een getal.
2. bereken de gemiddelde waarden over deze waarden door in vba een recordset op te bouwen middels deze query.

Het probleem is nu: de query geeft geen waarden... wanneer ik de query opvraag (rechtstreeks, dus vanuit Access)terwijl het formulier is geopend, deze wel de 6 records laat zien. Wanneer de query wordt opgeroepen vanuit vba geeft deze een foutmelding!?: "2 parameters vereist"

Ik hoop dat dit duidelijk is zo. Anders... zie onder

Code:
Querydef "qryWaardenLaatste6Charges":
SELECT TOP 6 tblBunker.lngBunkerID, tblVoorraden.lngproductid, tblVoorraden.charge, tblVoorraden.BatchId, tblVoorraden.dateWeggestort, tblVoorraden.lngGewicht, tblCharges.lngCyclustijd, tblCharges.IV, tblCharges.RV, tblCharges.Vocht, tblCharges.[L*], tblCharges.[a*], tblCharges.[b*], tblCharges.[Lp*], tblCharges.[ap*], tblCharges.[bp*] 
FROM tblCharges INNER JOIN (tblBunker INNER JOIN tblVoorraden ON tblBunker.lngBunkerID = tblVoorraden.lngBunkersID) ON tblCharges.Charge = tblVoorraden.charge 
WHERE (((tblBunker.lngBunkerID)=[Forms]![frmChargesInput]![lngBunkerID]) AND ((tblVoorraden.ynDeelsWeggewerkt)=0) AND ((tblVoorraden.ynWeggewerkt)=0) AND ((tblVoorraden.ynDeleted)=0)) 
ORDER BY tblVoorraden.dateWeggestort DESC;
Code:
Aanroep vanuit vba:
strSQL = "SELECT [qryWaardenLaatste6Charges].strBunkerCode, [qryWaardenLaatste6Charges].lngproductid, Sum([qryWaardenLaatste6Charges].lngGewicht) AS SomVanlngGewicht, " & _ 
"Avg([qryWaardenLaatste6Charges].lngCyclustijd) AS GemVanlngCyclustijd, Avg([qryWaardenLaatste6Charges].IV) AS GemVanIV, " & _ 
"Avg([qryWaardenLaatste6Charges].RV) AS GemVanRV, Avg([qryWaardenLaatste6Charges].Vocht) AS GemVanVocht, " & _ 
"Avg([qryWaardenLaatste6Charges].[L*]) AS [GemVanL*], Avg([qryWaardenLaatste6Charges].[a*]) AS [GemVana*], " & _ 
"Avg([qryWaardenLaatste6Charges].[b*]) AS [GemVanb*], Avg([qryWaardenLaatste6Charges].[Lp*]) AS [GemVanLp*], " & _ 
"Avg([qryWaardenLaatste6Charges].[ap*]) AS [GemVanap*], Avg([qryWaardenLaatste6Charges].[bp*]) AS [GemVanbp*] " & _ 
"FROM [qryWaardenLaatste6Charges] " & _ 
"GROUP BY qryWaardenLaatste6Charges.lngBunkerID, qryWaardenLaatste6Charges.lngproductid;" 
... 
Set rst = db.OpenRecordset(strSQL)
 
Laatst bewerkt door een moderator:
Het verbaast me een beetje dat je verbaasd ben dat de query het alleen doet vanuit het formulier; je hebt zelf dit criterium gemaakt:
Code:
(tblBunker.lngBunkerID=[Forms]![frmChargesInput]![lngBunkerID])
En dat is een criterium waarbij je een waarde uit het formulier frmChargesInput opvraagt. Is dat formulier niet geopend, dan komt er uiteraard geen resultaat uit. Bovendien kun je met deze regel
Code:
Set rst = db.OpenRecordset(strSQL)
alleen recordsets openen. Een Select query lukt dus niet.
Een oplossing kan zijn: maak een tijdelijke query aan, verander de SQL ervan met de query die je wilt genereren, waarbij je de WHERE dan zo moet aanpassen:
Code:
(tblBunker.lngBunkerID=" & Me.lngBunkerID & ")
Het resultaat is dan, dat je een fysieke toewijzing maakt in de query, waarbij de echte waarde wordt gebruikt als filter, niet een verwijzing naar het formulierveld.
 
Bedankt Octafish voor de reactie,

Het formulier is geopend wanneer de query wordt opgevraagd dus [Forms]![frmChargesInput]![lngBunkerID] is bekend.
Ik heb wel zelf al een fout gezien in de slqstring: [qryWaardenLaatste6Charges].strBunkerCode moet zijn [qryWaardenLaatste6Charges].lngBunkerID.

Ik zal eerst dit recht zetten...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan