2009-01-07 8 views
2

Je développe une base de données Access 2003 qui utilise un backend MS SQLServer. J'essaye de faire la validation de forme et éprouve quelques problèmes.Validation de formulaire avec un projet ADP Access 2003

  1. ValidationRule pour chaque domaine semble être ignoré
  2. Je ne peux pas comprendre quel événement je passer outre de faire respecter la validation sans avoir la base de données le faire. (Je ne suis pas contre cela, il est juste inconnu pour moi comment j'attraper des messages d'erreur, au lieu de les afficher à l'utilisateur)

J'ai essayé de se déplacer numéro 2 en prohibant la fermeture et l'application de l'utilisation d'un "bouton de fermeture", mais l'utilisateur peut le faire en appuyant sur la touche tabulation, ou en appuyant sur le bouton "Next Record" en bas.

Toutes les suggestions seraient grandement appréciées.

Répondre

1

Si vous utilisez les règles de validation propriété, vous pouvez prendre la validation et reproduire les erreurs clés, entre autres, en cas d'erreur de formulaire:

Private Sub Form_Error(DataErr As Integer, Response As Integer) 
    If DataErr=2107 Then 
     MsgBox "Validation error! " & ActiveControl.Name 
    End If 
End Sub 

Vous pouvez imposer l'utilisation de votre bouton de fermeture avec un variable définie au niveau du formulaire et définie sur false à moins que votre bouton ne soit cliqué.

Option Compare Database 
Option Explicit 

Public AllowClose As Boolean 

Private Sub Form_Load() 
    AllowClose = False 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    Cancel = Not AllowClose 
End Sub 
Private Sub cmdClose_Click() 
On Error GoTo Err_cmdClose_Click 

    AllowClose = True 
    DoCmd.Close 

Exit_cmdClose_Click: 
    Exit Sub 

Err_cmdClose_Click: 
    MsgBox Err.Description 
    Resume Exit_cmdClose_Click 

End Sub 

De: http://www.tek-tips.com/faqs.cfm?fid=2071

+0

La définition de votre booléen sur False dans l'événement OnLoad est plutôt inutile, car un booléen non initialisé est égal à False. –

+0

Je pense qu'il est généralement accepté comme une bonne pratique pour initialiser toutes les variables indépendamment de toute valeur par défaut connue. C'est l'un des petits lentes que beaucoup de membres de la communauté non-VB aiment choisir. –

+0

Et c'est mon dernier changement :) Je pense que c'est un peu plus facile à comprendre quand AllowClose est défini dans Form_Load. – Fionnuala

1

Si vous nous donnez un exemple d'une de vos règles de validation, cela pourrait vous aider.

Cependant, je suis sous l'habitude de mettre validation avant mise à jour (surtout quand j'ai des algorithmes de validation plus complexes)

Mise à jour: je l'ai fait des essais et il semble que la règle de validation le champ est UNIQUEMENT vérifié lorsque vous effectuez une mise à jour dans le champ, mais pas si vous effectuez une mise à jour ailleurs sur le formulaire, et non lorsque vous enregistrez l'enregistrement. Donc je pense que votre solution est de déplacer la validation vers Form_BeforeUpdate. OU vous pourriez rendre la colonne de la table non nulle - ce qui obligerait les utilisateurs à faire quelque chose avec le champ. OU, si le champ doit être "Test", vous pouvez l'encadrer complètement en définissant une valeur par défaut et en verrouillant le champ afin que l'utilisateur ne puisse pas le modifier.

1

Vous pouvez cacher les boutons de navigation en définissant la propriété Boutons de navigation du formulaire « Non » Vous pouvez également interdire la tabulation à un nouvel enregistrement en définissant la propriété Cycle du formulaire sur "Enregistrement en cours".

Avec n'importe quelle interface d'application non-officielle dans Access, je verrouille habituellement le formulaire assez serré et fournit mes propres boutons de navigation, bouton de fermeture, etc. selon les besoins.