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ù?

Était-ce utile?

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 ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top