A.E.Veltstra
23/08/2001
Kenwoorden: access, ac2000, query, parameterquery, parameter, querydefinitie, querydef, recordset, datakoppeling, binden, formulier
Stel, je hebt een uitgebreide parameterquery, die zo groot is, dat Ac2000 het niet toestaat zijn code in te voeren in de RecordSource-eigenschap van het formulier. Je komt er dan achter dat een parameterquery niet zomaar werkt in een formulier.
Hoewel je de parameters van een query kunt instellen door het querydef-object aan te spreken, en daarvan het gewenste parameter-object te wijzigen, heeft dat geen invloed op het formulier. Vooral niet, als je in ontwerpmodus de recordbron van het formulier al aan de query hebt gekoppeld. In dat geval vult Ac2000 wel de parameters, maar trekt zich daar niets van aan als een moment later het formulier geopend wordt.
De oplossing lijkt eenvoudig: declareer een querydef-objectvariabele, stel de parameters in, en stel de recordset van het formulier in op de OpenRecordset-functie van de querydef. Echter, dit werkt niet.
Onderstaand voorbeeld werkt wel:
Public Function Init(ByVal strTekst As String, ByVal lngGetal As Long) As BooleanDe reden dat dit wel werkt, is dat de recordset van het formulier wordt ingesteld op de recordsetclone van de recordset-objectvariabele. Het lukt niet, wanneer de formulierrecordset wordt ingesteld om de recordset-objectvariabele zelf! (Toen ik dat probeerde, gaf Ac2000 de melding dat ‘‘de applicatie-icoon niet kan worden ingesteld op het bestand ‘Recordset‘.‘‘ Er gaat dus nog ergens iets fout, daarbinnen...)
Waarom gebeurt dit? Ik vermoed samen met Theo Schrijver (docent bij Edion), dat de recordsetclone een extra scheiding plaatst, waardoor het formulier opeens wel met de query kan omgaan. Zeker weten doen we het niet.