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

Macros et VBA Excel Discussion :

Erreur sur requete sql insert into [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut Erreur sur requete sql insert into
    Bonjour,
    je rencontre un problème avec une requête sql insert to.
    Le but de cette requête est d'ajouter une ligne dans un tableau d'un classeur fermé. Après avoir consulter le tutos sur les classeurs fermés, j'ai écrit mon code.

    voici mon problème:
    cas n°1:
    Lorsque je fait ma requête comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL = "INSERT INTO [" & NomFeuille & "$] " & "VALUES ('" & numdemande & "', '" & date1 & "', '" & nom1 & "', '" & etbls & "', '" & lieu & "', " & "'" & domaine & "', '" & typeprob & "', '" & descrip & "', '', '', '', '')"
    j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO [Bd$] VALUES ('2011-0120', '19/09/2011', 'Sélection du nom...', 'Etablissement...', 'Pièces...', 'Catégorie...', 'Type de problème...', '', '', '', '', '')
    ici la date est un string et la variable est déclaré en tant que string, les derniers champs sont vides. Au moment de l'éxécution ceci provoque une erreur.

    cas n°2:
    Maintenant lorsque je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        texte_SQL = "INSERT INTO [" & NomFeuille & "$] " & "VALUES ('" & numdemande & "', #" & date1 & "#, '" & nom1 & "', '" & etbls & "', '" & lieu & "', " & "'" & domaine & "', '" & typeprob & "', '" & descrip & "', '', '', '', '')"
    j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO [Bd$] VALUES ('2011-0120', #19/09/2011#, 'Sélection du nom...', 'Etablissement...', 'Pièces...', 'Catégorie...', 'Type de problème...', '', '', '', '', '')
    ici la date est une Date et la variable est déclaré en tant que Date, les derniers champs sont vides. Au moment de l'éxécution ceci provoque toujours une erreur.

    Pour les 2 cas l'erreur est la même :
    "Erreur d'éxécution '-2147217913(8004e07)':
    Type de données incompatible dans l'expression du critère."

    J'ai mis les champs vides à la fin pour respecter le nombre de champ. Dans ma table j'ai 12 champs les quatres derniers seront remplis par une requête update par un autre utilisateur.

    Est-ce que j'ai loupé quelques choses? Est-ce une erreur de syntaxe?

    Merci de votre aide

    EDIT: Il me semble utile de mettre le code complet :
    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
    Sub MAJ_Bd_2()
     Dim Cn As ADODB.Connection, Fichier As String, NomFeuille As String, texte_SQL As String
     Dim Rst As ADODB.Recordset
     Dim numdemande As String, date1 As Date, nom1 As String
     Dim etbls As String, lieu As String, domaine As String, typeprob As String
     Dim descrip As String
     
     
     
     
        'Définit le classeur fermé servant de base de données
        Fichier = "G:\Atelier\DEMANDE INTERVENTION\DATA Intervention.xlsm"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Bd"
     
       Set Cn = New ADODB.Connection
     
     
     
        'Les données à insérer:
        With UserForm1
          numdemande = numserie
          'date1 = Format(.MonthView1, "dd/mm/yyyy")
          date1 = CDate(Format(.MonthView1, "dd/mm/yyyy"))
          nom1 = .ComboBox1.Value
          etbls = .Label3.Caption
          lieu = .Label4.Caption
          domaine = .ComboBox2.Value
          typeprob = .ComboBox3.Value
          descrip = Replace(.TextBox1.Value, "'", "''")
        End With
     
          '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        '-----------------
        'Les données doivent être indiquées dans le même ordre que les champs dans la base de données.
        texte_SQL = "INSERT INTO [" & NomFeuille & "$] " & "VALUES ('" & numdemande & "', #" & date1 & "#, '" & nom1 & "', '" & etbls & "', '" & lieu & "', '" & domaine & "', '" & typeprob & "', '" & descrip & "', '', '', '', '')"
     
        Debug.Print texte_SQL
     
        Cn.Execute texte_SQL
     
        Cn.Close
        Set Cn = Nothing
    End Sub
    @+

    Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
    Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
    Ou sur si ce n'est pas le cas

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Il se peut que ce soit l'une des facéties de Jet
    En fait, même si tu peux spécifier le format date régional que tu utilises, Jet n'accepte que le format américain en # MM/DD/YYYY #.
    Je l'avais lu dans l'aide Access mais je ne retrouve plus l'article en question. Un site sérieux qui en parle: http://allenbrowne.com/ser-36.html

    Si ça ne fonctionne toujours pas, tu peux essayer de "l'insérer" comme un 'double' et de définir le format de la colonne sous Excel en 'date', la conversion ne devrait pas poser de problème.

  3. #3
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Merci Sclarckone,
    mais même en formatant la date avec comme ceci "mm/dd/yyyy" cela ne fonctionnait pas.

    Après quelques essais sur un fichier test je me suis rendu compte que mes requêtes, aussi bien l'une que l'autre fonctionnait très bien lorsque les cellules du tableau n'étaient pas formatées en Date.Ce n'est donc pas un problème de syntaxe.
    J'ai donc formaté mes cellules aux format Texte et tout fonctionne à merveille.
    Si quelqu'un à une explication je suis curieux de savoir pourquoi.
    @+

    Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
    Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
    Ou sur si ce n'est pas le cas

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Citation Envoyé par rvtoulon Voir le message
    J'ai donc formaté mes cellules aux format Texte et tout fonctionne à merveille.
    Si quelqu'un à une explication je suis curieux de savoir pourquoi.
    J'ai bien une idée à ce sujet mais sans aucune garantie:


    Tu le sais probablement déjà mais le format date/heure n'existe pas en tant que tel. Les dates sont en fait stockées sous forme de Double dont la partie entière représente le nombre de jour, et la partie décimale le nombre d'heures, minutes, secondes en "fraction de jour".
    L'origine est prise au 01/01/1900 à 00h00m00s.

    Donc si tu déclares que ta cellule Excel est au format date, tu ne peux pas rentrer la date sous sa valeur littérale dd/mm/yyyy. Je sais que cela fonctionne quand on le fait à la main mais il doit y avoir une conversion implicitement faite par Excel.
    J'en veux pour preuve ce que donne l'enregistreur de macro lorsque je rentre à la main le 05/06/2011 dans une cellule préalablement formatée en date/heure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("P1").Select
        ActiveCell.FormulaR1C1 = "6/5/2011"    'on remarque au passage l'utilisation du format mm/dd/yyyy même si le format régional est défini par dd/mm/yyyy
    D'où les problèmes que tu rencontres car c'est la valeur de la cellule que Jet doit modifier avec l'instruction INSERT INTO.

    Ceci dit, je pensais qu'en utilisant les tags '#' spécifiques au format date d'Access, la conversion en 'double' serait implicitement faite et que l'on pourrait alimenter des cellules Excel au format 'date'.
    Mais ce n'est apparemment pas le cas...l'utilisation de Jet pour les classeurs Excel a donc des limites facilement franchissables!

  5. #5
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Merci pour tes explications
    @+

    Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
    Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
    Ou sur si ce n'est pas le cas

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

Discussions similaires

  1. [MySQL] Erreur sur requete sql
    Par majudis dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/04/2011, 21h58
  2. erreur 3134 sur instruction SQL insert into
    Par tiff13 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/02/2010, 11h28
  3. [ACCESS] Bouton Requete SQL INSERT INTO
    Par harry le ravi dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/06/2008, 22h33
  4. Syntaxe requete SQL insert into dans VBA
    Par @rkane dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 12/12/2006, 22h03
  5. erreur sur requete sql
    Par boss_gama dans le forum ASP
    Réponses: 1
    Dernier message: 31/07/2006, 13h39

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