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 Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Var (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    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 Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Var (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    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.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    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 Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Var (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par d�faut
    Merci pour tes explications

+ 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