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

VBA Access Discussion :

[A-03] Insert Into qui n'insère PAS.


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut [A-03] Insert Into qui n'insère PAS.
    Bonjour as tous, j'ai un soucis au niveau d'une requête qui n'insere pas les données que je veux.

    La syntaxe est bonne, quand je l'execute pas a pas, il n'y a aucun problème, mais quand je consulte la table, les enregistrements n'ont pas été inserés....

    Je récupere les données inserées dans un fichier texte. Aussi est ce le fait fait que certain champs sont des clés étrangères d'autre table vide...

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Private Sub Charger_Click() 'Chargement du fichier referentiel
    
        Dim toto
        Dim objet As Object, fichier As Object
        Dim chemin As String
        Dim ean, designation, Rayon, magasin, txtva
        
        Dim pa, pv As Double
        
        
        If Me.FichierReferentiel.Value <> "" Then
            toto = MsgBox("Voulez vous charger le fichier " & Me.FichierReferentiel & " ?", vbYesNo)
                Select Case toto
                    Case vbYes ' je désire charger le fichier
                        If Me.AcceptRefActuel.Value = -1 Then ' supprimer tout de la table Treferentiel
                            'CurrentDb.Execute "delete from TReferenciel" 'je supprimer tout de la table TReferenciel
                            
                                
                                Set objet = CreateObject("Scripting.FilesystemObject")
                                chemin = Me.FichierReferentiel.Value ' je repere le chemin
                                Set fichier = objet.opentextfile(chemin)
                                
                                'insere dans la table TReferenciel les valeurs du fichier texte
                                Do While fichier.atendofstream <> True ' si je ne suis pas a la fin du fichier
                                    ligne = fichier.readline ' lit ligne par ligne readaline = lit toute les ligne
                                    ean = Mid(ligne, 1, 13)
                                    designation = Mid(ligne, 15, 58)
                                    Rayon = Mid(ligne, 74, 3)
                                    magasin = Mid(ligne, 78, 3)
                                    pa = Mid(ligne, 83, 10)
                                    pa = Format(pa, "##,##0.00")
                                    pv = Mid(ligne, 93, 12)
                                    pv = Format(pv, "##,##0.00")
                                    txtva = Mid(106, 2)
                                    
                                    ' insersion dans la table
                                    
                                     CurrentDb.Execute "insert into TReferenciel " & _
                                          "(Ean,Designation,Rayon,Magasin,PA,PV,id_txtva) " & _
                                          "values ('" & ean & "','" & designation & "','" & Rayon & "','" & magasin & "','" & pa & "','" & pv & "', " & txtva & " )"        
                                    
                                Loop
                                fichier.Close ' je ferme le fichier
                                
                         ElseIf Me.AcceptRefActuel.Value = 0 Then
                                '*****MAJ*****
                              
                                Set objet = CreateObject("Scripting.FilesystemObject")
                                Set fichier = objet.opentextfile(chemin)
                                
                                
                                Do While fichier.atendofstream <> True
                                ligne = fichier.readline
                                        ean = Mid(ligne, 1, 13)
                                          Set rst = db.OpenRecordset("select * from TReferenciel where rst!ean =" & ean & " ")
                                    If rst.BOF Then ' si mon enregistrement n'existe pas alors
                                    
                                          designation = Mid(ligne, 15, 58)
                                          Rayon = Mid(ligne, 74, 3)
                                          magasin = Mid(ligne, 78, 3)
                                          pa = Mid(ligne, 83, 10)
                                          pv = Mid(ligne, 93, 10)
                                          txtva = Mid(106, 2)
                                          
                                          bd.Execute "insert into TReferenciel " & _
                                          "(Ean,Designation,Rayon,Magasin,PA,PV,id_txtva) " & _
                                          "values ('" & ean & "','" & designation & "','" & Rayon & "','" & magasin & "'," & pa & "," & pv & ", " & txtva & " )"
            
                                    End If
                                Loop
                                fichier.Close
                         End If
                End Select
                                
                        
        Else
            MsgBox "Aucun Fichier selectionner", vbExclamation
        End If
    End Sub

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonsoir,

    Apparemment ta requête fonctionne avec DAO.

    Citation Envoyé par Milyshyn76 Voir le message
    j'ai un soucis au niveau d'une requête qui n'insere pas les données que je veux.

    La syntaxe est bonne, quand je l'execute pas a pas, il n'y a aucun problème, mais quand je consulte la table, les enregistrements n'ont pas été inserés....

    Je récupere les données inserées dans un fichier texte. Aussi est ce le fait fait que certain champs sont des clés étrangères d'autre table vide...
    Dans l'aide en ligne la méthode Execute, on apprend ceci:
    Citation Envoyé par Aide en ligne DAO

    Méthode Execute

    [...]

    Dans un espace de travail Microsoft Jet, si vous fournissez une instruction SQL dont la syntaxe est correcte et si vous disposez des autorisations appropriées, la méthode Execute n'échoue jamais, même si aucune ligne ne peut être modifiée ou supprimée. Utilisez donc toujours l'option dbFailOnError avec la méthode Execute pour exécuter une requête de mise à jour ou de suppression. Cette option engendre une erreur d'exécution et révoque toutes les modifications réussies si l'un des enregistrements concerné est verrouillé et ne peut être mis à jour ou supprimé.
    Si tu modifies ton code avec l'option dbFailOnError cela provoquera une erreur et tu pourras alors lire Err.Description pour en savoir plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim SQL As String
     
    SQL = "insert into TReferenciel " & _
        "(Ean,Designation,Rayon,Magasin,PA,PV,id_txtva) " & _
        "values ('" & ean & "','" & designation & "','" & Rayon & "','" & magasin & "','" & pa & "','" & pv & "', " & txtva & " )"        
    CurrentDb.Execute SQL, dbFailOnError
    On peut aussi consulter la liste des erreurs directement dans le moteur de base de données: Application.DBengine.Errors
    _

  3. #3
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    des oublis ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       CurrentDb.Execute "insert into TReferenciel " & _
                                          "(Ean,Designation,Rayon,Magasin,PA,PV,id_txtva) " & _
                                          "values ('" & ean & "','" & designation & "','" & Rayon & "','" & magasin & "','" & pa & "','" & pv & "', ' " & txtva & " ' )"
    tout est du texte apparemment

  4. #4
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Euh oui, enfin il y a des champs prix, cela change t-il quelque chose??

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Les champs numériques ne sont pas encadrés par des apostrophes. Attention au séparateur décimal qui doit être en point en SQL.

    Une bonne aide consiste à créer la requête avec l'assistant puis à examiner (voire copier/coller) le code sql

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par Pierre Fauconnier Voir le message
    Les champs numériques ne sont pas encadrés par des apostrophes. Attention au séparateur décimal qui doit être en point en SQL.

    Une bonne aide consiste à créer la requête avec l'assistant puis à examiner (voire copier/coller) le code sql
    +1

    On voit bien que ton format numérique n'est pas conforme à ce que le SQL attend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pa = Format(pa, "##,##0.00")
    A la place, voici une suggestion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pa = Replace( (Format(pa, "#0.00")), ",", ".")
    _

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par =JBO=;3724777...
    [CODE
    pa = Replace( (Format(pa, "#0.00")), ",", ".")[/CODE]
    _
    Pourquoi transformer le pa en chaine de caractères... Si le champ qui reçoit la valeur est en numérique, cela me semble plus logique de passer une valeur numérique

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Salut Pierre,

    Citation Envoyé par Pierre Fauconnier Voir le message
    Pourquoi transformer le pa en chaine de caractères... Si le champ qui reçoit la valeur est en numérique, cela me semble plus logique de passer une valeur numérique
    Ma suggestion s'inscrit dans le choix initial de Milyshyn76 qui veut faire un Execute sur une commande SQL et une commande SQL c'est d'abord une chaîne de caractères.

    Aussi, le texte de la commande SQL doit être conforme à la syntaxe attendue, et mon petit bout de code est une des adaptations nécessaires pour que cela fonctionne.

    Sinon, on peut directement ouvrir un Recordset sur la table cible, faire un AddNew, etc.
    Comme ça on insère les données en respectant les types attendus dans les champs de la table.

    C'est à Milyshyn76 de voir.
    _

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    ...

    Ma suggestion s'inscrit dans le choix initial de Milyshyn76 qui veut faire un Execute sur une commande SQL et une commande SQL c'est d'abord une chaîne de caractères.

    Aussi, le texte de la commande SQL doit être conforme à la syntaxe attendue, et mon petit bout de code est une des adaptations nécessaires pour que cela fonctionne....
    Oui, tu as raison... j'étais resté sur les apostrophes qui encadrent la valeur de PA à l'intérieur de la chaine SQL...

    @ Milyshyn76
    Une idée pour faciliter le débogage des chaines sql, c'est d'utiliser une variable de type string pour créer la chaine. Ainsi, tu peux mettre un point d'arrêt et vérifier que la chaine est conforme à ce que SQL attend.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim sql as string
    sql = "insert into..."
    Si pb lors de l'Execute, tu peux analyser ce qui a été réellement passé...

  10. #10
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim SQL As String
     
    SQL = "insert into TReferenciel " & _
        "(Ean,Designation,Rayon,Magasin,PA,PV,id_txtva) " & _
        "values ('" & ean & "','" & designation & "','" & Rayon & "','" & magasin & "','" & pa & "','" & pv & "', " & txtva & " )"        
    CurrentDb.Execute SQL, dbFailOnError
    c'est Comme meme Bizard que la cela marche..Enfin Bon Merciiiiiii

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    En comparant ta dernière chaine et la première que tu avais donnée, je constate que dans la première, tu ne fermais pas le TxtTVA avec une apostrophe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. INSERT INTO qui ne passe pas !
    Par laurentbatch dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 26/08/2013, 19h38
  2. [AC-2007] INSERT INTO qui ne marche pas
    Par tibofo dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/12/2009, 22h00
  3. [MySQL] INSERT INTO qui ne fonctionne pas mais qui fonctionne
    Par quiky dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 09/12/2009, 15h31
  4. Insert into qui ne fonctionne pas ?
    Par Little_flower dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/08/2008, 10h12
  5. [MySQL] INSERT INTO qui ne veut pas marcher
    Par Tee shot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/03/2007, 17h42

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