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

Langage SQL Discussion :

Erreur SQL ODBC


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Par défaut Erreur SQL ODBC
    Bonjour a tous voici mon erreur :
    "Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans l'instruction INSERT INTO., SQL state 37000 in SQLExecDirect in **** on line 156 "
    et voici la ligne 156 et celle d'avant : "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "INSERT INTO T_TACHE (date_tache,libelle_tache,dossier_tache,client_tache,detail_tache,valider_tache,yannick,aurelien,robert,daniel,jonas,marielle)
    		VALUES (".$dateUS.", '".$tache."', '".$dossier."', '".$client."', '".$details."', ".$valider.", ".$yannick.", ".$aurelien.", ".$robert.", ".$daniel.",
    		".$jonas.", ".$marielle." ) " ;		
    		odbc_exec($cnx,$sql) or die('Erreur dans : '.$sql.' ');

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le nom des colonnes présage une modélisation catastrophique...

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Par défaut
    Merci pour ce sympathique message, je demande de l'aide pour une syntaxe,pour le reste on verra après . Merci par avance !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez de faire un echo sur la requête pour qu'on voit ce qui a été précisément envoyé à la base de données.

    Il faut aussi la description de la table.

  5. #5
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Le nom des colonnes présage une modélisation catastrophique...
    +1

    J'ajoute qu'on ne peut pas dire "c'est pas grave"... La modélisation, c'est la base. Si elle est mauvaise, les requêtes sont difficiles à écrire à maintenir et très lentes.

    Hé oui : c'est un métier!

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Je suis assez d'accord sur le problème de modèlisation.
    Pour ton problème de syntaxe, voilà la marche à suivre quelque soit le problème.
    Tu récupères le contenu de ta variable $sql.
    Tu exécutes cette requête (celle contenu dans $sql) directement dans ton sgbd avec l'outil approprié dans ton cas Access, et tu regardes le message d'erreur fourni qui en général est plus détaillé et plus parlant.
    Si là tu n'es pas éclairé tu nous copie le contenu de $sql et le message d'erreur obtenu dans Access.
    Et à ce moment là on pourra t'aider.

    La démarche que je viens de t'indiquer est la démarche à adopter systématiquement, si ça se trouve sans $sql il y a true (cela m'est déjà arrivé) et là c'est plutôt normal qu'access n'aime pas.

    A+
    Soazig

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Juste un peiti mot sur ce qui m'a choqué dans la structure de la base ce sont les colonnes yannick,aurelien,robert,daniel,jonas,marielle. En effet que feras-tu si daniel quitte l'équipe ou que deux autres personnes arrivent.
    En fait ce qu'il te faudrait à premiere vu c'est une table personne (id_personne, nom, prenom, etc). et une table d'association personne_tache (id_tache,id_personne), une tache pouvant être assigné à plusieurs personnes.
    Pour le reste il y a peut-être d'autres problèmes mais je ne me suis pas penchée dessus.
    Cordialement
    Soazig

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Par défaut
    c'est vrai qu'au départ je me suis dis que ce n'était pas bon de faire cela comme ca ... mais par la suite j'ai continué mon application et voila. Je pense que je vais finir les deux trois autres modifications que j'ai a faire dessus et je modifier ma base ... ou faut il que je recommence directement ma base parce que j'ai déja des enregistrements dessus ...

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il vaut mieux recommencer tant que c'est simple, après c'est à vous de voir si vous pouvez le faire.

    Vos données ne seront de toutes façons pas perdues, vous pourrez alimenter les nouvelles tables avec celles que vous avez déjà.

  10. #10
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Par défaut
    apparement j'ai regardé si je pouvais modifier cela ne semble pas énorme énorme ...

  11. #11
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Par défaut demande de conseil
    re bonjour à tous !
    j'ai donc modifier ma BDD et voilà ce cela donne :
    *table employe / tache / date et t_tache_employe(id_employe,id_tache,date).

    J'utilise la mise a jour en cascade. Comment utiliseriez-vous l'update ? l'insert ? et le delete ? Un exemple simple de chacun m'aiderais a comprendre. Merci de votre réponse.

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Titiii25 Voir le message
    j'ai donc modifier ma BDD et voilà ce cela donne :
    *table employe / tache / date
    Une table pour les dates ?
    Pour gérer un planning des tâches ? C'est bien.

    La structure des tables nous aiderait à répondre. Là on va faire des suppositions.

    et t_tache_employe(id_employe,id_tache,date).
    Evite d'appeler une colonne 'date' car c'est un mot réservé du langage SQL.

    Comment utilisez vous l'update ? C'est à dire un exemple avec ma BDD. Ex: modification d'une date ou d'une employe par rapport à une tache ?
    Avec des jointures bien sûr !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE t_tache_employe AS te
    INNER JOIN employe AS e ON te.id_employe = e.id_employe
    INNER JOIN tache AS t ON te.id_tache = t.id_tache
    SET date_tache = '2009-11-17'
    WHERE e.nom_employe = 'Titiii25'
      AND t.libelle_tache = 'Modifier BDD'
    Bien sûr, si tu connais déjà les identifiants de la tâche et de l'employés (parce que sélectionnés dans une liste sur un formulaire, lui même ayant récupéré ces idetifiants pour les mettre en valeur des éléments des listes déroulantes), tu n'as même pas besoin de jointure et tu UPDATE directement la table t_tache_employe.

    J'ai fait pour qu'il y ait mise a jour des données en cascade.
    merci de votre réponse !
    La mise à jour en cascade concerne les clé étrangères.
    Si tu modifies la valeur d'une clé primaire dans une table, les clés étrangères qui pointent sur cette clé primaire sont également modifiées.
    Comme apparemment tu as eu l'excellente idée d'utiliser des id anonymes et probablement de type entier, ces valeurs ne changeront jamais donc le ON UPDATE CASCADE ne sert à rien.

    Par contre, le ON DELETE CASCADE peut servir, notamment si tu supprimes une tâche : il faut aussi supprimer les lignes correspondantes dans la table t_tache_employe et cette instruction le fait automatiquement.

    J'espère par contre que tu ne supprimes pas tes employés ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Par défaut demande de conseil
    re !
    Merci pour les conseils! Par contre dans ma situation une tache peut concerné un ou plusieurs employés à une ou plusieurs dates. Par exemple lorsque je veux modifier ma tache 5690... je veux rajouter quelqu'un dessus ou ôter quelqu'un ? Pareil avec les dates ? Comment cela ferait dans un exemple ?
    Voici la structure de ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    T_EMPLOYE (id_employe,nom_employe,prenom_employe,initiale_employe)
    T_TACHE(id_tache,dossier_tache,client_tache,detail_tache,valider_tache)
    T_DATE(date)
    T_TACHE_EMPLOYE(#id_tache,#id_employe,#date).
    PS : pour la table employe,dossier_tache,detail_tache et client_tache proviennent d'une autre base ! Ce n'est pas une problème d'analyse.Il ne faut pas y faire attention. Merci

  14. #14
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Titiii25 Voir le message
    re !
    Par contre dans ma situation une tâche peut concerner un ou plusieurs employés à une ou plusieurs dates. Par exemple lorsque je veux modifier ma tâche 5690... je veux rajouter quelqu'un dessus ou ôter quelqu'un ? Pareil avec les dates ? Comment cela ferait dans un exemple ?
    Ajouter quelqu'un à une tâche revient à ajouter une ligne à la table T_TACHE_EMPLOYE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T_TACHE_EMPLOYE(id_tache, id_employe, date)
    VALUES(5690, 12, '2009-11-17')
    Oter quelqu'un d'une tâche revient à supprimer une ligne de la table T_TACHE_EMPLOYE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM T_TACHE_EMPLOYE
    WHERE id_tache = 5690
      AND id_employe = 12
    Pour modifier une date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T_TACHE_EMPLOYE
    SET date = '2009-11-25'
    WHERE id_tache = 5690
      AND id_employe = 12
    etc.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Erreur SQL Server avec un ODBC Membership provider
    Par Jeremy9cinq dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/05/2012, 10h50
  2. Réponses: 1
    Dernier message: 30/12/2010, 17h50
  3. [ODBC] Erreur SQL ODBC
    Par Titiii25 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/11/2009, 11h40
  4. [ODBC] erreur SQL pour les unions qui renvoient vide
    Par fabriceMerc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/11/2003, 11h06
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

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