2010-11-11 5 views
0

Tenir compte du code vb.net suivant pour un bureau add-in (pour l'accès):Comment détecter une propriété de type "InvalidOperationException" dans une collection?

td = db.TableDefs(objectName) 
For Each fld In td.Fields 
    For Each fldprp In fld.Properties 

     Debug.Print(fldprp.Value.ToString()) 

    Next 
Next 

la variable "db" est une représentation .net du résultat vba d'accès retour de « Application.CurrentDB() ". "td" est de type "DAO.TableDefClass".

Ce code lève une exception de type "InvalidOperationException" lorsque la valeur de la propriété fldprp.value ne peut pas être déterminée (dans Visual Studio, elle affiche la valeur {{Opération invalide.}} Dans la fenêtre de surveillance). fldprp.name, cependant, est disponible.

Il existe seulement quelques propriétés sur lesquelles cela se produit. J'aimerais pouvoir parcourir tous les fichiers fld.properties et afficher les valeurs, mais UNIQUEMENT si ce n'est pas une exception.

Je suis assez sûr pourquoi cela se produit (certaines propriétés ne sont pas disponibles dans ce contexte). Ce que j'ai besoin de savoir, c'est comment détecter cela à l'exécution afin que je puisse sauter la propriété.

Je n'arrive pas à trouver une solution qui fonctionne. De l'aide serait grandement appréciée.

+0

J'ai pu contourner ce problème en utilisant un bloc try ... catch avec un bloc de capture vide, mais y a-t-il une meilleure façon de le faire? – rageingnonsense

Répondre

0

A l'intérieur du corps de la boucle intérieure, mettre ce en haut:

If TypeOf fldprp Is InvalidOperationException Then Continue 

http://msdn.microsoft.com/en-us/library/0ec5kw18%28VS.80%29.aspx

Je ne connais pas votre situation particulière, mais ce que je suggère utilise un filtre explicite pour les types d'objet que vous veulent à inclure au lieu de filtrer sur ceux que vous ne voulez pas inclure.

Questions connexes