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 :

Requête d'insertion dans une base ACCESS


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Requête d'insertion dans une base ACCESS
    Bonjour à tous

    Je suis en train de faire un logiciel qui agit avec une base de données ACESS.

    Je suis allez voir le tutorial permettant de se connecter à une base Access avec Borland C++ Builder.

    Jusque là, pas de problème.

    En revanche, je n'arrive pas à faire une requête d'insertion dans ma base de données.

    Je construis ma requête en récupérant des informations dans des champs d'une boite de dialogue. Or, la requête ne fonctionne pas.

    Ce que j'ai donc fait pour tester, j'ai écrit ma requête directement en SQL dans ACCESS avec les valeurs que je voulais insérer et là elle marche.

    J'ai donc copier cette requête fonctionnant dans ACCESS directement dans la propriété SQL de mon objet requête pour tester.

    Et là j'ai la même erreur.
    Le projet videoaudio.exe a provoqué une classe d'exception EDatabaseError avec le message "Requête: Le champ "\Mes' est d'un type inconnu".

    Voici la requête que j'essaye d'exécuter

    INSERT INTO Album ( TitreAlbum, AuteurAlbum, TypeAuteur, ImageFace, ImageDos )
    VALUES ("Avant Que L'Ombre", "Mylène Farmer", "Artiste", "D:\Mes Images\Jaquettes\Albums\Mylène Farmer - Avant que l'ombre - front.jpg", "D:\Mes Images\Jaquettes\Albums\Mylène Farmer - Avant que l'ombre - back.jpg");

    Voici le schéma de la table Album
    (NumAlbum (NuméroAuto), TitreAlbum (Texte 50), AuteurAlbum (Texte 50), TypeAuteur (Texte 50), ImageFace (Texte 255), ImageDos (Texte 255))

    Je ne comprend pas d’où viens l’erreur, est ce que quelqu’un pourrait m’éclairer.

    Merci d'avance

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    sauf erreur de ma part, le double point est réservé pour l'utilisation de paramètres renseignés via ParamByName.
    Ex. : "SELECT * FROM emp WHERE ename = :name"

    Quant à une solution ... je tenterai de voir si le : peut être échappé ou alors je mettrais les valeurs en paramètre.

    Bon courage

    Eric

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je te suit pas trop là.

    Mais ce que je ne comprend, pas, c'est que la requête fonctionne sous access, alors que là non.

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Dans ta requête, le BDE interprète toute chaîne commençant par un double point comme un paramètre de la requête.

    Dans ton code, il a donc l'air de considérer \Mes comme un paramètre puisqu'il est précédé d'un :
    Il s'attend donc à ce que tu fournisses à ton TQuery une valeur pour ce paramètre.


    Essaye quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Album ( TitreAlbum, AuteurAlbum, TypeAuteur, ImageFace, ImageDos )
    VALUES (:TitreAlbum, :AuteurAlbum, :TypeAuteur, :ImageFace, :ImageDos);
    Puis va renseigner les valeurs dans la propriété Params.

    En espérant que ca t'aide

    Eric

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    C'est bon ca marche
    Je n'avais pas tout compris concernant les params, mais j'ai regardé dans l'aide et j'ai trouvé.

    Encore Merci pour ton aide

    Pour info pour aider ceux qui aurait le même problème que moi, voilà la solution

    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
     
    // On affecte la requête
    Requete->SQL->Clear();
    Requete->SQL->Add("INSERT INTO Album (TitreAlbum, AuteurAlbum, TypeAuteur, ImageFace, ImageDos)");
    Requete->SQL->Add("VALUES (:Titre, :Auteur, :TypeAuteur, :ImageFace, :ImageDos)");
     
    // On affecte les paramètres
    Requete->Params->Items[0]->AsString = Titre;
    Requete->Params->Items[1]->AsString = Auteur;
    Requete->Params->Items[2]->AsString = TypeAuteur;
    Requete->Params->Items[3]->AsString = CheminFace;
    Requete->Params->Items[4]->AsString = CheminDos;
     
    // On exécute la requête
    Requete->ExecSQL();

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Après une insertion moi j'ai le problème d'avoir à chaque fois une boîte de dialogue qui demande à l'utilisateur de confirmer l'ajout.

    Comment faire pour forcer cet ajout, pour shunter cette boîte ?

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

Discussions similaires

  1. [ADO.net] insertion dans une base Access
    Par nightcyborg dans le forum C#
    Réponses: 12
    Dernier message: 01/09/2009, 12h40
  2. Requête d'insertion dans une base de données
    Par Kalion dans le forum VB.NET
    Réponses: 5
    Dernier message: 25/02/2009, 13h45
  3. Erreur insert dans une base Access
    Par erce78 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/09/2008, 14h21
  4. [SQL] Problème de requête d'insertion dans une base SAGE
    Par Swapyyy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/07/2008, 10h14
  5. [C#] Insertion dans une base Access .mdb
    Par borgfabr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/03/2005, 15h30

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