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 :

Requete SQL a partir VBA excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut Requete SQL a partir VBA excel
    Bonjour,

    Je cherche a updater/completer une table access a partir d'un fichier excel.
    Pour cela je fais une recherche SQL pour voir si la clef primaire que je veux toucher existe deja dans base :
    si oui -> je veux updater un champ date de ma table
    si non -> je veux l'inserer dans ma table (via une requete SQL INSERT).
    La requete INSERT fonctionne bien, mais la requete SELECT pour voir si la clef existe deja retourne toujours un recordset vide..
    pourtant en prenant la string de la requete SQL et en l'executant directement dans Access elle fonctionne! ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     sqlFindEntry = "SELECT Name,Date,time FROM table1 WHERE Name = '" & var_name & "' AND Date = '" & var_date & "' ;"
            Set Recordset = Connection.Execute(sqlFindEntry)
            'update time if entry exists
            If Recordset.RecordCount > 0 Then
                Recordset("time") = var_time
            'insert if doesnt exist
            Else
                sqlInsert = "INSERT INTO table1 VALUES (' " & var_name & " ',' " & var_date & " ', ' " & var_time & " ', ' " & var_frequency & " ')"
                Set Recordset = Connection.Execute(sqlInsert)
            End If
    Merci par avance pour vos idees!

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Plutôt que de retourner la ligne de l'enregistrement et de tester si le retour est vide ou non, utilises un agrégat count et test si le retour est à 0 ou 1.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Hello jfontaine,

    Je comprend pas bien ta proposition : j'ai besoin de recuperer la ligne de l'enregistrement pour pouvoir modifier le champ time de cette ligne !
    (sachant que si il existe un enregistrement il est unique puisque la clef primaire de ma table c'est Name * Date).

    Merci!

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Si tu souhaites modifier directement l'enregistrement, essais comme cela

    On test la position du curseur dans le recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Recordset.EOF = False Then
        'modif
     
     
    Else
        'Insert
     
     
    End If

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Ok en faite j'ai du mal m'exprimer.
    Mon probleme est que ma requete ne fonctionne pas le recordset retourne est toujours vide alors meme que la meme requete lancee directement dans acces a un enregistrement retour! Du coup un count sur recordset ou un test RecordSet.EOF ne resoud pas mon probleme -> je rentre jamais dans ce If alors meme que l'enregistrement existe dans la base et que du coup la macro essayant de creer un nouveau champ avec cette clef plante pour cause de clef deja existante!

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    En effet, j'ai vraiment mal compris.

    Pas sur que ce soit cela, mais utilises des crochets quand un nom de champ existe aussi en instruction VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlFindEntry = "SELECT Name, [Date],[time] FROM table1 WHERE Name = '" & var_name & "' AND [Date] = '" & var_date & "' ;"

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Nope j'avais deja essaye mais ca ne resoud pas mon pb
    Je continue a chercher mais je vois vraiment pas pourquoi ma requete ne me retourne pas l'enregistrement alors que la meme string de requete dans access fonctionne...

    D'autres idees?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Bonjour,

    Et avec quelque chose dans ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    If dCount("*","Table1","Name = '" & var_name & "' AND Date = '" & var_date & "'") then
           docmd.runsql "Update table1 Set time ='" & var_time & "' where Name = '" & var_name & "' AND Date = '" & var_date & "'"
    else
    docmd.runsql "INSERT INTO table1 VALUES (' " & var_name & " ',' " & var_date & " ', ' " & var_time & " ', ' " & var_frequency & " ')"
    endif

Discussions similaires

  1. [XL-2003] Exécution d'une procédure SQL Server à partir d'Excel en VBA
    Par Peanut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/09/2011, 16h14
  2. [VBA][SQL] code pour requete sql update en vba
    Par titocv723 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 24/10/2006, 17h45
  3. Réponses: 1
    Dernier message: 26/09/2006, 11h55
  4. Aide requete SQL ou fonction VBA
    Par nykola7 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/03/2006, 17h51
  5. Doc pour créer requetes SQL via ODBC sous EXCEL
    Par satanas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/01/2005, 08h33

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