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 :

[vba access] Pb d'execution requête SQL (requête simple)


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut [vba access] Pb d'execution requête SQL (requête simple)
    Bonjour amis developpeurs!

    J'ai fais un code vba qui me permet de faire une requête trés simple.

    Cette requête consiste à prendre 2 champs d'une table et les insérer dans une nouvelle table.

    J'ai ce code-ci mais access me trouve une erreur...Peut-être saurai-vous m'aiguiller?
    Voici mon 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
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub Commande26_Click()
    Dim sSQL As String
    Dim db As DAO.Database
    Dim myrst As DAO.Recordset
    
    'tu definis quelle est la BD étudiée, c'est celle qui est courante..
    Set db = CurrentDb
    
    'nom de ta table
    maTable = "2004_airbus_Usage_01"
    monAutreTable = "SIGLUM VIDE"
    
    'creation de la table
    DoCmd.RunSQL "CREATE TABLE [SIGLUM VIDE] (HostEmail String, Sigle String);"
    
    'requete sql (le order by, tu 'nes pas obligé, c'est juste pr trier
    sSQL = "SELECT HostEmail,Sigle from " & maTable & " ORDER BY HostEmail "
    
    'tu definis ton recordset qui va contenir le resultat de la requete
    Set myrst = db.OpenRecordset(sSQL)
    
    'si le recordset n'est pas vide
    If Not myrst.EOF Then
    ' tant qu'il n'est pas vide
    Do While Not myrst.EOF
    
    'recuperation des valeurs pour tes 2 champs
    sHostEmail = myrst.Fields("HostEmail").Value
    sSigle = myrst.Fields("Sigle").Value
    
    'sFunction = myrst.Fields("SEG_function").Value
    
    'requete d'insertion
    sSQLInsert = "INSERT INTO [SIGLUM VIDE] ([HostEmail], [Sigle], ) VALUES ( '" & sHostEmail & "' , '" & sSigle & "' )"
    
    'tu envoies l'execution de la requête insert
    
    dbBase.Execute sSQLInsert, dbFailOnError
    
    'tu passes a l'enregistrement suivant
    myrst.MoveNext
    
    Loop
    End If
    
    
    ' tu fermes/vides tout
    myrst.Close
    Set myrst = Nothing
    db.Close
    
    End Sub
    L'erreur se passe lors de l'execution de la requête, pourtant la requête est bonne et sans erreur.

    Voici le message d'erreur (cf doc joint)

    Pouvez-vous m'aider s'il vous plait?
    Images attachées Images attachées  

  2. #2
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Qu'as-tu dans sHostEmail et sSigle ? Si tu as une cote, ça change complètement ta requete SQL. Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQLInsert = "INSERT INTO [SIGLUM VIDE] ([HostEmail], [Sigle], ) VALUES ( "& Chr(34) & sHostEmail & Chr(34) & " , " & Chr(34) & sSigle & Chr(34) & " )"

  3. #3
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Salut,
    ton erreur est bien sur ta ligne RunSql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbBase.Execute sSQLInsert, dbFailOnError
    dbBase n'est pas défini, c'est db


    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
    Private Sub Commande26_Click()
    Dim sSQL As String
    Dim db As DAO.Database
    Dim myrst As DAO.Recordset
    
    'tu definis quelle est la BD étudiée, c'est celle qui est courante..
    Set db = CurrentDb
    
    'nom de ta table
    maTable = "2004_airbus_Usage_01"
    monAutreTable = "SIGLUM VIDE"
    
    'creation de la table
    DoCmd.RunSQL "CREATE TABLE [SIGLUM VIDE] (HostEmail String, Sigle String);"
    
    'requete sql (le order by, tu 'nes pas obligé, c'est juste pr trier
    sSQL = "SELECT HostEmail,Sigle from " & maTable & " ORDER BY HostEmail "
    
    'tu definis ton recordset qui va contenir le resultat de la requete
    Set myrst = db.OpenRecordset(sSQL)
    
    'si le recordset n'est pas vide
    If Not myrst.EOF Then
    ' tant qu'il n'est pas vide
    Do While Not myrst.EOF
    
    'recuperation des valeurs pour tes 2 champs
    sHostEmail = myrst.Fields("HostEmail").Value
    sSigle = myrst.Fields("Sigle").Value
    
    'sFunction = myrst.Fields("SEG_function").Value
    
    'requete d'insertion
    sSQLInsert = "INSERT INTO [SIGLUM VIDE] ([HostEmail], [Sigle], ) VALUES ( '" & sHostEmail & "' , '" & sSigle & "' )"
    
    'tu envoies l'execution de la requête insert
    
    db.Execute sSQLInsert, dbFailOnError
    
    'tu passes a l'enregistrement suivant
    myrst.MoveNext
    
    Loop
    End If
    
    
    ' tu fermes/vides tout
    myrst.Close
    Set myrst = Nothing
    db.Close
    
    End Sub

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut
    Merci de vos reponses rapides!!!

    Citation Envoyé par daplomb
    Qu'as-tu dans sHostEmail et sSigle ? Si tu as une cote, ça change complètement ta requete SQL. Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQLInsert = "INSERT INTO [SIGLUM VIDE] ([HostEmail], [Sigle], ) VALUES ( "& Chr(34) & sHostEmail & Chr(34) & " , " & Chr(34) & sSigle & Chr(34) & " )"

    ok il me semble avoir déjà essayé avec le chr(34) mais je vais retenter quant a jean paul lepetit, je crois pas que mon erreur viens du dbBase qui n'est pas défini car j'ai remplacé "dbBase.Execute sSQLInsert, dbFailOnError" par un DoCmd.RunSQL et cela marcher toujours pas.

    Je vais essayer vos propositions et je vous tiens au courant rapidement

    merci de vos reponses!!

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut
    voici mon code aprés quelques modifications:

    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
    Private Sub Commande26_Click()
    Dim sSQL As String
    Dim db As DAO.Database
    Dim myrst As DAO.Recordset
    
    'tu definis quelle est la BD étudiée, c'est celle qui est courante..
    Set db = CurrentDb
    
    'nom de ta table
    maTable = "2004_airbus_Usage_01"
    monAutreTable = "SIGLUM VIDE"
    
    'creation de la table
    DoCmd.RunSQL "CREATE TABLE [SIGLUM VIDE] (HostEmail String, Sigle String);"
    
    'requete sql (le order by, tu 'nes pas obligé, c'est juste pr trier
    sSQL = "SELECT HostEmail,Sigle from " & maTable & " ORDER BY HostEmail "
    
    'tu definis ton recordset qui va contenir le resultat de la requete
    Set myrst = db.OpenRecordset(sSQL)
    
    'si le recordset n'est pas vide
    If Not myrst.EOF Then
    ' tant qu'il n'est pas vide
    Do While Not myrst.EOF
    
    'recuperation des valeurs pour tes 2 champs
    sHostEmail = myrst.Fields("HostEmail").Value
    sSigle = myrst.Fields("Sigle").Value
    
    'sFunction = myrst.Fields("SEG_function").Value
    
    'requete d'insertion
    sSQLInsert = "INSERT INTO [SIGLUM VIDE] ([HostEmail], [Sigle], ) VALUES ( " & Chr(34) & sHostEmail & Chr(34) & " , " & Chr(34) & sSigle & Chr(34) & " )"
    
    'tu envoies l'execution de la requête insert
    
    DoCmd.RunSQL sSQLInsert
    
    
    'tu passes a l'enregistrement suivant
    myrst.MoveNext
    
    Loop
    End If
    
    
    ' tu fermes/vides tout
    myrst.Close
    Set myrst = Nothing
    db.Close
    
    End Sub
    Toujours la même erreur , au même endroit avec le même message d'erreur....

    J'ai suivi vos 2 conseils mais cela marche toujours pas...
    A moins qu'il y ait un problème au niveau de la requête en elle-même mais je suis sûr qu'elle est bonne...

    Peut-être existe-t'il un code similaire qui permet l'exécution d'une requête mais à la syntaxe différente de celui-ci?

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J’ai encore 2 petites idées :
    - SHostEmail ou sSigle est déclaré numérique en base et donc il ne faut ni ‘ ni Chr(34)
    - la virgule après [Sigle] est en trop

  7. #7
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Je viens de vérifier, c'est bien ce que dit daplomb

    Citation Envoyé par daplomb
    la virgule après [Sigle] est en trop

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut
    ah genial c'est nikel sa marche merci à vous!!

    Je profite de votre connaissance approfondie en vb pour vous demander si il est possible que lorsque j' executer cette même requête en changeant simplement le nom de ma table (ici "2004_airbus_Usage_01") les champs hostemail et sigles de la table "SIGLUM VIDE" puisse se remplacer par les nouvelles valeurs de ma nouvelle table?


    Car lorsque j'execute une 2eme fois cette même requête, il y a la fenetre d'erreur "table SIGLUM already exist".

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je ne comprend pas bien ta question.
    - Si tu exécutes une 2me fois ton code c’est évident que tu va avoir un Pb sur le «CREATE TABLE [SIGLUM VIDE]»
    - Si tu veux optimiser ton code pour faire la même chose sur une autre table, tu peux faire qque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if {condition} then
         LaTable = maTable 
    Else LaTable = monAutreTable
    End if
    …
    ‘ creation de la table
    DoCmd.RunSQL "CREATE TABLE [“ & LaTable & “] (HostEmail String, Sigle String)"

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut
    Si tu veu j'aimerai que lorsque j'execute une 2eme fois le code , les valeurs precedente soient remplacé par les nouvelles valeurs.

    Je ne veux pas creer une nouvelle table mais rester sur la même table.

    Le but est de copier les nouvelles valeurs par dessus les anciennes.

    Tu comprend?

Discussions similaires

  1. Execution auto de requêtes SQL
    Par lbar012001 dans le forum SQL
    Réponses: 5
    Dernier message: 17/10/2007, 16h18
  2. Réponses: 13
    Dernier message: 26/07/2007, 08h50
  3. Execution d'une requête SQL INSERT
    Par damien27000 dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/07/2007, 21h35
  4. [VBA et SQL] Requête SQL utilisant une variable VBA
    Par Altrensa dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 06/07/2007, 10h23
  5. Réponses: 2
    Dernier message: 06/06/2005, 15h13

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