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 :

ADOQUERY + DBIMAGE [FAQ]


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut ADOQUERY + DBIMAGE
    Bojour, je voudrais enregistrer une image dans ma base ADO par le biais d'un ADOQuery.
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.SpeedButonPhotoClick(Sender: TObject);
    begin
      If OpenDialog1.Execute
      Then
        Try
          ADOtable1.Append;
          DBImage1.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
          ADOtable1.Post;
        Except
          ShowMessage('Registre actuellement en edition !');
        End;
    L'image est enregistrée mais avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('INSERT INTO UTILISATEUR');
        ADOQuery1.SQL.Add('(Pseudo, Photo)');
        ADOQuery1.SQL.Add('VALUES ("'+EditPseudo.Text+'","'+DBImage1.Picture+'")');
        Try
        ADOQuery1.Prepared:=True;
        ADOQuery1.ExecSQL;
        ADOQuery1.Close;
        Except
        MessageDlg('...',mtError,[mbOk], 0);
        Close;
        end;
    J'ai un message d'erreur. Que dois-je faire ?

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    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
     
     ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('INSERT INTO UTILISATEUR');
        ADOQuery1.SQL.Add('(Pseudo, Photo)');
        ADOQuery1.SQL.Add('VALUES(:Pseudo,:Image)'); 
        Parameters := True
        Params.ParaByName('Pseudo').value := EditPseudo.Text;
        Params.ParamByName('Image').Assign(DBImage1.Picture.Bitmap);
        Try
        ADOQuery1.Prepared:=True;
        ADOQuery1.ExecSQL;
        ADOQuery1.Close;
        Except
        MessageDlg('...',mtError,[mbOk], 0);
        Close;
        end;
    Cela devrait fonctionner comme ca

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    J'ai plein de messages d'erreur !
    [Erreur] unit1.pas(63): E2064 La partie gauche n'est pas affectable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Params.ParaByName('Pseudo').value := EditPseudo.Text;
    [Erreur] unit1.pas(64): E2003 Identificateur non déclaré : 'Params'
    [Erreur] unit1.pas(64): E2066 Opérateur ou point-virgule manquant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Params.ParamByName('Photo').Assign(DBImage1.Picture.Bitmap);
    [Erreur] unit1.pas(64): E2003 Identificateur non déclaré : 'Params'
    [Erreur] unit1.pas(64): E2066 Opérateur ou point-virgule manquant

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Parameters := True;
    à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ParamCheck := true;
    à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Parameters.ParamByName
    Désolé, j'ai écrit assez rapidement

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    Voici mon code reecrit donc ! Je l'ai remis expres ... en cas que je fasse une erreur de compréhension !
    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
    ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('INSERT INTO UTILISATEUR');
        ADOQuery1.SQL.Add('(Pseudo,Nom,Prenom,Mot_de_passe, Photo)');
        ADOQuery1.SQL.Add('VALUES (:Pseudo, :Nom, :Prenom, :Mot_de_passe, :Photo)');
        ParamCheck := true;
        Parameters.ParamByName ('Pseudo').value := EditPseudo.Text;
        Parameters.ParamByName ('Nom').value := EditNom.Text;
        Parameters.ParamByName ('Mot_de_passe').value := EditPassword.Text;
        Parameters.ParamByName ('Photo').Assign(DBImage1.Picture.Bitmap);
    //    ADOQuery1.SQL.Add('VALUES ("'+EditPseudo.Text+'","'+EditNom.Text+'","'+EditPrenom.Text+'","'+EditPassword.Text+'","'+DBImage1.Picture+'")');
        Try
        ADOQuery1.Prepared:=True;
        ADOQuery1.ExecSQL;
        ADOQuery1.Close;
        Except
        MessageDlg('Veuillez n''utiliser que des lettres pour les noms et prénoms s''il-vous-plaît.',mtError,[mbOk], 0);
        Close;
        end;
    sauf que :
    [Erreur] unit1.pas(63): E2003 Identificateur non déclaré : 'ParamCheck'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parameters.ParamByName ('Pseudo').value := EditPseudo.Text;
    [Erreur] unit1.pas(64): E2018 Type Record, Object ou Class requis
    [Erreur] unit1.pas(64): E2066 Opérateur ou point-virgule manquant

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    ParamCheck est une propriété de ton ADOQuery.
    Donc écrit ta ligne ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      ADOQuery1.ParamCheck := True;
    Pour parameters c'est pareil: ADOQuery.Paramaters....
    @+

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Au fait pourquoi tu n'utilises pas un with begin end ?
    Cela facilite l'écriture et la lecture 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
     
      with ADOQuery1 do
      begin
        Close; 
        SQL.Clear; 
        SQL.Add('INSERT INTO UTILISATEUR'); 
        SQL.Add('(Pseudo,Nom,Prenom,Mot_de_passe, Photo)'); 
        SQL.Add('VALUES :Pseudo, :Nom, :Prenom, :Mot_de_passe, :Photo)'); 
        ParamCheck := true; 
        Parameters.ParamByName ('Pseudo').value := EditPseudo.Text; 
        Parameters.ParamByName ('Nom').value := EditNom.Text; 
        Parameters.ParamByName ('Mot_de_passe').value := EditPassword.Text; 
        Parameters.ParamByName ('Photo').Assign(DBImage1.Picture.Bitmap); 
        Try 
          Prepared:=True; 
          ExecSQL; 
        Except 
          MessageDlg('Veuillez n''utiliser que des lettres pour les noms et prénoms s''il-vous-plaît.',mtError,[mbOk], 0); 
        end;
        Close;
      end; // with
     
    @+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    Quand j'utilise ceci, c'est ok :
    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
    ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('INSERT INTO UTILISATEUR');
        ADOQuery1.SQL.Add('(Pseudo,Nom,Prenom,Mot_de_passe, Photo)');
        ADOQuery1.SQL.Add('VALUES (:Pseudo, :Nom, :Prenom, :Mot_de_passe, :Photo)');
        ADOQuery1.ParamCheck := true;
        ADOQuery1.Parameters.ParamByName ('Pseudo').value := EditPseudo.Text;
        ADOQuery1.Parameters.ParamByName ('Nom').value := EditNom.Text;
        ADOQuery1.Parameters.ParamByName ('Mot_de_passe').value := EditPassword.Text;
        ADOQuery1.Parameters.ParamByName ('Photo').Assign(DBImage1.Picture.Bitmap);
        Try
        ADOQuery1.Prepared:=True;
        ADOQuery1.ExecSQL;
        ADOQuery1.Close;
        Except
        MessageDlg('Veuillez n''utiliser que des lettres pour les noms et prénoms s''il-vous-plaît.',mtError,[mbOk], 0);
        Close;
        end;
    et si je remplce par :
    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
     with ADOQuery1 do
          begin
              Close;
              SQL.Clear;
              SQL.Add('INSERT INTO UTILISATEUR');
              SQL.Add('(Pseudo,Nom,Prenom,Mot_de_passe, Photo)');
              SQL.Add('VALUES :Pseudo, :Nom, :Prenom, :Mot_de_passe, :Photo)');
              ParamCheck := true;
              Parameters.ParamByName('Pseudo').value:= EditPseudo.Text;
              Parameters.ParamByName('Nom').value:=EditNom.Text;
              Parameters.ParamByName('Mot_de_passe').value:=EditPassword.Text;
              Parameters.ParamByName('Photo').Assign(DBImage1.Picture.Bitmap);
              Try
                Prepared:=True;
                ExecSQL;
              Except
                MessageDlg('Veuillez n''utiliser que des lettres pour les noms et prénoms s''il-vous-plaît.',mtError,[mbOk], 0);
          end;
        Close;
    ...
    J'ai le message suivant :
    classe exception EOleException avec le message 'objet Parameter'. Pourquoi ?

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    SQL.Add('VALUES (seudo, :Nom, renom, :Mot_de_passe, hoto)');
    Il te manque une ( dans ta requete

    Sinon désole trop l'habitude d'utiliser les with ^^

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    Pour Malatar :
    Ca fait deux fois que tu t'excuses. Il n'y a vraiment pas de quoi, car sans toi, je serai dans la galère. Le SQL et moi, ca fait 2.

    Je n'oublie pas non plus, Claudius40.

    UN GRAND MERCI A VOUS DEUX !

  12. #12
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    With Malatar, Claudius40 do
    begin
      MessageDlg('Y a pas de quoi !', mtInformation, [mbOK],0);
    end;
    @+

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

Discussions similaires

  1. ADOQuery SQL update
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/06/2004, 11h00
  2. [ADOQuery]Comment ajouter un prametre a un ADOQuery
    Par bitou dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/04/2004, 15h08
  3. [ADOQuery] Propriété Fields
    Par bitou dans le forum Bases de données
    Réponses: 7
    Dernier message: 21/04/2004, 11h24
  4. Probleme S/ UPDATE : ADOQUERY base = .DBF , D7
    Par bzh56 dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/02/2004, 01h56
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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