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

Requêtes et SQL. Discussion :

"Type de données incompatible dans l'expression du critère" cache une autre erreur?


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut "Type de données incompatible dans l'expression du critère" cache une autre erreur?
    Bonjour,
    Il y a deja pas mal de posts sur cette erreur mais impossible de résoudre la mienne.
    Voici une requête que j'execute sur une base de donnée Access 2007

    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
     
     
    string query = "INSERT INTO t_outgoingcalls "
                     + "(CallingDate, MotifId, UtilisateurId, AgendaId) "
                     + "SELECT @CallDate, @MotifId, UtilisateurId, (SELECT AgendaId FROM t_medecins WHERE Nom = @DrName) "
                     + "FROM t_utilisateurs WHERE Utilisateur = @User";
     
    // ouverture connexion
    connexion.Open();
     
    OleDbCommand CommandAdd = new OleDbCommand(query, connexion);
    CommandAdd.Parameters.Add("@CallDate", OleDbType.Date).Value = DateTime.Now;
    CommandAdd.Parameters.Add("@MotifId", OleDbType.Integer).Value = motif;
    CommandAdd.Parameters.Add("@DrName", OleDbType.Char).Value = drName;
    CommandAdd.Parameters.Add("@User", OleDbType.Char).Value = user;
    La requète est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO t_outgoingcalls (CallingDate, MotifId, UtilisateurId, AgendaId) SELECT @Date, @MotifId, UtilisateurId, (SELECT AgendaId FROM t_medecins WHERE Nom = @DrName) FROM t_utilisateurs WHERE Utilisateur = @User
    L'execution retourne "type de données incompatible dans l'expression du critère"

    C'est le paramètre @DrName qui pose problème car si on met la valeur de DrName en dûr ( WHERE Nom = 'blabla' ) la requete s'execute sans problème.
    La variable drName est une string, et le champ Nom est de type Texte.

    Pouvez-vous m'aider?

    Merci,
    Guillaume

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string query = "INSERT INTO t_outgoingcalls "
                     + "(CallingDate, MotifId, UtilisateurId, AgendaId) "
                     + "SELECT @CallDate, @MotifId, UtilisateurId, (SELECT AgendaId FROM t_medecins WHERE Nom = '" & @DrName & "') "
                     + "FROM t_utilisateurs WHERE Utilisateur = '" & @User & "' ";

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut pc75,
    Merci pour ta réponse mais j'execute ce code en C#, donc ta solution de peut pas fonctionner puisque l'on obtient une erreur "User et DrName n'existent pas dans le contexte actuel"

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Tu as essayé d'autres Type, du style "VarChar"... ?


  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Oui j'ai essayé quasiment tous les types... Mais c'est en desespoir de cause puisque je sais pertinament que ma variable est une "string" et mon champ un "texte"...

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 87
    Points : 80
    Points
    80
    Par défaut
    a tout hasard:
    as tu essayé cette syntaxe?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO t_outgoingcalls (CallingDate, MotifId, UtilisateurId, AgendaId) SELECT @Date, @MotifId, UtilisateurId, (SELECT AgendaId FROM t_medecins WHERE Nom =" & @DrName & ") FROM t_utilisateurs WHERE Utilisateur = @User
    tu as quoi dans ta fenetre de debuggage?

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut tous le monde,

    giloo(94)> permet moi de douter fortement que le texte mis entre parenthèses soit interprété convenablement...

    et avec:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO t_outgoingcalls
      (CallingDate, MotifId, UtilisateurId, AgendaId)
    SELECT
      @CallDate,
      @MotifId,
      UtilisateurId,
      (SELECT First(AgendaId) FROM t_medecins WHERE Nom = @DrName)
    FROM t_utilisateurs WHERE Utilisateur = @User
    ?
    dans tous les cas cela ne lui fera pas de mal.

    après essai, pas de soucis chez moi avec ce genre de requete paramétrée.


  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour Vodiem,
    Je n'ai pas encore eu l'occasion de tester ta requête mais si j'ai bien compris,
    le First() va retourner seulement le premier enregistrement?
    Mais ce qui m'embête c'est que AgendaId est un unique dans t_medecins donc il n'y a forcement qu'un enregistrement par AgendaId.

    Mais j'essaye des que possible,
    Merci

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    si tu n'as qu'un enregistrement la requete renvoie correctement la réponse, s'il peut retourner plusieurs enregistrements cela provoquera une erreur.
    dans tous les cas comme je te l'ai dit la requete fonctionne correctement chez moi en dehors de ce "soucis".
    ce qui veut dire qu'il faut peut être chercher ailleurs, peut être le type de tes données.


  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Drummkit Voir le message
    le First() va retourner seulement le premier enregistrement?
    Mais ce qui m'embête c'est que AgendaId est un unique dans t_medecins donc il n'y a forcement qu'un enregistrement par AgendaId.
    Oui mais pour un Nom donné WHERE Nom = @DrName tu peux avoir plusieurs AgendaId correspondant.

    Et puisque

    mais j'execute ce code en C#
    tu peux aussi aller voir dans le forum correspondant.

Discussions similaires

  1. Requête: type de donnée incompatible dans l'expression du critère
    Par abambad dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/10/2007, 15h48
  2. Réponses: 5
    Dernier message: 31/08/2007, 13h01
  3. Réponses: 8
    Dernier message: 20/06/2007, 14h38
  4. Réponses: 7
    Dernier message: 22/08/2006, 17h10
  5. Réponses: 3
    Dernier message: 22/05/2006, 19h23

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