Lors de la création d'un formulaire avec des champs indépendant (ADO), si le nombre de caractères contenus dans un champ est plus long que la valeur définie dans la table cela provoque une erreur à l'update de la table.
Un peu par fainéantise personnelle je ne voulais pas passer par la propriété "Valide si" et renseigner à chaque fois le nom du contrôle avec un truc du style "NbCar([NomControle])<=50".
L'idée initiale était surtout de m'économiser du temps et de n'avoir que très peu de de critères à changer à chaque fois que j'utiliserai ce qui suit. En l'occurence, je n'ai qu'à changer le nom du champ de la table et le nom de la table elle-même.
Ce qui suit est à mettre dans un module
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 Private Sub txt_MonControle_AfterUpdate() '************************************************************************************************** 'récupération de la valeur du champ champ_saisi = Me.ActiveControl Dim rs_verif_longueur As ADODB.Recordset Set rs_verif_longueur = New ADODB.Recordset rs_verif_longueur.CursorLocation = adUseServer 'limitation du nombre d'enregistrement car le but est de récupérer la taille du champ With rs_verif_longueur .CacheSize = 1 End With rs_verif_longueur.Open "SELECT MonChamp FROM MaTable", MaConnexionSql, adLockReadOnly 'récupération de la taille maximum du champ longueur_chaine_table = rs_verif_longueur.Fields("MonChamp").DefinedSize rs_verif_longueur.Close Set rs_verif_longueur = Nothing Call verification_longueur_chaine Me.ActiveControl = champ_rectifie 'message de notification à l'utilisateur. On pourrait le remplacer par une acceptation (vbYesNo) If champ_saisi <> champ_rectifie Then MsgBox "Le texte que vous venez de saisir était trop long et a été rectifié de la manière suivante " & vbCrLf & champ_rectifie, vbOKOnly + vbDefaultButton1 + vbInformation, "chaîne de caractères trop longue" End If '************************************************************************************************** End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Option Compare Database Option Explicit Public champ_saisi, champ_rectifie As String Public longueur_chaine_saisi, longueur_chaine_table As Long Public Function verification_longueur_chaine() 'récupération de la longueur de la chaîne de caractères longueur_chaine_saisi = Len(champ_saisi) 'tronquage si besoin est de la chaîne de caractères champ_rectifie = Left(champ_saisi, longueur_chaine_table) End Function
Partager