« Pas d'enregistrement » après Annuler dans combo_BeforeUpdate
-
29-09-2019 - |
Question
Je suis en train d'éviter des références circulaires (ou même en cascade) dans mes données, et il semble que ça ne travaille une partie du temps.
Dans Access 2007, je le tableau suivant:
create table mfr (
mfr_id Autonumber,
mfr_nm Text(255),
mfr_is_alias_for_id Long Integer
)
Je l'importation d'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 la façon dont les données se fait dans Excel est entrée, donc je veux un moyen de capturer orthographes comme « vraiment » même chose. Jusqu'à présent, si bon (je crois ...).
Maintenant, je l'ai construit une forme hors de ce tableau. J'ai un ComboBox pour l'alias - encore une fois, à ce jour, si bon. Cependant, quand j'ajouter ce code à l'événement BeforeUpdate, les choses deviennent « intéressantes » (manipulation omise erreur):
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 suis en feuille de données mon MsgBox est immédiatement suivi par un accès généré erreur « Aucun enregistrement en cours » qui est pas pris par la gestion des erreurs dans la sous AvantMAJ.
Puis-je attraper cette erreur? Où?
La solution
Votre liste déroulante doit filtrer les entrées qui sont des alias. En d'autres termes, ne pas afficher un choix que l'utilisateur ne peut pas faire.
Vous feriez en éliminant simplement dans le menu déroulant des choix où mfr_is_alias_for_id est pas nul.
Je l'ai mis en œuvre ce sous diverses formes et il fonctionne très bien.
Autres conseils
Je me adresse la partie d'erreur « Pas d'enregistrement » de votre question, de si longtemps. Après avoir vérifié Google pour une réponse, j'ai trouvé lien qui a été utile. Cependant, au lieu d'utiliser NZ () pour transformer le champ binaire gênant dans une requête globale, je troublesomefield: IIF([troublesomefield] IS NULL,NULL,[troublesomefield])
et cela a fonctionné pour bannir l'erreur. Donc, ma solution est seulement une petite variation de la réponse originale que j'ai trouvé, mais il contourne l'erreur et laissez-vous garder nulls si vous voulez ...