2009-06-17 4 views
3

J'ai un TClientDataSet avec plusieurs champs et je reçois cette exception, je suis sûr que j'ai oublié de définir une valeur de champ, mais la question est, quel champ?Tout moyen de savoir quel TField déclenche EDBClient avec le message 'Valeur de champ requise'?

Y at-il un moyen de savoir rapidement quel champ déclenche cette exception?

EDIT

Je résolu le problème, je connecte TClientDataSet au fournisseur faux, qui avait un champ obligatoire sur le serveur, mais n'a pas eu ce domaine sur le client.

Mais cela n'invalide toujours pas ma question, j'ai perdu beaucoup de temps pour la comprendre, et si j'avais un moyen de savoir quel champ requis côté serveur soulevait cette erreur, il serait très rapide de réaliser ce que était mon erreur.

EDIT 2

connexes: QCs

#5557 - comme Solved "Comme conçu".

#54380 - Ouvrir

Répondre

4

Lorsque le débogueur vous avertit de l'exception, regardez la pile d'appels. Accédez à la routine qui itère sur la liste des champs et inspectez la variable loop-control à ce moment-là pour déterminer la distance parcourue par la liste des champs de votre programme avant de déclencher une exception.

Si la variable de contrôle de boucle n'est pas précise, définissez un point d'arrêt dans cette routine et réexécutez votre programme. Passez à travers jusqu'à ce que vous obteniez à nouveau l'exception.

Une autre option est de regarder tous les champs et de voir par vous-même lequel n'a pas de valeur.

+1

Le problème est que je ne peux pas le déboguer, il est soulevé par et stdcall sur InternalPost de TClientDataSet, il passe la validation de la méthode InternalPost de TDataSet. –

+0

Alors, dites-vous que vous ne pouvez pas reproduire le problème sur votre propre ordinateur? Si le problème se produit sur votre ordinateur, vous pouvez le déboguer. –

+2

Non, ce que je dis est: il est élevé dans la ligne 2861 dans DBClient.pas, qui a ce code: Check (FDSCursor.InsertRecord (ActiveBuffer)); la fonction InsertRecord est: function InsertRecord ({Insérer un nouvel enregistrement} pRecBuf: Pointer ): DBResult; stdcall; Et si je ne me trompe pas, est de midas, alors, comment puis-je le déboguer? –

Questions connexes