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

VB.NET Discussion :

Gérer dess images dans une base de données SQLite


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut Gérer dess images dans une base de données SQLite
    Bonjour,
    J'ai une appli VB.NET liée à une bdd SQLite.
    Je voudrais rajouter un champ à ma base de données qui stocke une image.
    J'ai lu qu'il y a 2 façons de faire :
    - soit je stocke en dur l'image dans le fichier de base de données en utilisant les instructions VB.Net qui permettent de le faire dans un champ de type BLOB
    - soit je stocke le fichier JPG à part et je stocke dans la base de données juste le path vers le fichier.
    Dans la première solution, ça me semble assez simple, mais je crains l'inflation de la taille de la base de données qui augmente autant que la taille des images. A moins qu'il y ait un moyen en VB.NET de compresser les images avant de les stocker ? Dans mon cas en tout cas, comme il s'agit de stocker des images d'étiquettes de produit, la qualité n'a pas d'importance
    Dans la 2ème solution, est-ce qu'un champ texte suffit pour stocker le path ? Peut-on ensuite mettre un picturebox dans un formulaire dont le contenu est le fichier jpg dont le path est trouvé dans la BdD ?
    Quel conseil pouvez-vous me donner ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Oui en théorie tu peux stocker une image dans un champ BLOB.
    En pratique je n'ai jamais réussi à le faire!

    A moins qu'une mise à jour d'SqlLite ait corrigé le problème, il ne te reste qu'à stocker le path!

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Si, ça marche. J'ai trouvé un tuto que j'ai testé et qui fonctionne. Voici l'essentiel du 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
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    Imports System.Data.SQLite
    Imports System.IO
    Module modSQLITE
        Public Database As String
        Dim CON As New SQLiteConnection
        '
        Public Sub OpenDataBase()
            Try
                CON.ConnectionString = My.Settings.Conn
                CON.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
        '
        Public Sub CloseDatabase()
            CON.Close()
        End Sub
        Public Structure m_INDIVIDU
            Dim ID As Integer
            Dim Nom As String
            Dim Age As Integer
            Dim Membre As Boolean
            Dim Photo As Image
            Public Sub New(ByVal Idx As Integer)
                ID = Idx
                Nom = ""
                Age = 0
                Membre = False
                Photo = New Bitmap(10, 10) 'on initialise avec une image quelconque
            End Sub
        End Structure
        Public Sub DBaddINDIVIDU(ByVal INDIVIDU As m_INDIVIDU)
            Try
                Dim strSQL As String = "INSERT INTO INDIVIDU VALUES (@ID,@Nom,@Age,@Membre,@Photo)"
                Dim cmd = New SQLiteCommand(strSQL, CON)
                cmd.Parameters.AddWithValue("@ID", INDIVIDU.ID)
                cmd.Parameters.AddWithValue("@Nom", INDIVIDU.Nom)
                cmd.Parameters.AddWithValue("@Age", INDIVIDU.Age)
                cmd.Parameters.AddWithValue("@Membre", INDIVIDU.Membre)
                cmd.Parameters.AddWithValue("@Photo", ImageToByteArray(INDIVIDU.Photo))
                cmd.ExecuteNonQuery()
                cmd.Dispose()
            Catch ex As Exception
                MessageBox.Show(ex.message)
            End Try
        End Sub
     
        Public Sub DBupdateINDIVIDU(ByVal INDIVIDU As m_INDIVIDU)
            Try
                Dim strSQL As String = "UPDATE INDIVIDU SET Nom=@Nom,Age=@Age,Membre=@Membre,Photo=@Photo WHERE ID=@ID"
                Dim cmd = New SQLiteCommand(strSQL, CON)
                cmd.Parameters.AddWithValue("@ID", INDIVIDU.ID)
                cmd.Parameters.AddWithValue("@Nom", INDIVIDU.Nom)
                cmd.Parameters.AddWithValue("@Age", INDIVIDU.Age)
                cmd.Parameters.AddWithValue("@Membre", INDIVIDU.Membre)
                cmd.Parameters.AddWithValue("@Photo", ImageToByteArray(INDIVIDU.Photo))
                cmd.ExecuteNonQuery()
                cmd.Dispose()
            Catch ex As Exception
                MessageBox.Show(ex.message)
            End Try
        End Sub
     
        Public Function DBgetINDIVIDU(ByVal Idx As Integer) As m_INDIVIDU
            Dim strSQL As String = "SELECT * FROM INDIVIDU WHERE ID= " & idx
            Dim INDIVIDU As New m_INDIVIDU
            Dim cmd = New SQLiteCommand(strSQL, CON)
            Dim DR As SQLiteDataReader = cmd.ExecuteReader
            '
            While (DR.Read())
                INDIVIDU.ID = DR(0)
                INDIVIDU.Nom = DR(1)
                INDIVIDU.Age = DR(2)
                INDIVIDU.Membre = DR(3)
                INDIVIDU.Photo = ByteArrayToImage(DR(4))
            End While
            DR.Close()
            cmd.Dispose()
            Return INDIVIDU
        End Function
     
        Public Sub DBdeleteINDIVIDU(ByVal Idx As Integer)
            Dim strSQL As String = "DELETE FROM INDIVIDU WHERE ID= " & idx
            Dim cmd = New SQLiteCommand(strSQL, CON)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
        End Sub
     
        Public Function DBNewIndexINDIVIDU() As Integer
            Dim NewID As Integer = 1
            Dim cmd = New SQLITECommand("SELECT MAX(ID) FROM INDIVIDU", CON)
            Try
                Dim DR As SQliteDataReader = cmd.ExecuteReader
                While (DR.Read())
                    NewID = DR(0)
                End While
                DR.Close()
                Return NewID + 1
            Catch ex As Exception
                Return NewID
            End Try
        End Function
     
        Public Sub DBremplirListe(ByRef LST As ListBox) 'remarquez le ByRef
            Dim cmd = New SQLiteCommand("SELECT ID,Nom FROM INDIVIDU", CON)
            Dim DR As SQLiteDataReader = cmd.ExecuteReader
            LST.Items.Clear()
            While (DR.Read())
                'DR(1) est le nom DR(0) est ID
                LST.Items.Add(DR(1) & "    |" & DR(0))
            End While
            DR.Close()
        End Sub
        '------------
        Public Function ImageToByteArray(ByVal img As Image) As Byte()
            Dim stream As New MemoryStream
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Return stream.ToArray
        End Function
     
        Public Function ByteArrayToImage(ByVal ByteArray As Byte()) As Image
            Dim stream As New MemoryStream(ByteArray, 0, ByteArray.Length)
            Return Image.FromStream(stream, True)
        End Function
    End Module

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    merci noftal, je le garde sous le coude car j'ai cherché un petit moment; je n'avais pas d'erreur ma rien dans le champ!

Discussions similaires

  1. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 19h08
  2. [VBA - ACCESS] - Images dans une base de données
    Par fredhali2000 dans le forum Access
    Réponses: 1
    Dernier message: 22/02/2006, 10h22
  3. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29
  4. inserer des images dans une base de données
    Par alilou04 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2004, 18h54
  5. les images dans une base de données
    Par houhou dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/06/2004, 14h27

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