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 :

Erreur 3075 en exécutant une requête ajout


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Erreur 3075 en exécutant une requête ajout
    Bonjour,

    En exécutant le code suivant :

    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
    Private Sub QUITER_Click()
    Me.Refresh
    DoCmd.SetWarnings False
    CurrentDb.Execute ("INSERT INTO BATISSE ( BATISS_NUM ) " & _
                        "SELECT ID_ADRESSE " & _
                        "FROM ADRESSE " & _
                        "WHERE (ID_ADRESSE= " & Me.ID_ADRESSE & ")")
     
    CurrentDb.Execute ("INSERT INTO EXPERTISE ( BATISSE_NUM ) " & _
                        "SELECT ID_ADRESSE " & _
                        "FROM ADRESSE " & _
                        "WHERE (ID_ADRESSE= " & Me.ID_ADRESSE & ")")
     
    CurrentDb.Execute ("INSERT INTO ARRETE ( BATISSE_NUM ) " & _
                        "SELECT ID_ADRESSE " & _
                        "FROM ADRESSE " & _
                        "WHERE (ID_ADRESSE= " & Me.ID_ADRESSE & ")")
    DoCmd.Requery
    DoCmd.SetWarnings True
    DoCmd.Close acForm, "F_SAISI_ADRESSE", acSaveYes
    End Sub



    je reçois le message suivant :






    Ce message se génère seulement si en tape rien et on Click sur le bouton"QUITTER" lié à cet événement, sinon les requêtes INSERT INTO fonctionnent très bien.
    Merci de bien vouloir m'aider s'il vous plaît.
    Je peux vous envoyez mon petit projet de BD qui grâce à vous il est presque achevé.
    Merci d'avance.

  2. #2
    Membre émérite
    Bonjour,

    A mon avis il y a un ID_ADRESSE erroné dans la table. Pour voir lequel un moyen est d'afficher les requêtes (Debug.Print) pour voir exactement où cela coince, par exemple ainsi.
    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
    Private Sub QUITER_Click()
        Dim sWh As String
        sWh = "SELECT ID_ADRESSE FROM ADRESSE WHERE (ID_ADRESSE= " & Me.ID_ADRESSE & ")"
        Me.Refresh
        DoSql "INSERT INTO BATISSE ( BATISS_NUM ) " & sWh
        DoSql "INSERT INTO EXPERTISE ( BATISSE_NUM ) " & sWh
        DoSql "INSERT INTO ARRETE ( BATISSE_NUM ) " & sWh
        DoCmd.Requery
        DoCmd.Close acForm, "F_SAISI_ADRESSE", acSaveYes
    End Sub
     
    Sub DoSql(sSQL As String)
        Debug.Print sSQL
        CurrentDb.Execute sSQL, dbFailOnError
    End Sub

    Le Debug.Print pourra être supprimé une fois tout au point.

    Vous pourrez copier le texte de la requête affichée dans une fenêtre de création de requête, d'abord en affichage SQL puis en affichage Création pour voir le problème.

    Par ailleurs, est-ce que vous n'essayez pas de faire simplement ceci:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub QUITER_Click()
        Dim sValue As String
        sValue = " ( BATISS_NUM ) VALUES (" & Me.ID_ADRESSE & ")"
        Me.Refresh
        DoSql "INSERT INTO BATISSE" & sValue
        DoSql "INSERT INTO EXPERTISE" & sValue
        DoSql "INSERT INTO ARRETE" & sValue
        DoCmd.Requery
        DoCmd.Close acForm, "F_SAISI_ADRESSE", acSaveYes
    End Sub


    Bonne continuation.

  3. #3
    Nouveau membre du Club
    Bonjour EricDgn
    j'ai commencé par tester le dernier code que vous avez bien voulu me proposer mais ça donne ce qui suit :


  4. #4
    Membre expert
    il y a une erreur qd Me.ID_ADRESSE est vide.

    Je pense que le mieux est de teester qu'il est renseigné avant de lancer tes requetes INSERT
    par exemple par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if len(nz(Me.ID_ADRESSE)) > 0 then
    ' alors j'exécute les INSERT
       ...
     
    end if
    "Always look at the bright side of life." Monty Python.

  5. #5
    Membre émérite
    DoSql est la routine donnée dans les lignes 12 à 15 !
    Cdt

  6. #6
    Nouveau membre du Club
    Bonjour EricDgn

    Je vous remercie pour votre soutien à moi.

    J'ai essayé mais çà bloque toujours :



    Par contre j'ai réussi à alimenter uniquement la table "BATISSE" en utilisant le code suivant :

    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
    Private Sub BATISSE_ADRESSE_BeforeUpdate(Cancel As Integer)
     
    If DCount("*", "ADRESSE", "[BATISSE_ADRESSE]='" & BATISSE_ADRESSE & "'") > 0 Then
    MsgBox "Cette adresse existe déjà..."
    Me.Undo
    Cancel = True
    End If
    End Sub
     
    Private Sub ENREGISTRER_CLICK()
    If IsNull(Me.BATISSE_ADRESSE.Value) Then
    MsgBox "Veuillez saisir une adresse..."
    Me.Undo
    Cancel = True
    Else
    Dim BATISSE As DAO.Recordset
    Set BATISSE = CurrentDb.OpenRecordset("SELECT * FROM [BATISSE]")
    BATISSE.AddNew
    BATISSE![BATISS_NUM] = Me.ID_ADRESSE.Value
    DoCmd.Requery
    BATISSE.Update
    BATISSE.Close
    Set BATISSE = Nothing
    End If
    End Sub
     
    Private Sub QUITTER_Click()
    DoCmd.Close acForm, "F_SAISI_ADRESSE", acSaveYes
    End Sub



    Est cela marche très très bien, sans plus aucun message d'erreur, sauf que je ne sais pas comment faire pour alimenter simultanément les trois tables avec ce même code.

    Si vous pouviez m'adaptez ce code pour les trois tables, çà serait Top.
    Et merci infiniment.

  7. #7
    Nouveau membre du Club
    Bonjour,

    Je remercie tous le monde.
    Enfin j'ai réussi mon formulaire, voici le code:
    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
    Option Compare Database
    Private Sub BATISSE_ADRESSE_BeforeUpdate(Cancel As Integer)
     
    If DCount("*", "ADRESSE", "[BATISSE_ADRESSE]='" & BATISSE_ADRESSE & "'") > 0 Then
    MsgBox "Cette adresse existe déjà..."
    Me.Undo
    Cancel = True
    End If
    End Sub
     
    Private Sub ENREGISTRER_CLICK()
    If IsNull(Me.BATISSE_ADRESSE.Value) Then
    MsgBox "Veuillez saisir une adresse..."
    Me.Undo
    Cancel = True
    Else
    Dim BATISSE As DAO.Recordset
    Dim EXPERTISE As DAO.Recordset
    Dim ARRETE As DAO.Recordset
    Set BATISSE = CurrentDb.OpenRecordset("SELECT * FROM [BATISSE]")
    Set EXPERTISE = CurrentDb.OpenRecordset("SELECT * FROM [EXPERTISE]")
    Set ARRETE = CurrentDb.OpenRecordset("SELECT * FROM [ARRETE]")
    BATISSE.AddNew
    EXPERTISE.AddNew
    ARRETE.AddNew
    BATISSE![BATISS_NUM] = Me.ID_ADRESSE.Value
    EXPERTISE![BATISSE_NUM] = Me.ID_ADRESSE.Value
    ARRETE![BATISSE_NUM] = Me.ID_ADRESSE.Value
    DoCmd.Requery
    BATISSE.Update
    EXPERTISE.Update
    ARRETE.Update
    BATISSE.Close
    EXPERTISE.Close
    ARRETE.Close
    Set BATISSE = Nothing
    Set EXPERTISE = Nothing
    Set ARRETE = Nothing
    End If
    End Sub
     
    Private Sub QUITTER_Click()
    DoCmd.Close acForm, "F_SAISI_ADRESSE", acSaveYes
    End Sub


    Pour information, si ça intéresse quelqu'un; pour le champ en question, j'ai fait la propriété "Null interdit" sur "non" et dans mon code ci-dessus j'ai ajouté la condition :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If IsNull(Me.BATISSE_ADRESSE.Value) Then
    MsgBox "Veuillez saisir une adresse..."
    Me.Undo
    Cancel = True


    Merci EricDgn ainsi que tous les modérateurs de ce merveilleux site.

###raw>template_hook.ano_emploi###