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

VBA Access Discussion :

Variable String limitée à 255 caractères !?


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Variable String limitée à 255 caractères !?
    Bonjour,

    Pour exécuter une requête SQL assez longue (beaucoup de champs), je stocke la commande dans une variable String.

    Mais lorsque je l'exécute, je constate que seuls les 255 premiers caractères sont pris en compte alors que la doc Access indique qu'un String peut contenir environ 2 milliards (2^31) de caractères !!!

    Y'a un truc qui me dépasse... qqn peut-il me dire comment faire ?

    Merci d'avance, à+

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Je ne pense pas que ce soit l'objet string qui te limite mais plutôt l'utilisation de cet objet. Par exemple pour l'ouverture d'un état basé sur un requête cette requête ne peut pas dépasser 3000 caractères ou quelque chose comme ça... Tout dépend de ce pourquoi tu utilises cette chaîne...

    1-Si ta requête est toujours la même tu peux essayé de l'écrire en faisant des saut à la ligne.

    2-Si ta requête est variable peut-être peux tu passer par des tables temporaires pour alléger ta requête.

    3-Mais surtout comment sais-tu que seulement 255 caractères sont utilisés? Ta requête est elle lancée partiellement?

    4-Pourrais tu nous envoyer ta requête et le bout de code VBA où tu l'utilises?

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord merci pour la réponse

    En fait il me semble que ça n'a rien à voir avec la requête SQL !

    En mettant un point d'arrêt sur l'affectation de la variable SQLfield on peut voir dans la fenêtre "variables locales" que la valeur stockée est tronquée et ne comporte que 255 caractères... ce qui provoque une erreur à l'exécutions de la requête.

    Ci-joint le code comme demandé:

    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
     
    '--------------------------------------------------
    Public Sub Rec_Dupl()
    '--------------------------------------------------
     
        Dim dbs As Database
        Dim tbl As Recordset
        Dim SQLfield, SQLstring As String
     
        Set dbs = CurrentDb
     
        '--------------------------------------------
        ' Supprime la table temporaire si existe déjà
        '--------------------------------------------
     
        On Error Resume Next
        dbs.Execute "DROP TABLE tbl_DEMandes_temp"
     
        ' ---------------------------------------------------
        ' Copie de l'enregistrement dans une table temporaire
        ' ---------------------------------------------------
     
        SQLfield = _
            "[DEM_Est_Terminé], [DEM_INFO_Terminé], " + _
            "[DEM_GER_Terminé] , [DEM_Demandé_Le], [DEM_Effectué_Le], " + _
            "[DEM_Texte], [STA_Est_Actif], [STA_Entrée_LE], " + _
            "[STA_Sortie_Le], [PER_Nom], [PER_Prénom], " + _
            "[PER_Initiales], [PER_SERvice], [PER_FONction], " + _
            "[PER_SITe], [PER_No_Bureau], [SEC_POSI_Est_Signé], " + _
            "[SEC_POSI_le], [SEC_AD_Actif], [SEC_AD_Référence], " + _
            "[SEC_Logon], [SEC_X_Service], [SEC_AD_A_Mail_Perso], " + _
            "[SEC_AD_Mail_Perso], [SEC_AD_Mail_Générique], [LOG_BUR_Office2007], " + _
            "[LOG_BUR_Access], [LOG_BUR_Publisher], [LOG_BUR_Visio], " + _
            "[LOG_ACG_Cimetières], [LOG_ACG_Crèches], [LOG_ACG_Ressources], " + _
            "[LOG_ACG_Restos], [LOG_ACG_Sécurité_municipale], " + _
            "[LOG_ACG_Infopop], [LOG_ACG_InfoPop_Accès], [LOG_ACG_InfoStar], " + _
            "[LOG_ACG_Calvin_II], [LOG_ACG_Geeci], [LOG_FIN_Opale_Accès], " + _
            "[LOG_FIN_Opale_Référence], [LOG_FIN_Profil], [LOG_FIN_Compta], " + _
            "[LOG_FIN_Compta_Service], [LOG_FIN_Débiteurs], [LOG_FIN_Débiteurs_Service], " + _
            "[LOG_FIN_Fournisseurs], [LOG_FIN_Engagements], [LOG_FIN_Engagements_Service], " + _
            "[LOG_FIN_Salaires], [LOG_APP_Optimiso], [LOG_APP_FM], " + _
            "[LOG_WEB_Meyrin], [LOG_WEB_Meyrin_Editeur], [LOG_WEB_CMnet], " + _
            "[LOG_WEB_CMnet_Editeur], [LOG_WEB_intranet], [LOG_WEB_intranet_Editeur], " + _
            "[LOG_WEB_Optimiso], [LOG_DIV_Autres], [GER_CLE_Nécessaire], " + _
            "[GER_CLE_Reçue], [GER_CLE_Rendue], [GER_BUR_Corps_Bureau], " + _
            "[GER_BUR_Partage_bureau], [GER_BUR_Etiquette_Porte], [GER_TEL_Existant], " + _
            "[GER_TEL_Fixe], [GER_TEL_No_fixe], [GER_TEL_Mobile]"
     
        SQLstring = _
            "SELECT " + SQLfield + " INTO tbl_DEMandes_temp FROM tbl_DEMandes WHERE N°= " + Str(Form_frm_DEM.N°.Value)
     
        dbs.Execute SQLstring
     
        Set tbl = dbs.OpenRecordset("tbl_DEMandes_temp")
     
        '.... suite
     
    End Sub

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bopnjour,

    Attention !!!
    Tu as mal déclaré ta variable qui dans l'état actuel des choses est de type Variant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SQLfield, SQLstring As String
    Le type String que tu as inscrit est affecté uniquement à SQLstring
    Tu dois préciser le type de chacune des variables lorsque tu déclares en mode lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SQLfield As String, SQLstring As String
    Quand bien même, si SQLstring est vide, cela peut être aussi du à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Str(Form_frm_DEM.N°.Value)
    conjointement lié au fait que tu emploies le signe + pour concaténer alors que tu dois employer le &...

    Corriges déjà tout cela et reviens nous dire que ça marche...

    Argy

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Il me semble que la longueur de SQLfield n'est pas le problème...

    Si tu ajoutes cette ligne juste après le remplissage de SQLfield,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Right(SQLfield, 30)
    tu verras que ta variable est bien remplie comme tu le voulais. Elle apparait tronqué dans la liste des variables locale parce que celle-ci ne montre que les 255 premiers caractères. De même, si tu écris,

    tu ne vois que les 255 premiers caractères affichés...

    Maintenant quel est le message d'erreur?

    Je vois plusieurs sources d'erreur possible :

    1-

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE N°= " + Str(Form_frm_DEM.N°.Value)
    Peut-être comme suit ou alors il faudra rajouter des guillemets ' ' autour de la valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE N°= " + Form_frm_DEM.N°.Value
    2-

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INTO tbl_DEMandes_temp FROM tbl_DEMandes

    Je trouve le INTO ... FROM bizarre... peut-être plutôt :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM tbl_DEMandes_temp, tbl_DEMandes

    Est-ce que ta requête fonctionne lorsque tu écris en sql directement dans l'éditeur de requête d'Access?

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci encore, c'est vraiment super d'avoir l'aide de personnes averties
    Je ne suis qu'un débutant en Access.

    Je vais essayer vos propositions prochainement

    Pour argyronet

    - Pas mal vu le coup de la déclaration de la variable... j'étais persuadé que le type s'appliquait à la liste des variables.

    - Bien vu aussi pour la concaténation: jeux subtil entre "&" et "+"


    Pour B-CAB:

    1 - Les guillemets ne sont pas nécessaires dans ce cas*

    2 - Ça joue comme ça*

    *j'avais fait le test avec une chaîne SQLfields plus courte

Discussions similaires

  1. Contourner la limitation à 255 caractères des string dans VBA
    Par eaglecarbo dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/03/2015, 10h57
  2. [AC-2003] Variable limitée à 255 caractères sur champ MEMO
    Par kiki.gaby dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 05/01/2010, 14h53
  3. Variable string supérieur à 255 caractères !
    Par AgriFlash dans le forum Langage
    Réponses: 14
    Dernier message: 20/05/2008, 21h10
  4. sql et variable string limité à 250 caractères
    Par philoeil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/10/2007, 23h10
  5. Variables string limité à 255 caractères?
    Par krfa1 dans le forum Access
    Réponses: 7
    Dernier message: 27/01/2006, 15h29

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