Comme dans le titre, je suis confronté à un phénomène étrange. J'ai un formulaire qui contient deux sous-formulaires. Sur les deux sous-formulaires, j'ai un bouton qui déclenche la requery du sous-formulaire concerné. Si après avoir chargé le formulaire, je clique immédiatement sur ce bouton (actualiser le formulaire) J'obtiens l'erreur "3021: Aucun enregistrement courant" quand j'essaye d'enregistrer la valeur de la clé primaire de l'enregistrement courant dans l'événement OnCurrent à une variable. Étrangement dans le débogueur les valeurs pertinentes sont comme ceci:Form.CurrentRecord = 1 et Form.RecordSet.Absoluteposition = -1
Form.CurrentRecord=1
Form.RecordSet.Absoluteposition=-1
Form.RecordSet.RecordCount=14
Form.RecordSet.EOF=False
Form.RecordSet.BOF=False
Notez également que lorsque le formulaire est chargé, en cas de charge, il fonctionne toujours correctement et là, je peux enregistrer la valeur de clé primaire qui est la clé primaire contenue dans le premier enregistrement.
Quelque part entre Form_Load et moi en cliquant sur ce bouton requery l'état du formulaire est désynchronisé. Je viens tout juste de passer d'Access 2003 à 2007 et, autant que je me souvienne, cette erreur ne s'est pas produite auparavant (bien que je n'aime pas cliquer sur ce bouton juste après le chargement).
Pour l'instant, j'ai une solution de contournement, mais j'aimerais vraiment comprendre comment cela peut arriver.
« mais je crois que, avant un retour .MoveLast un ADO RecordCount -1 » - incorrect. Contrairement à un jeu d'enregistrements DAO, la propriété RecordCount dans ADO ne change pas simplement en naviguant EOF car toutes les lignes sont récupérées; Même lors de l'extraction asynchrone des lignes, dans l'événement _Progess, RecordCount affiche la valeur finale plutôt que le nombre de lignes extraites jusqu'à présent. Par conséquent, je ne peux pas voir comment AbsolutePosition pourrait ne pas fonctionner de la même manière. – onedaywhen
Je ne peux pas répliquer le problème signalé avec .Recordset du formulaire ou le .RecordsetClone. Il retourne 0 pour le premier enregistrement chaque fois que je l'ai testé, donc je ne sais pas quel est le problème. Il ya * quelque chose que je me rappelle où le .RecordCount d'un jeu d'enregistrements ADO renvoie -1, mais comme je n'utilise pas assez souvent ADO pour stocker ces choses dans mon cerveau, je ne me souviens pas des circonstances exactes. –
RecordCount renvoie -1 lorsque la propriété n'est pas prise en charge, par ex. soit le fournisseur ne le supporte pas (ce qui n'est pas le cas pour ACE/Jet, bien sûr), soit les paramètres du fournisseur ne le prennent pas en charge, par exemple. vous utilisez un curseur vers l'avant uniquement. Ce que je dis, c'est que naviguer dans l'EOF ne fera jamais changer le RecordCount, que ce soit -1 ou autre. IIRC DAO ne récupère pas toujours toutes les lignes: parfois, vous devez naviguer dans EOF pour obtenir la valeur RecordCount correcte, c'est-à-dire que la valeur RecordCount peut changer. Dans ADO, RecordCount ne change jamais, même lorsqu'il est -1 (ce qui signifie «non pris en charge»). – onedaywhen