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

Bases de données Delphi Discussion :

Insertion images dans base de données


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Insertion images dans base de données
    Bonjour j'appreçis comment ce fait les quetions et reponse sur ce forum;

    Moi j'ai un probleme d'enregistrement d'image dans une base de donnée.
    je programe en delphi mysql.
    j'ai defini le champ blob dans la base, mais je n'arrive pas à soumettre une image de plus de 500 ko à 1000 ko.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mytable.(FieldByName('Photo') as TBlobField).LoadFromFile(OpenDialog.Filename, ftBlob);
    mytable c'est le compasant de mydac de mysql
    photo c'est le nom du champs image dans la base mysql.

    Aider moi.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    vérifie le type de BLOB (65Ko), si MEDIUM (16Mo) ou LONG (2Go)

    Modifie dans le fichier My.ini la taille d'une requête genre max_allowed_packet
    Il me semble que c'est suffisant !
    Perso, j'ai eu ce problème sur des fichiers PDF même compressé en Zip Level 9 qui pouvait dépasser 1 Mo (valeur par défaut sur le server)

    Sache qu'en MySQL, tu peux faire un UPDATE ou INSERT d'un champ Blob en mettant le Binaire en Base64 ce qui permet de l'utiliser comme une chaine, et cet encodage n'est pas altéré par l'UTF-8

    J'ai utilisé MyDAC (Devart Core Lab) pendant plus de 4 ans, c'est un très bon choix !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 16
    Points : 4
    Points
    4
    Par défaut mysql 5.0 probleme de max_allowed_packet
    Merci,
    Comme je l avais dit je suis un debutant alors vous aleer beaucoup m excuser de mes erreur et j epere qu avec le temps je m habituerai. j ai essyer mais je ne trouve pas max_allowed_packet dans my.ini mais c est plutot dans my-large.ini et my.small.ini ou my-medium.ini, svp je fais comment?
    Merci beaucoup

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Comment mettre le binaire en base64
    Comment mettre le binaire d une base en base64 pour permettre que me insertion et update n altere pas le utf8.

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Cool Cool c'est vraiment
    Merci
    j'ai enfin trouvé, j'ai seulement ajouté max_allowed_packet=16M dans mon fichier my.ini et la taille des fichiers des images sont automatiquement enregistrée.

    au fait dit quel est l'inconvenient en enregistrant directement des fichier images dans la base. y t il un probleme de lenteur à long therme?
    Est une bonne methode?
    La recherche est-elle rapide?

    Kokey

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Je te conseille d'utiliser une ou plusieurs tables de BLOB !
    C'est à dire que tu sépares les BLOB des données principales !
    Cela te permettra de conserver de grande perf sur les requêtes sur les données métiers, facilite la sauvegarde aussi !
    Ne jamais faire de SELECT * sur une table avec des BLOB, bcp trop lent et souvent inutile !

    Tout dépend aussi le volume et les technologies d'accès !
    Stocker les images en BLOB à l'avantage de centraliser les données !

    Certains vont te dire de stocker les chemins des images et d'avoir un serveur de fichier !
    Personnellement, je suis contre le stockage des chemins complets, il faut priviliégier des chemins relatifs ou encore mieux un système de chemin qui se calcule donc sans risque de perte de lien (fréquent lorsque l'on sépare Table et Fichiers)

    Tu as une table de Personne, chaque personne à un AutoInc dans la Table, il peut servir de lien !
    Un répertoire calculé de la forme ".\Files\001\000001\0000000001\Photo.jpg"
    0000000001 étant la valeur de l'AutoInc paddé sur 10 caractères
    000001 étant les 6 digits les plus significatifs
    001 étant les 3 digits les plus significatifs
    Photo.jpg est la seule partie du nom de fichier stockée dans la table Personne

    Dans le cas d'un réseau local, aucun soucis, un petit partage windows ou samba, le tour est joué !

    Dans le cas d'une application client lourd en WAN, il faut prévoir du téléchargement de fichier (FTP, HTPP, Flux...) ce qui complique nettement les choses par rapport à un stockage direct en BLOB !

    Chaque solution apporte une réponse et un problème en même temps !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Je n'ai pas compris à quoi servent les 3 sous-dossiers ? Et quelle est l'utilité de "padder" à 10 caractères ou autre, si ce n'est pour le tri alphabétique dans un explorateur de fichiers ?
    Mettre les images (ou autres fichiers) dans tes tables blob dédiées, hmm, intéressant... est-ce que tu as des liens qui parlent de cette technique comparativement à d'autres ?

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Essaye d'ouvrir un dossier sous l'explorateur avec 1000 dossiers !
    Tu verras, il adore !
    Le découpage en sous dossier permet d'éviter un temps de lecture trop long lors de l'ouverture d'un dossier
    le pad à 10, c'est tout simplement parce qu'en général, on utilise un INTEGER comme AutoInc, limité à 2,1 milliards, donc 10 digits maximum !
    Ensuite, le Pad, permet un découpage plus facile des 6 et 3 digits significatifs !

    Pour la Personne ID 512789, ça donnerait
    ".\Files\789\512789\0000512789\Photo.jpg"

    Si tu atteinds les 2 milliards d'enregistrements, effectivement le nombre de dossier au dernier niveau atteinds les 20000 sous dossiers, mais avant d'avoir une telle base, il faut vouloir gérer le trombinoscope de tous les Chinois et la FAT aura surement déjà explosé !

    Pour les Blobs isolés, c'est ni plus ni moins, l'application de ce que fait Paradox avec les fichiers mmo, où l'on peut stocker de 0 à 255 caractères du blob dans la table et le reste dans le fichier mmo !

    Tu peux lire aussi 14.1.3. Formats de table MyISAM et l'impact d'utiliser VARCHAR, BLOB ou TEXT

    Les performances des tables à taille fixe sont imbattables !
    En même temps, en MySQL, CHAR et VARCHAR sont modifiés en fonction de leur longueur CHAR de 1 à 3, VARCHAR à partir de 4, il y une option pour forcer l'utlisation CHAR à plus de 3 pour conserver ROW_FORMAT à FIXED
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Probleme de reduction de la taille d'une image
    Salut,
    j'ai un probleme, je vienx de faire une petite application, qui me permet de scanner et de stocker dans une base mysql? mais mon probleme est que les fichier stocker que j'enregistre dans ma base, sont trs lourd, à peu près 8M, mais j'ai jusqu'à 8 champ qui me stock les images dans des champs de type blob,
    Y a t il une possibilité de changer le fprmat de scanage ou y at i un code qui peu me permettre de reduire la taille de mes fichiers scanner avant de le envoyer dans la base?
    Aidez moi
    kokey

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    utilise un outil de Compression comme TVCLZip vers un objet Stream que tu pourras envoyé à ta DB MySQL via une requête paramêtrée

    En MySQL, tu peux écrire un BLOB via SQL en le formattant en Base64, si tu préfère un SQL !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [XL-2007] Insertion image dans base de données - VBA
    Par manuelbrunet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2014, 15h53
  2. [MySQL] Insertion lien image dans base de données
    Par Addict` dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/02/2009, 13h40
  3. inserer une image dans base de données ?
    Par ouldfella dans le forum Requêtes
    Réponses: 7
    Dernier message: 20/12/2006, 16h04
  4. [ARRAY]insertion variable dans base de donnée
    Par lazzeroni dans le forum JDBC
    Réponses: 2
    Dernier message: 30/03/2006, 10h33
  5. [VB.NET]Champ image dans base de donnée access
    Par dankes dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/10/2005, 15h31

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