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

Contribuez Discussion :

Contrôle et modification automatique de chaîne de caractères pour un champ indépendant (ADO)


Sujet :

Contribuez

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 70
    Points
    70
    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 : 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
    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
    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

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    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

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 70
    Points
    70
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. [Batch] Modification d'une chaîne de caractères dans un txt zippé
    Par Ristoune dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/03/2014, 19h07
  2. sql récupérer une chaîne de caractères dans un champ
    Par ritchie23 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/05/2009, 12h12
  3. [MySQL] Remplacer une chaîne de caractères d'un champ
    Par hisy dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/03/2007, 13h14
  4. Problème de chaîne de caractères pour popup
    Par roxxxy dans le forum Langage
    Réponses: 6
    Dernier message: 19/03/2007, 18h18

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