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

C++Builder Discussion :

inserer une image dans une base de donnee access [Base de donnée]


Sujet :

C++Builder

  1. #1
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut inserer une image dans une base de donnee access
    slt a tous, je suis un debutant dans la programmation sous l'environnement builder
    j'ai cree une petite application dans la quelle je manipule une base de donnee access, j'ai réussi a lire des donnees a partir de cette base, et a ecrire des donnee de type chaine de caractere ( ansistring ), ou des entiers.
    mais j'ai renconter un probleme pour stocker une image (donnee de type blob)
    ps : j'utilise les composant TSession, TQuery, TDatabase de la bde
    avec mes remerciments d'avance

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Une solution est de sauvegarder tes images sur ton disque dur (ou un serveur), et d'enregistrer dans la base de donnée uniquement le chemin et le nom de l'image (dans un champ texte)...

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 672
    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 672
    Points : 25 483
    Points
    25 483
    Par défaut
    Merci de fournir le code que tu as déjà écrit !
    Tu utilise le BDE, c'est fonctionnel même si obsolète

    Lire aussi la FAQ C++ Builder et Delphi et la fonction recherche sur le forum, c'est une question qui a déjà été solutionnée des dizaines de fois !


    Comment insérer et récupérer un fichier dans un champ de type BLOB ?
    Comment lire directement l'image dans la base et l'afficher dans un TDBGrid ?


    [Base de donnée] Sauvegarder et Récupérer image
    Créer et insérer un blob dans une base Access

  4. #4
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut reaction a vos reponses
    j'ai plutot opte pour les composants ado du compilateur, car selon certain, il serai plus à jour, et l'acce serais plus rapide ,je suis entrain de m'initie a leur utilisation
    comme j'ai programmé mon application en utilisant bde, je suis entrain de modifier mon programme afin que cette modification prenne effet
    dés que j'aurai termine cette tache, je vais m'interésé a l'insertion de donnees blob a la base de donnee avec mon edi, et je vous communiquerai si ca marche, ou si ca ne marche pas avec la suite d'instruction que j'ai entré
    veuillez croire a mes remerciements les plus cencere pour vos reponces instantanées

  5. #5
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut Probleme percistant
    Le probleme perciste, dés que j'essais d'executer l'insertion dans la base, un message d'erreur "Erreur de syntaxe dans l'instruction INSERT INTO" s'affiche a l'ecran
    voici une portion du code que j'ai entre et que j'avais trouve sur ce forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TADOQuery *Q;
    Q->Clear ();
    Q->SQL->Add ("INSERT INTO Image (Adr_image, Image) VALUES (:PAdr_image ,:PImage)";);
    Q->ParamCheck = true;
    Q->Parameters->ParamByName("PAdr_image")->Value = ExtractFileName (Chemin); 
    Q->Parameters->ParamByName("PImage")->LoadFromFile(chemin, ftBlob) ;
    Q->ExecSQL ();
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TADOQuery *Q;
    Q->Clear ();
    Q->SQL->Add ("INSERT INTO Image (Adr_image, Image) VALUES (:PAdr_image ,:PImage)";);
    Q->ParamCheck = true;
    Q->Parameters->ParamByName("PAdr_image")->Value = ExtractFileName (Chemin); 
    Q->Parameters->ParamByName("PImage")->LoadFromFile(chemin, ftGraphic) ;
    Q->ExecSQL ();
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TADOQuery *Q;
    Q->Clear ();
    Q->SQL->Add ("INSERT INTO Image (Adr_image, Image) VALUES (chemin ,:PImage)";);
    Q->ParamCheck = true;
    Q->Parameters->ParamByName("PImage")->LoadFromFile(chemin, ftBlob) ;
    Q->ExecSQL ();
    comme vous avez pu le constater, je veut inserer des images presentes sur HDD dans une base de données sans passer par un TImage

    toute-fois, je tient a mexcuse pour ne pas avoir donner signe de vis durant toute cette periode parce que j'etais occupe ailleurs

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 672
    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 672
    Points : 25 483
    Points
    25 483
    Par défaut
    Clear ça n'existe pas dans TADOQuery !
    Tu ne fais pas de New non plus !
    "...,:PImage)";);, c'est quoi ce ; après la chaine, ne devrait-il pas être dedans ?

    Je suppose que c'est un code démonstratif mais tu pourrais au moins mettre quelque chose d'exact surtout si il s'agit d'une erreur de syntaxe (même si c'est une erreur SQL)
    Si tu ne fournis pas le code exact qui provoque l'erreur, tu as pu en recopiant autre chose éliminer la source de l'erreur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Q->Clear ();
    Q->SQL->Add ("INSERT ...
    remplace ça par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Q->SQL->Clear();
    Q->SQL->Add ("INSERT ...
    ou plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q->SQL->Text = "INSERT ...
    Image est le bon nom de tables ?
    Tu as un champ qui s'appellent image.image ?

    Dans le 3eme cas, chemin, tu le sort de ton chapeau ? pas de "" ou '' pour indiquer une chaine dans le SQL

  7. #7
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    j'ai fait
    pour monterer que j'ai utilise un composant TADOQuery avec un TADOConnection, j'aurai pu mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TADOQuery *Q = new TADOQuery (Application);
    si, j'avais fait
    j'airai automatiquement us un message d'erreur gere par le compilateur, pas
    un message d'erreur SQL
    effectivement, j'ai fait
    sinon, j'aurai us un message d'erreur gere le compilateur, car clear n'est pas un membre de la class TADOQuery, c'est un membre de SQL(c'est juste une erreur de frape lors de la copie du code sur ce forum)
    Oui, j'ai une table nommée image a la l'interieur de la base image et qui a contient deux champs : Adr_image, image
    j'ai pas mis chemin, a la place j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Q->Parameters->ParamByName("PImage")->LoadFromFile(OpenDialog1->FileName, ftBlob) ;
    donc, je veut recuperer l'adresse de l'image sur le disque en utilisant un TOpenDialog, pour pouvoir inserer l'image dans la base a la suite d'un appuis sur un button que j'ai positionne sur ma fenetre
    donc, j'ai fait chemin sur la discution du forum pour simplifier la compréhension
    C'est vrai que j'ai copie le code de faq builder, mais je l'ai modifie selon les besoins de mon programme
    c-a-dire, le probleme est ailleurs.
    si quelqu'un sait ou est l'erreur
    ou si vous connaissez un autre moyen d'inserer des images dans la base en utilisant les composants ADO, je suis preneur.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 672
    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 672
    Points : 25 483
    Points
    25 483
    Par défaut
    Question con, tu as pensé à doubler les antislash d'une chemin ?
    Je ne connais pas ACCESS mais si il fonctionne comme la majorité des SQL, le \ est un caractère d’échappement comme en C pour écrire \n, \r, \t ... mais il sert aussi a échapper le caractère de chaine " ou ', certaines DB supporte comme en Delphi, le doublage du caractère comme echappement
    Code chemin : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Dossier\Fichier
    devenant
    Code chemin : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\\Dossier\\Fichier

  9. #9
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    Oui, je confirme, j'ai pas double les antislash, car cette information m'es nouvelle
    j'ai fait aussi une autre erreur, celle ci de manipulation, le champ sur m'a base de donnée est noté Adr_img, or, comme vous pouvez le remarquer, j'ai fait Adr_image dans l'instruction SQL insert into
    j'ai corrigé les erreurs, et je les testé, ca ne marche qu'on utilisant des composants BDE, avec ADO, je n'ai pas réussi a le faire fonctionné
    j'ai entré les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TSession *s = new TSession (Application);
    TDatabase *d = new TDatabase (Application);
    TQuery *Q = new TQuery (Application);
    Q->SQL->Clear() ;
    Q->SQL->Add("Insert into Image (Adr_img, Image) VALUES ('"D:\Mes etudes\\XXXXX.bmp"', :Image);");
    Q->ParamCheck = true;
    Q->Params->ParamByName("Image")->LoadFromFile("D:\Mes etudes\\XXXXX.bmp", ftBlob);  
    Q->ExecSQL() ;
    Je tient a remercie tous ce qui mon aider a resoudre ce probleme, et on particulier ShaiLeTroll qui s'est monté d'une extreme gentillesse

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

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Comment placer une image dans une table de une base de données
    Par Arnold Falanga dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/07/2012, 09h29
  3. inserer un lien vers une image dans une news
    Par jerrypeeren dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/07/2008, 22h51
  4. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19

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