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 :

VBA Taille champ Texte Long [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut VBA Taille champ Texte Long
    Bonjour,

    J'ai un petit problème incompréhensible (du moins pour moi), Je transforme via VBA un fichier PDF en base64. Il apparait dans la fenêtre d’exécution lors de l'essai.
    J’attribue de fichier base64 (string) à un champ de ma table (texte long) et bizarrement, il est tronqué après 270 caractères.
    d'apres mes recherches, un champ texte long peut accepter 32000caractères.
    Comment est possible alors que ma string soit tronquée?????

    Quelqu'un a t il une idée?

    Merci d'avance

    Eric

  2. #2
    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
    Bonjour.

    Oui c'est bien dans les 32 000 et 270 ne correspond à rien (un champ texte c'est max 255).

    Il y a sans doute un caractère qu'Access interpréte comme une fin de données.

    Si tu y a accès utilise un éditeur hexadécimal pour regarder quels sont les codes ascii des caractères dans cette zone.
    Le code de fin de fichier en Ascii est 26 en décimal et 1A en hexadécimal.
    Si Access rencontre ce caractère, il arrète la lecture même si ton fichier est plus gros.

    Si c'est cela il va falloir passer par une lecture binaire caractère par caractère du fichier,

    Ici un exemple de code qui lit un fichier caractère par caractère

    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
    Private Sub LectureBinaire()
     
        Dim numFic As Long: numFic = FreeFile()
        dim nomFic as string: nomFic="X:\TonChemin\TonFichier.Ext"
        dim buffer as string * 1
     
        Open nomFic For Binary As #numFic
     
        Do While Not EOF(numFic) 
            Get numFic, , buffer
     
            Debug.Print Asc(buffer), IIf(buffer >= " ", buffer, "")
        Loop
     
        Close #numFic
    End Sub
    avec Do While Not EOF(numFic) il est possible que la lecture s'arrête à la même place.

    Si, oui, essaye le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do while loc(numfic)<=lof(numFic)
    Lof() donne la taille du fichier
    Loc() donne la position courante dans le fichier.

    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.

  3. #3
    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
    Et il te faudra sans doute remplacer le carcatère 26 (1A) perturbateur par un espace ou rien pour éviter les problèmes.

    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.

  4. #4
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Merci pour ta reponse. Mais tres compliqué pour moi qui ne suis que débutant

    je pourrais contourner le problème en évitant de stocker le B64 dans un table mais en l'attribuant directement à une variable lors de l’envoi '(http POST)
    Aurais tu un convertisseurs de fichier pdf en B64 qui fonctionne sous vba?

    Merci
    Eric

  5. #5
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    voici la fonction que j'utilise pour encoder en base64

    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 EncodeBase64(plainText As String) As String
     
        Dim bytes() As Byte
        Dim objXML As Object 'MSXML2.DOMDocument60
        Dim objNode As Object 'MSXML2.IXMLDOMNode
     
        bytes = StrConv(plainText, vbFromUnicode)
     
        Set objXML = CreateObject("MSXML2.DOMDocument.6.0")
        Set objNode = objXML.createElement("b64")
        objNode.DataType = "bin.base64"
        objNode.nodeTypedValue = bytes
        EncodeBase64 = objNode.Text
     
        Set objNode = Nothing
        Set objXML = Nothing
     
    End Function
    Et ci dessous, une partie du code que j'utilise et qui bloque sur le dernier EncodeBase64(bytes) avec le message d'erreur
    "Type d'argument ByRef imcompatible"
    Je crois avoir tout essayé mais rien à faire

    Quelqu'un peut il m'aider?
    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Set RapPath = orstRequest.FilePathRap
         Dim bytes
        Dim RapB64String As String
        With CreateObject("ADODB.Stream")
        .Open
        .type = ADODB.adTypeBinary
        .LoadFromFile RapPath
        bytes = .Read
        .Close
        End With
        RapB64String = EncodeBase64(bytes)

  6. #6
    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
    Bonjour.

    Tu peux essayer :

    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 LectureBinaire(prmFichier as string) as string
        dim result as string
        Dim numFic As Long: numFic = FreeFile()
        dim nomFic as string: nomFic=prmFichier
        dim buffer as string * 1
     
        Open nomFic For Binary As #numFic
     
        Do While Not EOF(numFic) 
            Get numFic, , buffer
     
            result=result & buffer
        Loop
     
        Close #numFic
     
        LectureBinaire=result
    End Sub
    à utiliser comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim uneVariable as string
    uneVariable=LectureBinaire("x:\TonChemin\TonFichier.ext")
    'Ici du code qui utilise uneVariable
    Pour ta solution à base de stream, le problème vient peut-être de là :

    EncodeBase64(plainText As String) tu définis un argument de type String mais dans ton code utilssateur tu ne types pas (Dim bytes) donc access type en Variant et un Variant n'est pas une String.

    Soit tu types Bytes as String, soit tu définis PlainText as Variant.

    Ce n'est pas sur que cela va marcher après mais tu devrais éviter l'erreur de type.

    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.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Effectivement il n'est pas impossible que le non typage en string soit la cause de la troncaturation.

    https://www.developpez.net/forums/d1...s/#post8526350

    De plus il convient de type le buffer en tableau et de le dimensionner à la taille du fichier pour n'avoir qu'un accès disque.

    Dim buffer() As byte
    Redim buffer(tailleFichier)

    J'utilise les fonctions qui ce trouvent dans le lien pour encoder en base 64 n'importe quoi (application.exe, images,zip,etc...)
    Dernière modification par Invité ; 13/05/2018 à 12h31.

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

Discussions similaires

  1. Limiter la taille d'un champ texte avec VBA
    Par Lehobbit78 dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/05/2018, 12h02
  2. [AC-2013] adresse courriel dans un champ texte long enrichi
    Par GuyDuLac dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/05/2013, 18h13
  3. [MySQL] Limitation de taille champ TEXT Mysql
    Par debido67 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/11/2010, 16h48
  4. [VBA Access] Champ texte null alors que l'objet existe bien.
    Par Caroline1 dans le forum VBA Access
    Réponses: 9
    Dernier message: 28/03/2006, 17h31
  5. [VBA] choix valeur liste déroulante (champ texte d'1 table)
    Par Lou Pitchoun dans le forum Access
    Réponses: 14
    Dernier message: 22/02/2006, 10h27

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