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

  1. #1
    Membre confirmé
    Erreur 1064 sur une requête MySql
    Bonjour,

    Je suis totalement débutant en MySql et j'ai une erreur 1064 que je n'arrive pas à régler.

    Ma requête formatée :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    INSERT INTO participant (nom,prenom,dateNaissance,idStatut,dateEmbauche,civil,isReferenced,isRsp,idAccess,idUser) VALUES ('CASTRIC' ,'David' ,19741223 ,1 , ,'Monsieur' ,1 ,0 ,59028 ,131)


    Le message d'erreur :
    Numéro d'erreur = <1064>.
    Message d'erreur :
    Erreur de syntaxe près de ''Monsieur' ,1 ,0 ,59028 ,131)' à la ligne 1
    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Modérateur

    Il faut passer une valeur à toutes les colonnes.

    Ici, c'est apparemment la colonne dateEmbauche qui ne reçoit pas de valeur.
    Dans ce cas, on ne laisse pas un espace entre deux colonnes mais on passe le marqueur null comme valeur. Ou on omet la colonne non renseignée de la liste des colonnes.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre confirmé
    Merci Al1_24,

    C'est exactement ça.
    Cela suppose donc de contrôler toutes les valeurs avant ou il y a une solution plus simple pour éviter ça ?

    Merci de ton aide
    Les solutions les plus simples sont les plus efficaces

  4. #4
    Membre confirmé
    Bon, j'ai une autre erreur maintenant...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM participant WHERE participant.num = max(participant.num)
    Les solutions les plus simples sont les plus efficaces

  5. #5
    Membre confirmé
    Trouvé,

    J'ai remplacé par :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    "SELECT MAX(num) FROM participant"
    Les solutions les plus simples sont les plus efficaces

  6. #6
    Membre confirmé
    Nouvelle erreur dans ma syntaxe.

    J'ai besoin de tous les champs de la table "participant" en sélectionnant uniquement le "num" le plus élevé

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    "SELECT *, MAX(num) FROM participant"
    Les solutions les plus simples sont les plus efficaces

  7. #7
    Expert éminent sénior
    Salut lololebricoleur.

    Au lieu de déposer un message à chaque erreur, vous devriez vous former à l'apprentissage des bases de données et en particulier le langage SQL.

    Pour sélectionner toutes les lignes dont la colonne num possède la valeur la plus grande, voici comment faire :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    select  *
    from  `participant`
    where num = (  select max(num) from `participant` );


    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre confirmé
    Merci de votre aide,

    Artemus, je prend note de votre conseil mais je manque de temps parfois, dsl.
    Et par ailleurs et sauf erreur, j'ai bien l'impression que les requête SQL ne sont pas interprétée de la même façon selon le moteur utilisé. Je me trompe ?

    Et parfois également, il y a des cas qui semblent simple mais qui provoque des erreurs et pour lesquels je ne trouve aucun explication, y compris dans les tutos ou ouvrage dédié.

    Par exemple, cette requête provoque une erreur 1064 avec pour seule info "Erreur de syntaxe près de 'EPARGNE N° 0054566',libTTC = 'PARTICIPATION (NET)',raison = 'MENUISERIE DUVAL (' à la ligne 1"...

    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE facture SET ref = 'fac.2016.10.1079',stage = 'FEEBAT (RENOVE)' , numSession = 5694 , stagiaire = 0,lieu = 'SCI SERALBAT (HEROUVILLE-SAINT-CLAIR)',dates = '04/10/2016 AU 06/10/2016',dureeH = 21,dureeJ= 0,type = 'FACTURE ACQUITTEE',ttc = 600 ,date = 20161010, echeance = 20161010,obs = 'FACTURE REGLEE LE 03/10/2016 PAR CHEQUE CAISSE D'EPARGNE N° 0054566',libTTC = 'PARTICIPATION (NET)',raison = 'MENUISERIE DUVAL (ENT)',adresse = 'Rue des Tanneries',adresse2 = '', cp = 14170, ville = 'SAINT PIERRE SUR DIVES', idUser = 3 WHERE num=16101079


    Ben là, dans un cas comme ça, j'ai beau chercher, je ne trouve pas.
    Les solutions les plus simples sont les plus efficaces

  9. #9
    Membre confirmé
    Merci Al1_24 !!!

    Grâce à votre recommandations sur l’utilisation des balises, recommandations que je viens d'appliquer en utilisant notamment "CODE=sql", je découvre que la mise en couleur des différentes parties de ma requête révèle une erreur !
    Très pratique pour détecter certaines erreurs de syntaxe.

    Merci encore.

    PS : Artemus, vous avez raison, je dois me former
    Les solutions les plus simples sont les plus efficaces

  10. #10
    Expert éminent sénior
    Bonjour,

    Comme votre requête n'est pas mise en forme, tout est sur une seule ligne et du coup le diagnostic ne vous aide pas beaucoup 'erreur sur la ligne 1"...
    Pour faciliter la maintenance et être mieux guidé, un peu de mise en forme est utile.

    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
    UPDATE facture
       SET ref = 'fac.2016.10.1079'
         , stage = 'FEEBAT (RENOVE)' 
         , numSession = 5694 
         , stagiaire = 0
         , lieu = 'SCI SERALBAT (HEROUVILLE-SAINT-CLAIR)'
         , dates = '04/10/2016 AU 06/10/2016'
         , dureeH = 21
         , dureeJ= 0
         , type = 'FACTURE ACQUITTEE' 
         , ttc = 600 
         , date = 20161010      
         , echeance = 20161010
         , obs = 'FACTURE REGLEE LE 03/10/2016 PAR CHEQUE CAISSE D'EPARGNE N° 0054566'
         , libTTC = 'PARTICIPATION (NET)'
         , raison = 'MENUISERIE DUVAL (ENT)'
         , adresse = 'Rue des Tanneries'
         , adresse2 = ''
         , cp = 14170
         , ville = 'SAINT PIERRE SUR DIVES'
         , idUser = 3 
    WHERE num=16101079

    Ce code beaucoup plus facile à lire met en évidence que la colonne "date" utilise un nom réservé SQL, auquel cas il faut l'encadrer de quotes inversées ou de doubles quotes
    Il est prudent d'ajouter un espace après chaque virgule
    On voit aussi que la colonne obs contient une quote d'où la fin de chaîne de caractères et probablement l'erreur signalée
    On voit également que les colonnes "date" et "echeance" sont alimentées par des valeurs numériques, est-ce normal ?
    On voit enfin que la base de données est très mal modélisée, mais ce n'est pas le sujet du jour

  11. ###raw>post.musername###
    Expert éminent sénior
    Salut lololebricoleur.

    Citation Envoyé par lololebricoleur
    il y a des cas qui semblent simple mais qui provoque des erreurs et pour lesquels je ne trouve aucun explication
    L'erreur que vous rencontrez concerne l'apostrophe dans une chaîne de caractères.
    Il n'y a que deux solutions à ce genre de problème.
    Par exemple vous avez la chaîne "l'été à la page".
    Soit vous la remplissez ainsi : "l''été à la page" en doublant l'apostrophe,
    Soit vous la remplissez ainsi : "l\'été à la page" en utilisant le caractère escape.

    @+
      0  0

  12. #12
    Membre confirmé
    Merci Artemus,

    En effet, c'était un problème d'apostrophe.
    J'ai une procédure qui traite cela mais elle n'était pas appelée ici.
    Problème résolu.
    La mise en forme sur le forum m'a fait apparaitre l'erreur comme un nez au milieu du visage, merci bal1_24 ;-)

    escartefigue,
    Je comprend l'intérêt de la mise en forme dans votre exemple mais les erreurs apparaissent à l'éxécution et je récupère l'information par mail.
    Donc et sauf erreur de ma part, à l'éxécution de la requête SQL, la mise en forme n'est plus et la requête forme une chaine de caractères continu non ?

    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

###raw>template_hook.ano_emploi###