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 :

[A-03] Problème de syntaxe dans l'instruction INSERT TO


Sujet :

Requêtes et SQL.

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut [A-03] Problème de syntaxe dans l'instruction INSERT TO
    Bonjour, j'ai un problème de syntaxe dans mon instruction INSERT TO suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "insert into tbl_HistoriqueMaintenancePréventive values (" & id_HistoriqueMaintenancePréventive & ", '" & ID_MaintenancePréventive & "' ," & ID_Personnel & "," & Date & ", " & DatePrevueInitialement & ", '" & Commentaire & "', " & DuréeIntervention & " )"
     
    odb.Execute (sql)
    Je pense que le problème vient du fait que en mode débugage en analisant champs par champs, " & id_HistoriqueMaintenancePréventive & "=Null.

    Voila comment ce dernier est obtenu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sql = "Select Max(ID_HistoriqueMaintenancePréventive) from tbl_HistoriqueMaintenancePréventive"
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
     
       If oRst.RecordCount > 0 Then
        id_HistoriqueMaintenancePréventive = oRst.Fields(0).value + 1
        Else
        id_HistoriqueMaintenancePréventive = 1
        End If
    Ce qui est bizard, c'est que lors de l'exectution, le code passe par le then, ce qui signifie que id_HistoriqueMaintenancePréventive, ne devrais pas être égal à Null?

    Je suis un peu dérouté là...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    Salut,

    juste pour être sûr: id_HistoriqueMaintenancePréventive n'est pas une clé primaire auto-incrémentée?...

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Non c'est une donnée de type numérique

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    et quel est le message d'erreur?

  5. #5
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Erreur 3134

    Erreur de syntaxe dans l'instruction INSERT TO

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    et avant le .execute, tu peux mettre un msgbox sql et nous donner le contenu de ta requête, stp

  7. #7
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Tu présente sa comment l'insertion de la MsgBox?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sql = "insert into tbl_HistoriqueMaintenancePréventive values (" & id_HistoriqueMaintenancePréventive & ", '" & ID_MaintenancePréventive & "' ," & ID_Personnel & "," & Date & ", " & DatePrevueInitialement & ", '" & Commentaire & "', " & DuréeIntervention & " )"
     
    msgbox sql
     
    odb.Execute (sql)

  9. #9
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Voila la fenetre en pièce jointe

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    oki, y' plein de champs vide dans ta requête, d'où les erreurs.

    tu peux me dire ce que donne la msgbox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sql = "Select Max(ID_HistoriqueMaintenancePréventive) from tbl_HistoriqueMaintenancePréventive"
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
     
       If oRst.RecordCount > 0 Then
    msgbox oRst.Fields(0).value
        id_HistoriqueMaintenancePréventive = oRst.Fields(0).value + 1
        Else
        id_HistoriqueMaintenancePréventive = 1
        End If

  11. #11
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If oRst.RecordCount > 0 Then
    
       MsgBox oRst.Fields(0).value
    
        ID_HistoriqueMaintenancePréventive = oRst.Fields(0).value + 1
        Else
        ID_HistoriqueMaintenancePréventive = 1
        End If
    Sa ma met Utilisation incorrecte de Null

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    oki,
    tu peux essayer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sql = "Select Max(ID_HistoriqueMaintenancePréventive) As MaxId from tbl_HistoriqueMaintenancePréventive"
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
     
       If oRst.Fields("MaxId").value > 0 Then
    msgbox oRst.Fields("MaxId").value
        id_HistoriqueMaintenancePréventive = oRst.Fields("MaxId").value + 1
        Else
        id_HistoriqueMaintenancePréventive = 1
        End If

  13. #13
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Private Sub CmdValider_click()
     
    Dim ID_MaintenancePréventive As Variant, ID_Personnel As Variant, DuréeIntervention As Variant
    Dim sql As String, Commentaire As String
    Dim DateMaintenancePréventive As Date, DatePrevueInitialement As Date
    Dim oRst As DAO.Recordset
    Dim odb As DAO.Database
     
    If Me.txtIDDemande.Caption = "null" Then Exit Sub
     
    Set odb = CurrentDb
     
    ID_MaintenancePréventive = Me.txtIDDemande.Caption
     
    If Nz(Me.txtCommentaire, "") = "" Then
    Commentaire = ""
    Else
    Commentaire = Me.txtCommentaire.value
    End If
     
    Commentaire = Replace(Commentaire, "'", "''")
     
    DuréeIntervention = Me.listeDurée
     
    sql = "select * from tbl_MaintenancePréventive where id_MaintenancePréventive = " & ID_MaintenancePréventive & ";"
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
    ID_Périodicité = oRst.Fields("ID_Périodicité").value
    DatePrevueInitialement = oRst.Fields("DateProchaineIntervention").value
     
    sql = "Select NombreDeJours from tbl_Périodicité where ID_Periodicité = " & ID_Périodicité & ""
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
     
    ProchaineIntervention = oRst.Fields("NombreDeJours").value + Date
     
    sql = "Update tbl_MaintenancePréventive set DateDerniéreIntervention=#" & Date & "#, DateProchaineIntervention = #" & ProchaineIntervention & "#  where  ID_MaintenancePréventive =" & ID_MaintenancePréventive & ";"
    odb.Execute (sql)
     
    sql = "Select Max(ID_HistoriqueMaintenancePréventive) As MaxId from tbl_HistoriqueMaintenancePréventive"
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
     
       If oRst.Fields("MaxId").value > 0 Then
    MsgBox oRst.Fields("MaxId").value
        id_HistoriqueMaintenancePréventive = oRst.Fields("MaxId").value + 1
        Else
        id_HistoriqueMaintenancePréventive = 1
        End If
     
    ID_Personnel = Me.listeIntervenant
     
    sql = "insert into tbl_HistoriqueMaintenancePréventive values (" & id_HistoriqueMaintenancePréventive & ", '" & ID_MaintenancePréventive & "' ," & ID_Personnel & "," & Date & ", " & DatePrevueInitialement & ", '" & Commentaire & "', " & DuréeIntervention & " )"
     
    odb.Execute (sql)
     
    MsgBox ("Votre Intervention a été correctement enregistrée")
    DoCmd.Close
    Form_SignalerMaintenancePreventiveTerminé.Refresh
     
    End Sub
    Je te remet tout pour voir si j'ai mis sa au bon endroit, mais du coup, sa bloque directement sur le sql, et l'erreur du "Erreur de syntaxe dans l'instruction INSERT TO" Revient de plus belle...


  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    tu peux me donner TOUS les noms de champs et leur format de la table tbl_HistoriqueMaintenancePréventive, stp

Discussions similaires

  1. [AC-2003] Erreur de syntaxe dans l'instruction INSERT TO
    Par moilou2 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/08/2009, 14h21
  2. [AC-2000] Erreur de syntaxe dans l instruction INSERT TO
    Par wa3ete9_86 dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/05/2009, 17h09
  3. Erreur de syntaxe dans l'instruction INSERT TO
    Par moilou2 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 09/10/2008, 16h12
  4. Erreur de syntaxe dans l'instruction INSERT INTO
    Par doolar dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2008, 15h37
  5. Erreur de syntaxe dans l'instruction INSERT INTO
    Par logiciel_const dans le forum Bases de données
    Réponses: 8
    Dernier message: 19/03/2008, 10h57

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