2010-11-05 3 views
1

J'essaie d'empêcher les références circulaires (ou même en cascade) dans mes données, et il semble que cela ne fonctionne que partiellement."Aucun enregistrement en cours" après Annuler dans combo_BeforeUpdate

Dans Access 2007, j'ai le tableau suivant:

create table mfr (
    mfr_id     Autonumber, 
    mfr_nm     Text(255), 
    mfr_is_alias_for_id Long Integer 
) 

J'importer un tas de données à partir d'Excel, et l'mfr_nm est l'une des colonnes de la feuille de calcul. Je ne peux pas contrôler comment les données sont saisies dans Excel, donc je veux un moyen de capturer des orthographes alternatives comme étant «vraiment» la même chose. Jusqu'ici, tout va bien (je pense ...).

Maintenant, j'ai construit un formulaire hors de cette table. J'ai un ComboBox pour l'alias - encore une fois, si loin, si bon. Cependant, quand j'ajouter ce code à l'événement BeforeUpdate, les choses deviennent « intéressantes » (gestion des erreurs omise):

If Not IsNull(cboMfrAlias) Then 
    If Not IsNull(DLookup("mfr_is_alias_for_id", "mfr", "mfr_id=" & cboMfrAlias)) Then 
     MsgBox """Alias for"" must not also be an alias.", vbExclamation 
     Cancel = True 
    End If 
End If 

Cela fonctionne exactement comme je l'attends quand la forme est dans la vue de forme, mais si je m dans Datasheet View my MsgBox est immédiatement suivi d'une erreur «No current record» générée par Access et non détectée par la gestion des erreurs dans le sous-élément BeforeUpdate.

Puis-je attraper cette erreur? Où?

+0

Je pense que vous devez avoir quelque chose d'autre aussi, parce que ceci travaille pour moi sur un formulaire de test. – Fionnuala

Répondre

2

Votre liste déroulante doit filtrer les entrées qui sont des alias. En d'autres termes, n'affichez pas un choix que l'utilisateur ne peut pas faire.

Pour ce faire, il suffit d'éliminer de la liste déroulante les choix où mfr_is_alias_for_id n'est pas Null.

Je l'ai implémenté sous diverses formes et cela fonctionne très bien.

+0

Duh. Si je pensais bien, je l'aurais fait en premier et je n'aurais pas rencontré le problème. Je suis toujours (désœuvré) curieux de la réponse à la question posée ... – RolandTumble

0

J'aborde la partie «Aucune erreur actuelle» de votre question, il y a si longtemps. Après avoir vérifié google pour une réponse, j'ai trouvé ce link qui a été utile. Cependant, au lieu d'utiliser NZ() pour transformer le champ binaire gênant dans une requête agrégée, j'ai utilisé troublesomefield: IIF([troublesomefield] IS NULL,NULL,[troublesomefield]) et cela a fonctionné pour bannir l'erreur. Donc, ma solution est seulement une petite variation sur la réponse originale que j'ai trouvée, mais elle contourne l'erreur et vous permet de garder des zéros si vous voulez ...

Questions connexes