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

Requêtes et SQL. Discussion :

Variable limitée à 255 caractères sur champ MEMO [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut Variable limitée à 255 caractères sur champ MEMO
    Bonjour à tous,

    Voila j'exécute une requête SQL par code VBA sur une table contenant un champ MEMO et le résultat de la requête limite le contenu à 255 cararctères.

    Pourtant ma variable récupérant le champ est déclarée en STRING je ne trouve pas la solution à mon problème.

    Voici mon code :
    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
    Public Function libelléhebdo(ID As String) As String
    On Error Resume Next
    Dim R As DAO.Recordset
    Dim chaine As String
     
     
    sql = "SELECT [ID_RNC],[Ref_produit],[Ref_four_stpa_ebau],[Constats] FROM T_résultats_qualité_bruts WHERE [Impu]=" & Chr(34) & ID & Chr(34)
    Set R = CurrentDb.OpenRecordset(sql)
    While Not R.EOF
    If R.Fields(1).Value <> "" And R.Fields(2).Value = "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & ": " & R.Fields(3).Value & "; "
    If R.Fields(1).Value <> "" And R.Fields(2).Value <> "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & "/" & R.Fields(2) & ": " & R.Fields(3).Value & "; "
    If R.Fields(1).Value = "" And R.Fields(2).Value <> "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(2).Value & ": " & R.Fields(3).Value & "; "
     
     
     
    R.MoveNext
    Wend
    Set R = Nothing
    'chaine = Left(chaine, Len(chaine) - 1)
    libelléhebdo = chaine
    End Function
    Lorsque je consulte les variables locale le contenu de la variable "chaine" ou "libelléhebdo" s'arrête à 255 caractères.

    Une petite idée pour contourner le problème.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Est-ce que T__résultats_qualité_bruts est allimentée par une requête UNION ?

    Les requêtes de type UNION coupent les champs mémo à 255 sans rien dire.

    Sinon si tu mets le SQL du code dans l'éditeur de requêtes, obtients-tu tous le texte ?

    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour marot_r,

    Ma requête qui alimente ma table T_résultats_qualité_bruts ne tronque pas le champ memo à 255 caractères.
    J'ai mis le code dans l'éditeur de requêtes et j'obtiens plus de 255 caractères ( donc code requête bon ).

    C'est à la construction de la variable "chaine" que sa limite à 255 caractères ( je l'ai constaté au mode pas à pas lors exécution du code ).

    Je bloque sur ce probème depuis 3 jours.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    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
    Public Function LibelleHebdo(Id As String) As String
    'On Error Resume Next
    Dim R As DAO.Recordset
    Dim Chaine As String
     
    sql = "SELECT [ID_RNC],[Ref_produit],[Ref_four_stpa_ebau],[Constats] FROM T_résultats_qualité_bruts WHERE [Impu]='" & replace(ID, "'", "''") & "'"
    Set R = CurrentDb.OpenRecordset(sql)
    While Not R.EOF
        If R.Fields(1).Value <> "" And R.Fields(2).Value = "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & ": " & R.Fields(3).Value & "; "
        If R.Fields(1).Value <> "" And R.Fields(2).Value <> "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & "/" & R.Fields(2) & ": " & R.Fields(3).Value & "; "
        If R.Fields(1).Value = "" And R.Fields(2).Value <> "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(2).Value & ": " & R.Fields(3).Value & "; "
        R.MoveNext
    Wend
    Set R = Nothing
    'chaine = Left(chaine, Len(chaine) - 1)
    debug.print chaine
    LibelleHebdo= chaine
    End Function
    T'as quoi dans la fenêtre exécution ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour Kloun,

    Lorsque j'exécute le code en mode pas à pas je vois bien ma variable se construire mais arriver à un certain moment elle ne prend plus rien car elle est arrivée à 255 caractères ( je les ai compté dans la fenêtre d'exécution ).

    C'est à rien y comprendre lorsque je consulte l'aide d'ACCESS il me dit
    String, type de données


    Il existe deux types de chaînes : les chaînes de longueur variable et les chaînes de longueur fixe.

    Les chaînes de longueur variable peuvent contenir environ 2 milliards (2^31) de caractères.


    Les chaînes de longueur fixe peuvent contenir de 1 à environ 64 Ko (2^16) de caractères.
    Note Une chaîne de longueur fixe déclarée comme Public ne peut pas être utilisée dans les modules de classe.

    Les codes de caractères de type String sont compris entre 0 et 255. Les 128 premiers caractères (0 à 127) du jeu de caractères correspondent aux lettres et symboles d'un clavier américain standard. Ces 128 caractères sont identiques à ceux du jeu de caractères ASCII. Les 128 caractères suivants (128 à 255) représentent des caractères spéciaux, comme les lettres de certains alphabets, les accents, les symboles monétaires et les fractions. Le caractère de déclaration de type String est le signe $.
    Il me reste à solutionner ce problème pour pourvoir utiliser ce code dans mon boulot.

    Le code SQL de la requête prend bien plus de 255 caractères mais le problème vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & ": " & R.Fields(3).Value & "; "
    Est-ce la déclaration de la variable "chaine" qui fait qu'elle ne prend pas plus de 255 caractères ?

    J'ai essayé en déclarant "chaine" en Variant pareil.


  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    Jusque là je suivais ce Post sans intervenir, car les tests que j'ai pu effectuer n'ont pas provoqué le même problème.
    J'ai fait les test sur Access 2003 SP3. Voila le petit programme que j'ai utlisé, Reproduis le et voit si le problème est le même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
        Dim i
        Dim rep As String
        rep = ""
        For i = 1 To 1000
            rep = rep & "-" & i
        Next
        MsgBox Len(rep)
        Debug.Print rep
    End Sub
    J'ai cherché dans la base de connaissances Microsoft et à priori c'est un problème que l'on ne devrait plus avoir.
    A+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour fgiambelluco,

    Je viens d'exécuter ton programme test et il s'affiche dans le MsgBox "3893".
    Est-ce le résultat que je devais obtenir ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Oui c'est bien ce qe l'application devait trouvé. Cela prouve que ton problème ne vient pas de la déclaration de la variable.

    il faut chercher une autre piste. Je vais essayer de reproduire ton programme d'origine et je reviens vers toi.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Re,

    Informations complémentaires je suis également en Access 2003 SP3 et j'ai les références suivantes de cochées :

    Visual Basic for Application
    Microsoft Access 11.0 Object Library
    OLE Automation
    Microsoft DAO 3.6 Object Library
    Microsoft ActiveX Data Object 2.1 Library
    Microsoft Office Infopath 1.0 type Library
    Microsoft XML v3.0
    Microsoft CDO for Windows 2000 Library
    Microsoft Outlook 11.0 Object Library

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Je viens de faire des essais sur une de mes tables et j'arrive à une longueur de la variable chaine de 469120

    Là je ne vois plus.

    Essaye de remplacer ta variable sql par une autre (StrSql par ex) : SQL est un mot réservé.

  11. #11
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    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
    Public Function LibelleHebdo(Id As String) As String
    'On Error Resume Next
    Dim R As DAO.Recordset
    Dim Chaine As String
    Dim SQL as string
     
    sql = "SELECT [ID_RNC],[Ref_produit],[Ref_four_stpa_ebau],[Constats] FROM T_résultats_qualité_bruts WHERE [Impu]='" & replace(ID, "'", "''") & "'"
    Set R = CurrentDb.OpenRecordset(sql)
    While Not R.EOF
        debug.print "'" & R.Fields(0).Value  & "' - '" & R.Fields(1).Value  & "' - '" & R.Fields(2).Value  & "' - '" & R.Fields(3).Value & "'"
        If R.Fields(1).Value <> "" And R.Fields(2).Value = "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & ": " & R.Fields(3).Value & "; "
        If R.Fields(1).Value <> "" And R.Fields(2).Value <> "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(1).Value & "/" & R.Fields(2) & ": " & R.Fields(3).Value & "; "
        If R.Fields(1).Value = "" And R.Fields(2).Value <> "" Then chaine = chaine & "- (RNC" & R.Fields(0).Value & ") " & R.Fields(2).Value & ": " & R.Fields(3).Value & "; "
        debug.print chaine
        R.MoveNext
    Wend
    Set R = Nothing
    'chaine = Left(chaine, Len(chaine) - 1)
     
    LibelleHebdo= chaine
    End FunctionT'as quoi dans la fenêtre exécution ?
    Des fois que ça soit un problème de données.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Re Kloun et fgiambelluco,

    J'ai testé ton code fgiambelluco et j'ai toujours le même pbe ( limité à 255 caractères et de plus j'ai rien qui s'affiche à l'écran avec les debugprint )

    J'ai fait un test avec un tout petit code et cela fonctionne voici code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test2()
    Dim a As String
    Dim b As String
    Dim c As String
     
    a = "Variable a comportant moins de 255 caractères pour effectuer test de concaténation de 2 variables ne comportant pas le même nombre de caractères (nombre caractères 168)"
    b = "Variable b comportant 94 caractères pour effectuer le test de concaténation avec la variable a"
     
    c = a & b
     
    sql1 = "UPDATE [test] SET [test].variable_a = '" & a & "', [test].variable_b = '" & b & "', [test].variable_c = '" & c & "'"
    'sql1 = "INSERT INTO [test](variable_a, variable_b,variable_c) VALUES ('" & a & "','" & b & "', '" & c & "')"
                DoCmd.RunSQL sql1
    End Sub
    Que ce soit en mise à jour ou ajout j'ai plus de 255 caractères

    Je vais refaire entièrement mon code en choissisant au mieux le nom de mes variables.

    Je vous tiens au courant.

    Merci pour le temps que vous avez passé et pour vos conseils.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Re,

    En fait le pbe ne vient pas de ce code car je l'ai modifié voici le nouveau code :
    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
    Public Function LibelleHebdo(Id As String) As String
    'On Error Resume Next
    Dim R10 As DAO.Recordset
    Dim Chaine10 As String
    Dim SQL10 As String
     
    SQL10 = "SELECT [ID_RNC],[Ref_produit],[Ref_four_stpa_ebau],[Constats] FROM T_résultats_qualité_bruts WHERE [Impu]='" & Replace(Id, "'", "''") & "'"
    Set R10 = CurrentDb.OpenRecordset(SQL10)
    While Not R10.EOF
     
        Debug.Print "'" & R10.Fields(0).Value & "' - '" & R10.Fields(1).Value & "' - '" & R10.Fields(2).Value & "' - '" & R10.Fields(3).Value & "'"
        If R10.Fields(1).Value <> "" And R10.Fields(2).Value = "" Then Chaine10 = Chaine10 & "- (RNC" & R10.Fields(0).Value & ") " & R10.Fields(1).Value & ": " & R10.Fields(3).Value & "; "
        If R10.Fields(1).Value <> "" And R10.Fields(2).Value <> "" Then Chaine10 = Chaine10 & "- (RNC" & R10.Fields(0).Value & ") " & R10.Fields(1).Value & "/" & R10.Fields(2) & ": " & R10.Fields(3).Value & "; "
        If R10.Fields(1).Value = "" And R10.Fields(2).Value <> "" Then Chaine10 = Chaine10 & "- (RNC" & R10.Fields(0).Value & ") " & R10.Fields(2).Value & ": " & R10.Fields(3).Value & "; "
        MsgBox (Chaine10)
        Debug.Print Chaine10
        R10.MoveNext
    Wend
    Set R10 = Nothing
    'chaine = Left(chaine, Len(chaine) - 1)
     
    LibelleHebdo = Chaine10
    End Function 'T 'as quoi dans la fenêtre exécution ?
    J'obtiens bien une variable avec plus de 255 caractères.

    En fait j'ai une requête qui utilise ce code dont voici le code SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT T_résultats_qualité_bruts.Impu AS Impu, LibelleHebdo([Impu]) AS Libellé
    FROM T_résultats_qualité_bruts;
    C'est la requête qui me limite à 255 caractères, il y a t'il une solution ?

    Merci par avance de vos pistes

  14. #14
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour.

    Ce problème a déjà été évoqué en février dernier.... mais sans solution.

    Voir [A-03] Afficher les données des champs Memo

    Est-ce qu'on peut dépasser? Pas sûr.

    Pierre

  15. #15
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    faq:Quelles sont les limites des champs mémos dans une requête ?

    Essaie en deux temps. Ça peut peut-être fonctionner.

    1. Requête DISTINCT R_Distinct_Impu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT T_résultats_qualité_bruts.Impu
    FROM T_résultats_qualité_bruts;
    2. Requête sur la requête R_Distinct_Impu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT R_Distinct_Impu.Impu, LibelleHebdo([Impu]) AS Libellé
    FROM R_Distinct_Impu;
    A+

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour à tous,

    Meilleurs voeux pour cette année 2010 et que nous puissons encore trouvé dans ce site les réponses à nos problèmes.

    LedZeppII j'ai essayé ta solution et le résultat des requêtes me convient mais je rencontre encore un petit problème car je voudrais que le résultat mette à jour une autre table

    J'ai essayé cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE T_NQ_hebdomadaire INNER JOIN R_libellé_résultats_hebdo ON T_NQ_hebdomadaire.[Abrégé Service] = R_libellé_résultats_hebdo.Impu SET T_NQ_hebdomadaire.Libellé = [R_libellé_résultats_hebdo]![Libellé]
    WHERE (((T_NQ_hebdomadaire.[Abrégé Service])=[R_libellé_résultats_hebdo]![Impu]));
    et j'obtiens un message d'erreur qui est le suivant :
    L'opération doit utiliser une requête qui peut être mise à jour
    Code R_libellé_résultats_hebdo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT R_Distinct_Impu.Impu, Libellehebdo([Impu]) AS Libellé
    FROM R_Distinct_Impu;
    Code R_Distinct_Impu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT T_résultats_qualité_bruts.Impu
    FROM T_résultats_qualité_bruts;
    J'ai essayé avec du code VBA

    En utilsant ça :
    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
    Function majlibelléhebdo()
    Dim db As Database
    Dim sqllibellé As String
    Dim Rslibellé As DAO.Recordset
    Dim qfdlibellé As DAO.QueryDef
    Dim impulibellé As String
    Dim liblibellé As String
     
    DoCmd.SetWarnings False ' pour ne pas avoir de message a chaque ajout
     
    'code pour activer requête
    Set qfdlibellé = CurrentDb.QueryDefs("R_libellé_résultats_hebdo")
     
    'ouvre le recordset basé sur la requête
    Set Rslibellé = qfdlibellé.OpenRecordset
     
    'Vérifie s'il y a des enregistrements dans le Recordset pour éviter message d'erreur
    If Rslibellé.BOF = True And Rslibellé.EOF = True Then GoTo line31
     
    'stocke dans les variables les données de la table sélectionnée en fonction de la requête
    Rslibellé.MoveFirst
    While Not Rslibellé.EOF
        With Rslibellé
            impulibellé = Nz(.Fields("Impu").Value, "")
            liblibellé = Nz(.Fields("Libellé").Value, "")
            If liblibellé <> "" Then liblibellé = Replace(.Fields("Libellé").Value, "'", "''")
     
                'exécute la requête d'ajout dans la table
                sqllibellé = "UPDATE [T_résultats_hebdo] SET [T_résultats_hebdo].Libellé = '" & liblibellé & "' WHERE [T_résultats_hebdo].Abréviation ='" & impulibellé & "'"
                MsgBox (sqllibellé)
                DoCmd.RunSQL sqllibellé
     
        End With
     
            Rslibellé.MoveNext
    Wend
    DoCmd.SetWarnings True
     
    line31:
    Rslibellé.Close  'on est propre on ferme ce qui a été ouvert
    Set Rslibellé = Nothing
    End Function
    et ça
    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
    Public Function LibelleHebdo(Id As String) As String
    'On Error Resume Next
    Dim R10 As DAO.Recordset
    Dim R20 As DAO.Recordset
    Dim Chaine10, Chaine20i, Chaine20l As String
    Dim SQL10, SQL20 As String
     
    SQL10 = "SELECT [ID_RNC],[Ref_produit],[Ref_four_stpa_ebau],[Constats] FROM T_résultats_qualité_bruts WHERE [Impu]='" & Replace(Id, "'", "''") & "'"
    Set R10 = CurrentDb.OpenRecordset(SQL10)
    While Not R10.EOF
     
        Debug.Print "'" & R10.Fields(0).Value & "' - '" & R10.Fields(1).Value & "' - '" & R10.Fields(2).Value & "' - '" & R10.Fields(3).Value & "'"
        If R10.Fields(1).Value <> "" And R10.Fields(2).Value = "" Then Chaine10 = Chaine10 & "- (RNC" & R10.Fields(0).Value & ") " & R10.Fields(1).Value & ": " & Replace(R10.Fields(3).Value, "'", "''") & "; "
        If R10.Fields(1).Value <> "" And R10.Fields(2).Value <> "" Then Chaine10 = Chaine10 & "- (RNC" & R10.Fields(0).Value & ") " & R10.Fields(1).Value & "/" & R10.Fields(2) & ": " & R10.Fields(3).Value & "; "
        If R10.Fields(1).Value = "" And R10.Fields(2).Value <> "" Then Chaine10 = Chaine10 & "- (RNC" & R10.Fields(0).Value & ") " & R10.Fields(2).Value & ": " & R10.Fields(3).Value & "; "
        MsgBox (Chaine10)
        'Debug.Print Chaine10
        R10.MoveNext
    Wend
    Set R10 = Nothing
    'chaine = Left(chaine, Len(chaine) - 1)
     
    LibelleHebdo = Chaine10
    End Function
    Mais lorsque le champ R10.Fields(3). Value contient plus de 255 caractères j'ai message d'erreur car le code sql est tronqué mais lorsque le champ contient moins de 255 caractères cela fonctionne.

    Soit je continue dans cette voie ou soit je cherche une autre solution.

    Un oeil neuf pourra peut être me dire mon erreur.

    Merci d'avance

  17. #17
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour et meilleurs voeux pour cette nouvelle année.

    Au sujet de ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE T_NQ_hebdomadaire INNER JOIN R_libellé_résultats_hebdo ON T_NQ_hebdomadaire.[Abrégé Service] = R_libellé_résultats_hebdo.Impu
    SET T_NQ_hebdomadaire.Libellé = [R_libellé_résultats_hebdo]![Libellé]
    WHERE (((T_NQ_hebdomadaire.[Abrégé Service])=[R_libellé_résultats_hebdo]![Impu]));
    Lorsque j'ai ce genre de problème, j'essaie de remplacer la jointure par une condition IN (sous-requête) dans la clause WHERE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE T_NQ_hebdomadaire
    SET T_NQ_hebdomadaire.Libellé = .... à définir ....
    WHERE (T_NQ_hebdomadaire.[Abrégé Service]) IN (SELECT R_libellé_résultats_hebdo.Impu FROM R_libellé_résultats_hebdo);
    Met à jour tous les enregistrements de T_NQ_hebdomadaire dont la valeur du champ [Abrégé Service] se trouve dans la liste de valeurs retournée par la sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT R_libellé_résultats_hebdo.Impu FROM R_libellé_résultats_hebdo
    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET T_NQ_hebdomadaire.Libellé = [R_libellé_résultats_hebdo]![Libellé]
    peut être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET T_NQ_hebdomadaire.Libellé = Libellehebdo(T_NQ_hebdomadaire.[Abrégé Service])
    car dans la jointure on avait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON T_NQ_hebdomadaire.[Abrégé Service] = R_libellé_résultats_hebdo.Impu
    Requête finale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE T_NQ_hebdomadaire
    SET T_NQ_hebdomadaire.Libellé = Libellehebdo(T_NQ_hebdomadaire.[Abrégé Service])
    WHERE (T_NQ_hebdomadaire.[Abrégé Service]) IN (SELECT R_libellé_résultats_hebdo.Impu FROM R_libellé_résultats_hebdo);
    A+

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour LedZeppII,


    Je viens d'essayer ta solution finale et chapeau car cela fonctionne du tonnerre de feu.

    Encore un grand merci à ton savoir et ta sagesse qui me permet également d'évoluer.


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

Discussions similaires

  1. [AC-2007] Variable String limitée à 255 caractères !?
    Par HaHaa dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/07/2010, 18h31
  2. [etat] limite a 255 avec un champ "memo"
    Par poplite dans le forum IHM
    Réponses: 5
    Dernier message: 28/02/2007, 09h52
  3. Variables string limité à 255 caractères?
    Par krfa1 dans le forum Access
    Réponses: 7
    Dernier message: 27/01/2006, 15h29
  4. Réponses: 1
    Dernier message: 18/08/2005, 15h11
  5. limite de caractère sur un type="texte"
    Par auduma dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/03/2005, 14h06

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