Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/06/2011, 13h18   #1
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Par défaut Contrôle et modification automatique de chaîne de caractères pour un champ indépendant (ADO)

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.

Code :
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
Ce qui suit est à mettre dans un module

Code :
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
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/06/2011, 13h24   #2
Membre expérimenté
 
Inscription : juillet 2005
Messages : 555
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juillet 2005
Messages : 555
Points : 578
Points : 578
Par défaut La fainéantise

Bonjour,

Excellente idée !
C'est justement les fainéants qui ont les meilleurs idées,

Je vais piquer cette idée et ajouter :
Maj
Min
première lettre seulement en Maj
etc.

Merci
naphta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 18h19   #3
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Par défaut suite

bonsoir,
j'ai amélioré mon système de vérification des tailles de champs par une fonction, si ça intéresse quelqu'un

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function rectif_longueur_chaine(nom_champ, nom_table, champ_saisi, formulaire_appelant, champ_appelant As String) As String
'contrôle et correction des longueurs de chaînes saisies
Dim longueur_chaine_saisi, longueur_chaine_table As Long
Dim rs_verif_longueur As ADODB.Recordset
Set rs_verif_longueur = New ADODB.Recordset
rs_verif_longueur.CursorLocation = adUseServer
rs_verif_longueur.CacheSize = 1
rs_verif_longueur.Open "SELECT " & nom_champ & " FROM " & nom_table & " ", ma_connexion, adOpenKeyset, adLockReadOnly
longueur_chaine_table = rs_verif_longueur.Fields("" & nom_champ & "").DefinedSize
rs_verif_longueur.Close
Set rs_verif_longueur = Nothing
longueur_chaine_saisi = Len(champ_saisi)
rectif_longueur_chaine = Left(champ_saisi, longueur_chaine_table)
Application.Forms.item("" & formulaire_appelant & "").Controls.item("" & champ_appelant & "").Value = rectif_longueur_chaine
End Function
ensuite sur l'évènement Exit de votre contrôle vous placez le code suivant

Code :
1
2
If Nz(Me.ActiveControl) = Empty Then Exit Sub
Call rectif_longueur_chaine("MON_CHAMP", "MA_TABLE", Me.ActiveControl, Me.Name, Me.ActiveControl.Name)
et le tour est joué, impossible d'avoir un plantage pour un texte trop long.
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h48.


 
 
 
 
Partenaires

Hébergement Web