IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

vérifications avec if


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut vérifications avec if
    Bonjour à tous,

    Une partie de mon programme consiste à vérifier la valeur de plusieurs TextBox et d'une chaine, par l'intermédiaire de sous-chaines.

    Si l'une des sous-chaine ne correpond pas à la valeur qu'on attends, un message derreur s'affiche dans un RichTextBox. Voici la code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(((TBNom.Text.Length < 8) || (TBNom.Text.Length >8) || (TBNom.Text.Length ==0))&&
    					( (TBNom.Text.Substring(0,3)!= "LAN") || (TBNom.Text.Substring(0,3) != "MAC") || (TBNom.Text.Substring(0,3)!=" HP") || (TBNom.Text.Substring(0,3) != "FJE") )||
    					( (Convert.ToChar(TBNom.Text.Substring(3,1))!='W') || (Convert.ToChar(TBNom.Text.Substring(3,1)) != 'L')||
    					(Convert.ToChar(TBNom.Text.Substring(3,1))!= 'S'))||( ( Convert.ToInt16(TBNom.Text.Substring(4,4))>9999) || 
    					(Convert.ToInt16(TBNom.Text.Substring(4,4))==0000) )||( (TBNom.Text.Length == 0) || (TBSN.Text.Length ==0) ||
    					(TBDE.Text.Length==0) || (TBCde.Text.Length==0)))
    				{
    					Form1.RTBlog.Text="Attention, erreur(s) sur le nom, Veuillez corriger!\n\nNote à l'utilisateur:\nSI vous voulez enregistrer un matériel en HP"+
    						", veillez à saisir un espace avant le HP comme, par exemple: '   HPL0001'";
    					this.Close();
    				}
    Seulement, il semblerais que même si les valeur de toutes les sous-chaine, et de toutes les TextBox sont bonnes, l'execution s'arrete à "this.close".
    La suite consiste bien sur à enregistrer les modifications apportées à une ou plusieurs des textBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    else
    				{
    					//Connexion à la base de données:
    					Cnx2.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
    					SqlCommand cmd;
    					string req;
     
     
    					//REQUÊTE PARAMETREE POUR LA MISE A JOUR:
    					try
    					{
    						Cnx2.Open();
     
    						req = "UPDATE MATERIELS SET Nom=@nom,SN=@sn,Type=@type,Modele=@modele,Site=@site"+
    							",Service=@service,Date_Entree=@dateE,Date_Sortie=@dateS"+
    							",Fin_Leasing=@fleas,IP=@ip,MAC=@mac,Num_Cde=@cde,Num_Immo"+
    							"=@nimmo,Num_Contrat=@con,Date_Inventaire=@inv,Commentaires=@comm "+
    							"WHERE ID="+Form1.dataGrid1[Form1.dataGrid1.CurrentCell.RowNumber,0];
     
    						cmd = new SqlCommand(req,Cnx2);
     
    //ETC,ETC...
    En espérant que vous ayez compris mon problème, je vous remercie sincèrement de votre aide.

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par Dadoue Voir le message
    Seulement, il semblerais que même si les valeur de toutes les sous-chaine, et de toutes les TextBox sont bonnes, l'execution s'arrete à "this.close".
    Salut.

    Ça sous entend que ta condition est toujours vérifiée... En d'autres termes, tu rentres toujours dans ton if, et, à mon avis, ce n'est pas surprenant vu la longueur et la complexité de celui-ci. Je n'ai qu'un conseil à te donner : utilise une Regex (même plusieurs dans ton cas) plutôt qu'un if de ce genre, ce sera plus lisible, plus facilement maintenable, etc.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    Arf, mais c'est quoi ce if ?!
    Déjà tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(((TBNom.Text.Length < 8) || (TBNom.Text.Length >8)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( TBNom.Text.Length != 8)
    puisque tu ne veux qu'une taille différente de 8.

    Sinon, ton if est beaucoup trop long.. tu devrais en faire plusieurs pour indenter, tu y verrai plus clair et en debuggant tu verrai où se trouve le problème.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    Merci d'être aussi rapide.

    Voici à présent ce que donne mon code une fois modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    			try//TESTS POUR VERIFICATION DU NOM ET REMPLISSAGE DES TEXTBOX OBLIGATOIRES:
    			{				
    				if(TBNom.Text.Length != 8)//La longeur du nom ne doit pas être < ou >8 OU =0
    				{
    					Form1.RTBlog.Text="Le nombre de caractères du nom du matériel doit être égal à 8!";
    				}
    				else
    				{
    					if( (TBNom.Text.Substring(0,3)!= "LAN") && (TBNom.Text.Substring(0,3) != "MAC") && (TBNom.Text.Substring(0,3)!=" HP") && (TBNom.Text.Substring(0,3) != "FJE") )
    					{
    						Form1.RTBlog.Text="Le nom n'est pas correct!";
     
    					}
    					if( (Convert.ToChar(TBNom.Text.Substring(3,1))!='W') && (Convert.ToChar(TBNom.Text.Substring(3,1)) != 'L') && (Convert.ToChar(TBNom.Text.Substring(3,1)) != 'S'))
    					{
    						Form1.RTBlog.Text="Le type de matériel n'est pas correct!";
     
    					}
    					if( ( Convert.ToInt16(TBNom.Text.Substring(4,4))>9999) || (Convert.ToInt16(TBNom.Text.Substring(4,4))==0000) )
    					{
    						Form1.RTBlog.Text="Le numéro du matériel doit être compris entre 0001 et 9999!";
     
    					}
    					if( (TBNom.Text.Length == 0) || (TBSN.Text.Length ==0) || (TBDE.Text.Length==0) || (TBCde.Text.Length==0))
    					{
    						Form1.RTBlog.Text="Veillez à remplir tous les champ obligatoires(Nom,SN,Date Entrée et N°Commande)";
     
    					}
    				}
    			}
    			catch
    			{
    				Form1.RTBlog.Text="Attention, erreur(s) sur le nom, Veuillez corriger!\n\nNote à l'utilisateur:\nSI vous voulez enregistrer un matériel en HP"+
    					", veillez à saisir un espace avant le HP comme, par exemple: '   HPL0001'";
    			}
     
     
    					//Connexion à la base de données:
    					Cnx2.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
    					SqlCommand cmd;
    					string req;
     
     
    					//REQUÊTE PARAMETREE POUR LA MISE A JOUR:
    					try
    					{
    						Cnx2.Open();
     
    						req = "UPDATE MATERIELS SET Nom=@nom,SN=@sn,Type=@type,Modele=@modele,Site=@site"+
    							",Service=@service,Date_Entree=@dateE,Date_Sortie=@dateS"+
    							",Fin_Leasing=@fleas,IP=@ip,MAC=@mac,Num_Cde=@cde,Num_Immo"+
    							"=@nimmo,Num_Contrat=@con,Date_Inventaire=@inv,Commentaires=@comm "+
    							"WHERE ID="+Form1.dataGrid1[Form1.dataGrid1.CurrentCell.RowNumber,0];
     
    						cmd = new SqlCommand(req,Cnx2);
     
    //ETC,ETC...
    Maintenant, il ne fais plus aucune vérification, enfin, il ne m'affic he plus les message d'erreurs qui sont sencé apparaitre dans la RTBlog, et enregistre directement, même s'il y a une faute dans la saisie...
    Forcément, puisque l'on passe directement à la requête de mise à jour après les vérifications... Et je ne vois pas comment je pourrais faire pour éviter l'enregistrement si il y a une erreur...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    Pose un breakpoint sur ton 1er if, et execute pas-à-pas tu verra où est ton problème.

    Sinon, tu peux créer un évènement sur tes textbox lorsqu'ils perdent le focus, tu contrôle ainsi immédiatement le champ. Ca t'évite de tout devoir vérifier d'un coup et de t'y perdre comme là. En vérifiant après chaque champ rentré, ton code sera plus clair / maintenable.

    +1 pou les regexp au lieu des contains et substring..

    edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( (TBNom.Text.Substring(0,3)!= "LAN") && (TBNom.Text.Substring(0,3) != "MAC") && (TBNom.Text.Substring(0,3)!=" HP") && (TBNom.Text.Substring(0,3) != "FJE") )
    Si j'ai bien compris tu veux que l'utilisateur choisisse entre LAN, MAC, HP ou FJE. Dans ce cas ne laisse pas le choix de rentrer autre chose mais utilise une combobox par exemple ! Ca te fera déjà un IF en moins..
    Meme chose pour tes autre IF qui controle des textbox qui pourrait etre des combobox

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    A priori dans tes boucles tu ne bloques pas l'execution du programme quand tu rencontres une erreur.

    Vu que tu utilses un try catch lorsque tu rencontres une erreur fait un
    throw new error ("...");

Discussions similaires

  1. [MySQL] Vérification avec get_magic_quotes_gpc
    Par BRUNO71 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 03/04/2010, 08h46
  2. vérification avec un formulaire
    Par patheo2 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 21/12/2009, 19h49
  3. Méthode de vérification avec le Onsubmit
    Par L'aigle de Carthage dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/04/2008, 21h28
  4. Vérification avec empty
    Par carelha dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 03/01/2007, 09h52
  5. vérification avec CHECK possible à partir de quelle version?
    Par trotters213 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/10/2006, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo