Conflit de code dans même application (vb)
raro
Messages postés
146
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Salut à tous !
j'espère bien me faire comprendre....
je suis en train de faire une application (genre visdata) me permettant de rentrer des données dans une base access qui doit permettre d'ajouter,modifier,et supprimer des données .
du fait de certaines regles de gestion (saisie obligatoire, format date etc) je me retrouve en conflit car lorsque je veux modifier le programme reprend les règles de gestion d'ajouter et je suis donc obliger de modifier toutes les zones textes là ou je ne veux en modifier qu'une seule
voici mon code:
commande ajouter click + regles de gestion vérifiées en quittant le focus
code de modifier
j'espère avoir une réponse en tout cas merci d'avance
j'espère bien me faire comprendre....
je suis en train de faire une application (genre visdata) me permettant de rentrer des données dans une base access qui doit permettre d'ajouter,modifier,et supprimer des données .
du fait de certaines regles de gestion (saisie obligatoire, format date etc) je me retrouve en conflit car lorsque je veux modifier le programme reprend les règles de gestion d'ajouter et je suis donc obliger de modifier toutes les zones textes là ou je ne veux en modifier qu'une seule
voici mon code:
commande ajouter click + regles de gestion vérifiées en quittant le focus
Private Sub cmd_ajouter_Click() 'se référer aux commentaires sub p_afficher_frame2 p_afficher_frame2 'text_licence prend le focus text_licence.SetFocus 'remettre les zones textes à blanc p_blanc text_nom.Visible = False text_prenom.Visible = False text_datnais.Visible = False text_sexe.Visible = False 'créer un nouvel enregistrement rs.AddNew If rs.EOF Then rs.MoveLast End Sub Sub p_test_entree() Const Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÜÄËÏÉÈÀÙabcdefghijklmnopqrstuvwxyzùéèàäëï-" 'verification du type de caractères saisi: alpha obligatoire 'déclaration et initialisation du pointeur a Dim h As Integer Dim Dum As String Dim Rep As Long Dum = "Caractère" h = 0 'pointer a sur toute la longueur de la saisie à partir du premier caractère For h = 1 To Len(Dum) 'si un ou plusieurs caractères saisis sont différents de A à Z alors Rep = InStr(1, Alphabet, UCase(Trim(Mid(Dum, h, 1))), vbTextCompare) If (Rep = 0) Then 'message MsgBox "la saisie ne peut comporter que des lettres" 'remise à blanc et reprise du focus par text_prenom Dum = "" 'sortir Exit Sub 'fin de if End If 'fin de la boucle a Next h End Sub Sub text_licence_lostfocus() If Screen.ActiveControl.Name = "cmd_annuler" Then Exit Sub If Screen.ActiveControl.Name = "cmd_fermer" Then Exit Sub 'verification du type de caractères saisi: numérique obligatoire 'déclaration et initialisation du pointeur i Dim i As Integer 'pointer i sur toute la longueur de la saisie à partir du premier caractère For i = 1 To Len(text_licence.Text) 'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors If UCase(Trim(Mid(text_licence.Text, i, 1))) Like "[!0-9]" Then 'message MsgBox "la saisie ne peut comporter que des chiffres" 'remise à blanc de text_licence text_licence.Text = "" 'repositionner le focus sur text_licence text_licence.SetFocus 'sortir de la boucle for Exit Sub 'fin de if End If 'fin de for Next i 'si la zone texte de text_licence ne contient pas 15 caractère alors If Len(text_licence) <> 15 Then 'message MsgBox "la saisie de 15 caractères numérique est obligatoire" 'remise à blanc de la zone texte et reprise du focus text_licence.Text = "" text_licence.SetFocus 'sortir du if Exit Sub 'fin de if End If 'le texte nom devient visible et prend le focus text_nom.Visible = True text_nom.SetFocus End Sub Sub text_nom_lostfocus() 'texte_nom en majuscules text_nom.Text = UCase(text_nom.Text) 'verification du type de caractères saisi: alpha obligatoire p_test_entree 'text_prenom devient visible et prend le focus text_prenom.Visible = True text_prenom.SetFocus End Sub Private Sub text_prenom_LostFocus() 'la premiere lettre du prénom en majuscule les autres en minuscules 'si c'est un prénom composé la première lettre de chaque prénom en maj les autres en min 'déclaration et initialisation du pointeur m Dim m As Integer m = 0 'dans la saisie, la première lette à partir de la gauche est en majuscule 'et à partir de la deuxième lettre en minuscule text_prenom = UCase(Left(text_prenom, 1)) & LCase(Mid(text_prenom, 2)) 'si le pointeur repère un blanc " " un point "." ou un tiret "-" If InStr(text_prenom, " ") > 0 Or InStr(text_prenom, "-") > 0 Or InStr(text_prenom, ".") > 0 Then 'le pointeur repère ou commence blanc,point ou tiret + le premier caractère alpha suivant For m = 2 To Len(text_prenom) 'sélectionner le tiret le blanc ou le point Select Case Mid(text_prenom, m, 1) 'dans le cas ou il s'agit d'un tiret d'un point ou d'un blanc Case " ", "-", "." 'afficher le second prénom précédé d'un blanc avec le prochain caractère en majuscule et à partir du second en min text_prenom = Trim(Left(text_prenom, m - 1)) & " " & UCase(Mid(text_prenom, m + 1, 1)) & Mid(text_prenom, m + 2) 'fin de select End Select 'fin de la boucle m Next m 'fin de if End If 'verification du type de caractères saisi: alpha obligatoire p_test_entree text_datnais.Visible = True text_datnais.SetFocus End Sub Private Sub text_datnais_LostFocus() 'saisir la date selon un format imposé 'si la saisie de la date n'est pas du format jj/mm/aa alors If (text_datnais Like "##/##/####") = False Then 'message MsgBox "Format valide = JJ/MM/AAAA " 'remise à blanc et reprise de focus par text_datnais text_datnais = "" text_datnais.SetFocus 'sortir Exit Sub 'fin de if End If 'text_sexe visible et prise de focus text_sexe.Visible = True text_sexe.SetFocus End Sub Private Sub text_sexe_LostFocus() 'verification du type de caractères saisi: alpha obligatoire 'déclaration et initialisation du pointeur e Dim e As Integer e = 0 'pointer e sur toute la longueur de la saisie à partir du premier caractère For e = 1 To Len(text_sexe.Text) 'si un ou plusieurs caractères saisis sont différents de A à Z alors If UCase(Trim(Mid(text_sexe.Text, e, 1))) Like "[!A-Z]" Then 'message MsgBox "la saisie ne peut comporter que des lettres" 'remise à blanc et reprise du focus de text_sexe text_sexe.Text = "" text_sexe.SetFocus 'sortir Exit Sub 'fin de if End If 'fin de la boucle for Next e 'si la longueur de la saisie est différente d'un caractère alors 'If Len(text_sexe) <> 1 Then If (text_sexe.Text) = "F" Then If (text_sexe.Text) = "M" Then Else MsgBox "saisie incorrecte : M ou F" Exit Sub End If End If 'afficher le caractère en majuscule text_sexe = UCase(text_sexe.Text) End Sub
code de modifier
Private Sub cmd_modifier_Click() rs.Edit p_transfere_donnees_disque rs.Update 'afficher la frame 2 Frame2.Visible = True 'toutes les zones textes sont invisibles sauf text_licence text_nom.Visible = True text_prenom.Visible = True text_datnais.Visible = True text_sexe.Visible = True p_synchro_ecran End Sub
j'espère avoir une réponse en tout cas merci d'avance
A voir également:
- Ortohraphe
- Code ascii - Guide
- Desinstaller application windows - Guide
- Code de déverrouillage oublié - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
3 réponses
Salut,
Je ne comprends pas bien la question ???
Note : Dans ton code, je vois la partie que tu as soulevé dans un autre message, et je vois que tu as conservé la variable [Dum] qui remplace ta variable [text_prenom.Text].
De plus, la constante Alphabet ne necessite pas que tu y ajoute
les minuscules puisque UCase(Trim(Mid(Dum, h, 1))) effectue le test sur la valeur majuscule du caractère.
Pour ce qui est de du mode [Modifier] versus le mode [Ajout], je ne saisie pas bien!!!
Lupin
Je ne comprends pas bien la question ???
Note : Dans ton code, je vois la partie que tu as soulevé dans un autre message, et je vois que tu as conservé la variable [Dum] qui remplace ta variable [text_prenom.Text].
De plus, la constante Alphabet ne necessite pas que tu y ajoute
les minuscules puisque UCase(Trim(Mid(Dum, h, 1))) effectue le test sur la valeur majuscule du caractère.
Pour ce qui est de du mode [Modifier] versus le mode [Ajout], je ne saisie pas bien!!!
Lupin
Salut,
J'ai tester le code que tu as fourni, et je comprends mieux le problème, le système doit gérer un état distinct entre une modification et un ajout. Or sur la perte de [focus], le systeme recommence toute les validations.
Je recommande de te faire un algorithme du genre d'une séquence qui te donneras toujours l'état du système. La validation d'un champs donné doit être unique au champs en ajout comme en modification, ce n'est que lors de l'écriture qu'il est important de valider tous les champs avant l'opération.
Suis assez clair, la perte du focus d'un champs ne doit valider que le champs en question. Une fonction spécifique qui produit l'écriture des données se chargeras de faire toutes les validations des champs en cause.
Les champs [text box] possède une propriété [Tag] que tu peux utiliser a souhait. Lorsque la routine de ferte de focus d'un champs valide celui-ci tu peux donner la valeur [True] au champs [Tag], et la routine d'écriture valide tous les champs [Tag] nécessaires !
Autre observation, j'ai remodeler cette partie qui suit !
Peux-tu comprendre le changement (pas de [Exit])
'Sub text_Licence2_lostfocus()
'
' 'verification du type de caractères saisi: numérique obligatoire
' 'déclaration et initialisation du pointeur i
' Dim I As Integer
'
' If ((Screen.ActiveControl.Name <> "cmd_annuler") And (Screen.ActiveControl.Name <> "cmd_fermer")) Then
' 'pointer i sur toute la longueur de la saisie à partir du premier caractère
' 'si la zone texte de text_licence ne contient pas 15 caractère alors
' If (Len(Text_Licence) = 15) Then
' For I = 1 To 15
' 'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors
' If UCase(Trim(Mid(Text_Licence.Text, I, 1))) Like "[!0-9]" Then
' MsgBox "la saisie ne peut comporter que des chiffres"
' 'remise à blanc de text_licence
' Text_Licence.Text = ""
' I = (16)
' End If
' Next I
' Else
' MsgBox "la saisie de 15 caractères numérique est obligatoire"
' 'remise à blanc de la zone texte et reprise du focus
' Text_Licence.Text = ""
' End If
' End If
'
'End Sub'
Lupin
J'ai tester le code que tu as fourni, et je comprends mieux le problème, le système doit gérer un état distinct entre une modification et un ajout. Or sur la perte de [focus], le systeme recommence toute les validations.
Je recommande de te faire un algorithme du genre d'une séquence qui te donneras toujours l'état du système. La validation d'un champs donné doit être unique au champs en ajout comme en modification, ce n'est que lors de l'écriture qu'il est important de valider tous les champs avant l'opération.
Suis assez clair, la perte du focus d'un champs ne doit valider que le champs en question. Une fonction spécifique qui produit l'écriture des données se chargeras de faire toutes les validations des champs en cause.
Les champs [text box] possède une propriété [Tag] que tu peux utiliser a souhait. Lorsque la routine de ferte de focus d'un champs valide celui-ci tu peux donner la valeur [True] au champs [Tag], et la routine d'écriture valide tous les champs [Tag] nécessaires !
Autre observation, j'ai remodeler cette partie qui suit !
Peux-tu comprendre le changement (pas de [Exit])
'Sub text_Licence2_lostfocus()
'
' 'verification du type de caractères saisi: numérique obligatoire
' 'déclaration et initialisation du pointeur i
' Dim I As Integer
'
' If ((Screen.ActiveControl.Name <> "cmd_annuler") And (Screen.ActiveControl.Name <> "cmd_fermer")) Then
' 'pointer i sur toute la longueur de la saisie à partir du premier caractère
' 'si la zone texte de text_licence ne contient pas 15 caractère alors
' If (Len(Text_Licence) = 15) Then
' For I = 1 To 15
' 'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors
' If UCase(Trim(Mid(Text_Licence.Text, I, 1))) Like "[!0-9]" Then
' MsgBox "la saisie ne peut comporter que des chiffres"
' 'remise à blanc de text_licence
' Text_Licence.Text = ""
' I = (16)
' End If
' Next I
' Else
' MsgBox "la saisie de 15 caractères numérique est obligatoire"
' 'remise à blanc de la zone texte et reprise du focus
' Text_Licence.Text = ""
' End If
' End If
'
'End Sub'
Lupin
aurais-tu un exemple concret concernant "TAG" car je t'avoue que je ne sais pas du tout comment l'utiliser:
est-ce le "tag" dans la fenêtre des propriétés ou une fonction?
je t'avoue que j'aimerai en savoir plus car à vouloir trop cadenasser mon appli avec mes règles de gestion je doit reconnaitre que mes faibles connaissances en vb ne me permettent pas de trouver une solution fiable. A l'heure actuelle mon appli fonctionne parfaitement concernant l'envoi de données sur la base à condition de ne pas faire d'erreurs de saisie, d'autant que rien que le numéro de licence d'un nageur contient 15 caractères et un espace et qu'il me faut cette base à la rentrée (septembre) car je suis en train de créer un site internet(www.toutelanat.org) permettant d'accéder à des résultats de compétitions que la ffn ne publie pas. Actuellement je crée ma base sous access ensuite je l'installerai sur mon site en faisant une migration de base , cette base me servira à donner des stats sur les progressions, les records de la saison etc je fait cela surtout pour les petits (poussin/avenirs, benjamins) car la ffn ne publie que les résultats de niveau régional ou national et donc les petits sont exclus
et ne peuvent pas accéder aux résultats .
voila, je t'ai un peu raconter ma vie mais c'est simplement pour te dire que ce projet me tient à coeur et que j'aimerai être prêt pour le début de la saison prochaine à+ et merci encore
est-ce le "tag" dans la fenêtre des propriétés ou une fonction?
je t'avoue que j'aimerai en savoir plus car à vouloir trop cadenasser mon appli avec mes règles de gestion je doit reconnaitre que mes faibles connaissances en vb ne me permettent pas de trouver une solution fiable. A l'heure actuelle mon appli fonctionne parfaitement concernant l'envoi de données sur la base à condition de ne pas faire d'erreurs de saisie, d'autant que rien que le numéro de licence d'un nageur contient 15 caractères et un espace et qu'il me faut cette base à la rentrée (septembre) car je suis en train de créer un site internet(www.toutelanat.org) permettant d'accéder à des résultats de compétitions que la ffn ne publie pas. Actuellement je crée ma base sous access ensuite je l'installerai sur mon site en faisant une migration de base , cette base me servira à donner des stats sur les progressions, les records de la saison etc je fait cela surtout pour les petits (poussin/avenirs, benjamins) car la ffn ne publie que les résultats de niveau régional ou national et donc les petits sont exclus
et ne peuvent pas accéder aux résultats .
voila, je t'ai un peu raconter ma vie mais c'est simplement pour te dire que ce projet me tient à coeur et que j'aimerai être prêt pour le début de la saison prochaine à+ et merci encore
Re :
VB en accès sur une bd Access.
LA DONNEE
Les champs [textbox] sont flotants, ou attaché sur un objet, ou attacher par programmation ?
Ex.: posons que les champs sont flotants.
LA RELATION
Créer un ensemble des objets [textbox]
(Donner le même noms à tous les objets [textbox], au deuxième VB demande la création d'un ensemble)
Champs(0) = text_nom
Champs(1) = text_prenom
Champs(2) = text_datedenaissance
Champs(3) = text_sexe
Champs(4) = text_licence
LES COMMANDES
Lecture
Création
Modification
Le mode [Création] est en fait le mode [Modification] plus quelques intructions.
(Pointeur de fin égale pointeur de fin + 1, mise à zéro de tous les champs)
LE CONTROLE
Private Sub Champs_LostFocus(Index As Integer)
Select Case (Index)
Case 0: Text_Nom
Case 1: Text_Prenom
Case 2: Text_DatNais
Case 3: Text_Sexe
Case 4: Text_Licence
Case Else: DoEvents
End Select
End Sub
'Fonction a appeller avant écriture
'Avec vrai ou faux en réponse
Function ValideSaisies() As Boolean
Dim Boucle As Integer
ValideSaisies = True
For Boucle = 0 To 4
Call Champs_LostFocue(Boucle)
If (Champs(Boucle).Tag = False) Then
ValideSaisies = False
Boucle = 5
End If
Next Boucle
End Function
'Fonction appeller par [Text_Nom] & [Text_Pronom]
Function Caracteres(Indice As Integer) As Boolean
Const Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÜÄËÏÉÈÀÙ-"
'verification du type de caractères saisi: alpha obligatoire
'déclaration et initialisation du pointeur a
Dim Cmpt As Integer
Dim Rep As Long
'pointer a sur toute la longueur de la saisie à partir du premier caractère
For Cmpt = 1 To Len(Champs(Indice))
'si un ou plusieurs caractères saisis sont différents de A à Z alors
Rep = InStr(1, Alphabet, UCase(Mid(Champs(Indice).Text, Cmpt, 1)), vbTextCompare)
If (Rep = 0) Then
'remise à blanc et reprise du focus par text_prenom
Champs(Indice) = ""
Champs(Indice).Tag = False
Cmpt = (Len(Champs(Indice)) + 1)
Caracteres = False
End If
Next h
Caracteres = True
End Function
'Un exemple type de :
Private Sub Text_Nom()
If (Caracteres(0))then
Champs(1).SetFocus
Else
MsgBox "la saisie ne peut comporter que des lettres"
End If
End Sub
Ca donne a peu de choses près cela :-)
Lupin
VB en accès sur une bd Access.
LA DONNEE
Les champs [textbox] sont flotants, ou attaché sur un objet, ou attacher par programmation ?
Ex.: posons que les champs sont flotants.
LA RELATION
Créer un ensemble des objets [textbox]
(Donner le même noms à tous les objets [textbox], au deuxième VB demande la création d'un ensemble)
Champs(0) = text_nom
Champs(1) = text_prenom
Champs(2) = text_datedenaissance
Champs(3) = text_sexe
Champs(4) = text_licence
LES COMMANDES
Lecture
Création
Modification
Le mode [Création] est en fait le mode [Modification] plus quelques intructions.
(Pointeur de fin égale pointeur de fin + 1, mise à zéro de tous les champs)
LE CONTROLE
Private Sub Champs_LostFocus(Index As Integer)
Select Case (Index)
Case 0: Text_Nom
Case 1: Text_Prenom
Case 2: Text_DatNais
Case 3: Text_Sexe
Case 4: Text_Licence
Case Else: DoEvents
End Select
End Sub
'Fonction a appeller avant écriture
'Avec vrai ou faux en réponse
Function ValideSaisies() As Boolean
Dim Boucle As Integer
ValideSaisies = True
For Boucle = 0 To 4
Call Champs_LostFocue(Boucle)
If (Champs(Boucle).Tag = False) Then
ValideSaisies = False
Boucle = 5
End If
Next Boucle
End Function
'Fonction appeller par [Text_Nom] & [Text_Pronom]
Function Caracteres(Indice As Integer) As Boolean
Const Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÜÄËÏÉÈÀÙ-"
'verification du type de caractères saisi: alpha obligatoire
'déclaration et initialisation du pointeur a
Dim Cmpt As Integer
Dim Rep As Long
'pointer a sur toute la longueur de la saisie à partir du premier caractère
For Cmpt = 1 To Len(Champs(Indice))
'si un ou plusieurs caractères saisis sont différents de A à Z alors
Rep = InStr(1, Alphabet, UCase(Mid(Champs(Indice).Text, Cmpt, 1)), vbTextCompare)
If (Rep = 0) Then
'remise à blanc et reprise du focus par text_prenom
Champs(Indice) = ""
Champs(Indice).Tag = False
Cmpt = (Len(Champs(Indice)) + 1)
Caracteres = False
End If
Next h
Caracteres = True
End Function
'Un exemple type de :
Private Sub Text_Nom()
If (Caracteres(0))then
Champs(1).SetFocus
Else
MsgBox "la saisie ne peut comporter que des lettres"
End If
End Sub
Ca donne a peu de choses près cela :-)
Lupin
en ce qui concerne ajouter vs modifier :
lorsque je clique sur "ajouter" les 5 zones textes sont soumises a des règles de gestion (majuscules, format date , nombre de caractères etc)
le problème c'est que dans" modifier" je ne veux modifier qu'une zone texte, imaginons que j'ai mal saisi le nom,que je l'ai enregistrer dans la base et que je m'apercoive ensuite de mon erreur, je ne veux changer que le nom, or,après avoir changer l'ortohraphe du nom, si je veux valider la msgbox me demande de saisir un prénom et une date de naissance etc je me demande si je n'ai pas interet à faire une frame pour modifier tu comprends mieux là?