Petite demande aux pros de MS Access

Réduire
X
 
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages
  • gameslover
    Ojii-sama


    • septembre 2001
    • 21344

    #1

    Petite demande aux pros de MS Access

    Bonsoir ^^

    J'aurais juste une petite demande à adresser à ceux qui utilisent MS Access régulièrement si il y en a par ici... en fait c'est très simple, j'ai une base de données et j'aimerais faire afficher dans cette base de données, des petites images à côté de chaque ligne correspondant au produit concerné par la ligne...

    Je ne sais pas si c'est super clair alors je vous mets un exemple :
    Variables :
    Nom
    Puissance
    Prix

    Ce qui donne par exemple : IBM Aptiva 3.2ghz 1200¤
    C'est sur cette ligne que j'aimerais pouvoir insérer une image au début représentant le PC en question ça ferait donc : l'image IBM Aptiva 3.2ghz 1200¤

    Est-ce techniquement possible ? J'ai essayé en long et en large, en passant par l'insertion d'objets OLE par exemple mais ça ne fonctionne pas... j'ai un peu cherché sous Google mais rien trouvé de très intéressant mais bon comme Google n'est pas mon ami je ne veux jurer de rien

    Voilà, j'espère que vous pourrez apporter une réponse à cette pertinente question ^^
    Merci d'avance
  • Turican
    Compte archivé

    • mars 2002
    • 357

    #2
    D'apres ce que j'en sais ça peut pas se faire "naturellement".
    Je veux dire par là tu peux pas créer un objet OLE et lui dire d'aller chercher dans la table.... à ce demander pourquoi Microsoft à voulu faire une table OLE ...(zaurait mieux fait de faire une table binaire ... ça aurait arrangé tout le monde).

    Tu as donc 2 moyens de faire ça.
    Le premier tu ne stockes pas les images dans la table, tu stockes seulement les liens vers les fichiers, et tu affiches l'image en passant par ce chemin (c'est pas gégé mais ça marche)

    L'autre solution c'est d'effectivement stocké dans la base l'objet OLE... mais dans ce cas pour afficher l'image, tu crées (en passant par du code) un fichier temporaire contenant l'image en elle même lorsqu'elle doit être affichée (attention l'image et l'objet OLE ne sont pas la meme chose il faut enlever l'entete et le pied de l'objet OLE pour n'avoir que l'image)...

    Je pense pas qu'il existe un autre moyen... mais si quelqu'un à une idée ça serait intéressant à voir.
    I live with my justice, I live with my greedy need
    I live with no mercy,I live with my frenzied feeding
    I live with my hatred,I live with my jealousy
    I live with the notion ,That I don't need anyone but me
    Don't drink the water, there's blood in the water, Don't drink the water
    "Don't Drink the Water" - Dave Matthews Band

    Commentaire

    • gameslover
      Ojii-sama


      • septembre 2001
      • 21344

      #3
      Merci pour ta réponse
      J'avais effectivement essayé la première solution, en faisant un simple lien hypertexte plutôt qu'un lien vers une application style paint mais comme tu dis c'est pas génial du tout...
      La seconde solution me fait peur par contre
      Faire du code ^^
      J'ai bien peur que ça dépasse mes compétences

      Commentaire

      • Turican
        Compte archivé

        • mars 2002
        • 357

        #4
        ou cas où ça puisse t'aider voila un code simple sur un bouton.

        cliquer sur le bouton affiche la premiere image d'une table d'images et l'affiche dans un controle image

        --------------------------------
        Private Sub Commande1_Click()

        Dim rst As Recordset ' Recordset récupérant les éléments de la table
        Dim imgByte() As Byte ' Lecture binaire du fichier OLE
        Dim imgByte2() As Byte ' Ecriture de l'image elle même dans le fichier temporaire

        Dim filesize As Currency ' Taille du fichier lui même en lui même
        Dim temp As Currency ' buffer pour VB qui fait des dépassement qui n'éxistent pas ...
        Dim start As Integer ' pour rechercher la taille et l'adresse de l'image dans le fichier OLE
        Dim TempFilePath As String ' Chemin vers le fichier temporaire

        Dim i, j As Long ' compteurs

        ' on requette la table pour récupérer les images
        Set rst = CurrentDb.OpenRecordset("Select Image from table1")

        ' on va créer le fichier temporaire là ou se trouve la BD par exemple ...
        TempFilePath = CurrentProject.Path & "\temp.gif"

        ' on se place sur la première occurence
        rst.MoveFirst

        ' Dans mon cas je n'ai récupéré que les images dans la table je n'ai qu'un champ donc Fileds(0)
        ' on redimenssion imgByte à la taille du fichier OLE (faut pas stocker des images de plusieurs Mo !!!)
        ReDim imgByte(rst.Fields(0).FieldSize)

        ' on récupère le contenu du fichier OLE dans le tableau
        imgByte = rst(0)

        ' on crée/ouvre le fichier temporaire
        Open TempFilePath For Binary Access Write As #1

        ' on commence à lire le Header OLE à partir du byte à l'adresse 70
        ' le header est de taille variable uniquement parce que le chemin et le nom du fichier original sont stockés
        ' 3 fois de dedans ...
        start = 70
        i = 0

        ' Premiere fois nom du fichier original ...
        While (imgByte(start) <> 0)
        start = start + 1
        Wend

        ' Deuxieme fois chemin + nom du fichier original...
        start = start + 1
        While (imgByte(start) <> 0)
        start = start + 1
        Wend
        start = start + 10

        ' Troisieme fois chemin + nom du fichier original...
        While (imgByte(start) <> 0)
        start = start + 1
        Wend


        ' apres la troisieme fois le header contient la taille originale de l'image qu'on récupère...
        temp = CInt(imgByte(start + 4))
        temp = temp * 16777216
        filesize = temp
        temp = CInt(imgByte(start + 3))
        temp = temp * 65536
        filesize = filesize + temp
        temp = CInt(imgByte(start + 2))
        temp = temp * 256
        filesize = filesize + temp
        temp = CInt(imgByte(start + 1))
        filesize = filesize + temp

        ' on redimensionne notre nouveau tableau à la taille stricte de l'image
        ReDim imgByte2(filesize)

        ' on copie les données de l'image dans le nouveau tableau
        i = 0
        For j = start + 5 To filesize
        imgByte2(i) = imgByte(j)
        i = i + 1
        Next j


        ' on écrit tout ça dans le fichier temporaire
        Put #1, , imgByte2()

        ' on ferme le fichier
        Close #1

        ' dans mon cas par exmeple on affiche ensuite la photo dans un objet IMAGE
        Image0.Picture = TempFilePath

        End Sub
        ---------------------------------------------------
        I live with my justice, I live with my greedy need
        I live with no mercy,I live with my frenzied feeding
        I live with my hatred,I live with my jealousy
        I live with the notion ,That I don't need anyone but me
        Don't drink the water, there's blood in the water, Don't drink the water
        "Don't Drink the Water" - Dave Matthews Band

        Commentaire

        • gameslover
          Ojii-sama


          • septembre 2001
          • 21344

          #5
          ah ben merci
          Je vais voir ce que je peux obtenir avec tout ça

          Commentaire

          Chargement...