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

Access Discussion :

"Champ trop petit pour quantité de données"


Sujet :

Access

  1. #1
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut "Champ trop petit pour quantité de données"
    Bonjour à tous,
    J'essaie de lancer une requête via du code VBA pour compter les enregistrements sélectionnés par une requête.
    Pour celà, je lance la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblStatResultats.Caption = DCount("*", SQLfrom, SQLwhere) 
    J'ai le message d'erreur suivant:
    Erreur d'exécution '3163':
    Le champ est trop petit pour accepter la quantité de données que vous voulez ajouter. Essayez d'insérer ou de coller moins de données.
    Ma clause SQLfrom est un peu longue du fait que j'ai 7 tables à gérer. Est-ce que ça pourrai-être ça?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 139
    Points : 113
    Points
    113
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DCount("*", SQLfrom, SQLwhere)
    C'est censé te renvoyer un nombre ca non ? Dans ce cas le champ est forcément pas trop petit ...bizarre...

  3. #3
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Déjà tu peux essayer de dissocier ton code comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim n as long
    n = DCount("*", SQLfrom, SQLwhere)
    Me.lblStatResultats.Caption = n
    pour voir laquelle des deux lignes provoque l'erreur: ça sera déjà un indice.

    Si tu sais qu'un des champs de ta requête ne contient aucun Null, tu devrais essayer de mettre son nom à la place de "*".

  4. #4
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    pafi76 => oui, c'est sensé me donner un nombre

    Meduse => c'est bien la partie DCount("*", SQLfrom, SQLwhere) qui bloque, même en remplaçant "*" par un champ ne pouvant pas contenir de vide (ID)

  5. #5
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    Ne me laissez pas tomber les coupins...

  6. #6
    Membre actif Avatar de ActionAccess
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 213
    Points
    213
    Par défaut
    Bonjour,

    Que vaut SQLfrom et SQLwhere?
    ActionAccess

  7. #7
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    SQLfrom:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQLfrom = SQLfrom & "FROM ((DOSSIER_PARCELLE DPA INNER JOIN "
            SQLfrom = SQLfrom & "((DOSSIER D INNER JOIN PARAM_TYPE_DEMANDE PTD ON D.id_type_demande = PTD.id_type_demande) "
            SQLfrom = SQLfrom & "INNER JOIN PERSONNES P ON D.id_personne = P.id_personne) "
            SQLfrom = SQLfrom & " ON DPA.id_dossier = D.id_dossier)"
            SQLfrom = SQLfrom & " INNER JOIN PARCELLES PA ON DPA.id_parcelle = PA.id_parcelle) "
            SQLfrom = SQLfrom & " INNER JOIN LIEUDIT L ON PA.id_lieudit = L.id_lieudit "
    SQLwhere composé selon ma requête multicritère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        SQLwhere = "WHERE D.id_dossier <> 0 "
        ' si la personne est précisée
        If Me.chkDemandeur Then
            If Me.chkPNom And Me.cmbNom <> "" Then
                SQLwhere = SQLwhere & " AND (((P.nom_personne) = '" & Me.cmbNom.Value & "')) "
            End If
        End If
        'Si numéro de dossier précisé:
    ........
        End If
    Je sais que la clause SQLfrom peut paraître longue mais j'ai 8 tables à gérer...

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    J'ai piqué cela dans l'aide de Access, ce sont les param de DCount :

    Expr Chaîne requise. Expression qui identifie le champ dont vous voulez compter les enregistrements. Il peut s'agir d'une expression chaîne identifiant un champ dans une table ou une requête, ou d'une expression qui effectue un calcul sur les données de ce champ. Dans expr, vous pouvez inclure le nom d'un champ de table, un contrôle de formulaire, une constante ou une fonction. Si expr inclut une fonction, elle peut être intrinsèque ou définie par l'utilisateur, mais ne peut pas être une autre fonction de regroupement Domaine ou SQL.

    Domaine Chaîne requise. Expression de chaîne identifiant les enregistrements qui constituent le domaine. Il peut s'agir d'un nom de table ou d'un nom de requête.

    Critère .Variant facultatif. Expression chaîne facultative servant à limiter la plage des données sur laquelle porte la fonction DCount. Par exemple, critère est souvent équivalent à la clause WHERE d'une expression SQL sans le mot WHERE. En cas d'omission de critère, la fonction DCount évalue expr par rapport à l'intégralité du domaine. Chaque champ compris dans critère doit l'être aussi dans domaine, sans quoi la fonction DCount renvoie la valeur Null.


    Il se peut trés bien que tu sature le paramêtre Domaine (Les noms de table ou de query sont limité à 60 car environ. Et je soupsone que Domaine est limité à 255 car.

    Essaye de mettre ton SQLFrom dans une requète et d'appeler cette requète.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par marot_r
    Il se peut trés bien que tu sature le paramêtre Domaine (Les noms de table ou de query sont limité à 60 car environ. Et je soupsone que Domaine est limité à 255 car.
    Comme tu l'as rapporté, le paramètre Domaine ne doit contenir qu'UN SEUL NOM DE TABLE OU DE REQUÊTE STOCKÉE, et surtout pas des jointures sur plusieurs tables !

    Citation Envoyé par marot_r
    Essaye de mettre ton SQLFrom dans une requète et d'appeler cette requète.
    Pas d'autre choix: il faut abandonner DCount (qui ne convient pas du tout) et créer une véritable requête SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) 
    FROM ......
    WHERE ...

  10. #10
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    Finalement, c'est pas plus mal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT count(*) " & SQLfrom & SQLWHERE
    Pourquoi faire simple quand on peut faire encore plus simple??


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/07/2012, 10h19
  2. Réponses: 1
    Dernier message: 30/12/2010, 15h51
  3. [RAM] DDRII 800 Mhz, trop petit pour du rendu?
    Par Syzla dans le forum Composants
    Réponses: 3
    Dernier message: 24/03/2010, 16h42
  4. Taille de champ trop petit
    Par imsse dans le forum VBA Access
    Réponses: 15
    Dernier message: 19/06/2008, 10h52
  5. Buffer trop petit pour afficher une JSP
    Par neowind dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/07/2007, 17h44

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