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 :

executerSQL necessite un argument consistant une instruction SQL


Sujet :

VBA Access

  1. #1
    Invité
    Invité(e)
    Par défaut executerSQL necessite un argument consistant une instruction SQL
    bonjour à tous
    un petit souci dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Timer()
    Dim sql As String
    Dim Comptage As Integer
    sql = "SELECT Count(IndexCommune) AS CompteDeIndexCommune FROM InterventionCommune ;"
    DoCmd.RunSQL sql
    MsgBox (sql)
    'Comptage = sql
    'If Me.RecordsetClone.RecordCount < Comptage Then
    'MsgBox "Nouvel enregistrement"
    'End If
    End Sub
    ça me dit : erreur d'execution 2342 une action executerSQL necessite un argument consistant une instruction SQL

    Comprends pas l'instruction est bien là pourtant.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    tu fais ici une requete de "selection simple",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.OpenRecordSet(SQL)
    suffit amplement
    RunSQL est utilisé pour manipuler des données (insert, update, select into, etc.)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Invité
    Invité(e)
    Par défaut
    Thanks JP ca ne beugue plus mais la msg box m'affiche le contentu (string) de la requete

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    oui,
    pour avoir le résultat tu dois utiliser un RecordSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Timer()
    Dim RS as DAO.RecordSet
    Dim SQL as String
     
    Dim Comptage As Integer
    SQL = "SELECT Count(IndexCommune) AS CompteDeIndexCommune FROM InterventionCommune ;"
    Set RS = CurrentDb.OpenRecordSet(SQL)
    MsgBox (RS!CompteDeIndexCommune)
    'Comptage = sql
    'If Me.RecordsetClone.RecordCount < Comptage Then
    'MsgBox "Nouvel enregistrement"
    'End If
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Invité
    Invité(e)
    Par défaut
    effectivement ça marche mieux comme ça.
    Mais pourquoi ai-je une incompatibilité de type avec comptage = sql puisque comptage est defini comme integer et que le resultat sql est un nombre ? là je ne pige pas.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    attention, ne confonds pas code sql d'une requete, et résultat d'une requête.
    tu as la question d'une part, la réponse de l'autre.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Invité
    Invité(e)
    Par défaut
    Euh... j'ai du mal a te suivre là ! en fait je veux faire une comparaison entre le nombre d'enregistrement de la table et le nombre d'enregistrement à l'affichage afin d'informer l'utilisateur qu'un nouvel enregistrement est entre par un autre utilisateur. Ca evite le rafraichissement auto initialement prevu, facile à mettre en place mais chiant à l'usage aux dires des utilisateurs.

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Euh, là c'est moi qui ait du mal à te suivre. En fait, tu as plusieurs utilisateurs connectés à ton formulaire, et tu pouvoir prévenir l'utilisateur B que A a ajouté un enregistrement?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Absolument, t'a tout compris ! LOL
    J'ai pensé à cette solution là, on peut sans doute faire un autre choix...

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Salut,

    Ok, et bien voila le code (c'est presque ce que tu as ^^):
    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
     
    Private Sub Form_Timer()
    Dim RS as DAO.RecordSet
    Dim SQL as String
     
    Dim comptage as integer
    SQL = "SELECT Count(IndexCommune) FROM InterventionCommune;"
    Set RS = CurrentDb.OpenRecordSet(SQL)
    'RS contient à ce moment la le résultat de ta requête SQL, il te faut alors l'exploiter. Tu accède alors à chacun des champs par indice. Le premier attribut du select par RS(0), le second par RS(1)...Etc donc :
     
    Comptage = RS(0)
    If Me.RecordsetClone.RecordCount < Comptage Then
         MsgBox "Nouvel enregistrement"
    End If
    End Sub

  11. #11
    Invité
    Invité(e)
    Par défaut
    Yes ! ça fonctionne nickel. merci Talrashha ainsi quà JPCheck
    sur l'idée en elle même, qu'est-ce que tu en penses ? verrais-tu une autre approche pour détecter un nouvel enregistrement ?

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Salut,

    Je crois que la seule chose qui est partagé dans une application Access est la base de données. Donc quoi qu'il en soit, tu dois utiliser un système de requête exécuté périodiquement (ou alors penser à une appli client-serveur, mais dans le cas présent c'est clairement hors de propos ^^).

    Donc vu la tête du code, à moins que ta table soit vraiment composé d'une extrêmement grande quantité d'enregistrement, ta requête s'exécute déjà très vite ^^.

  13. #13
    Invité
    Invité(e)
    Par défaut
    un peu plus de 20000 enregistrements actuellement, je vais garder le script tel quel et vérifier le bon fonctionnement en live. Je verrai plus tard pour limiter la requête sur la journée en cours.

Discussions similaires

  1. Réponses: 9
    Dernier message: 10/06/2015, 09h24
  2. [AC-2003] Requête SQL, "executersql necessite un argument "
    Par DUCKY_ dans le forum VBA Access
    Réponses: 5
    Dernier message: 01/10/2010, 14h01
  3. récupérer une instruction sql
    Par oracliste dans le forum Oracle
    Réponses: 2
    Dernier message: 09/11/2006, 11h41
  4. Remplacer l'instruction GO par une instruction SQL
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 06/04/2006, 09h28
  5. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 14h44

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