begin process at 2008 08 22 00:55:27
1 229 731 membres
3 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UTILISER EN INTERNE UNE REQUÊTE SQL DANS UN FORMULAIRE


Information sur la source

Catégorie :VBA Classé sous : currentdb, openrecordset, sql, requete Niveau : Débutant Date de création : 28/06/2000 Vu / téléchargé: 11 128 / 590

Note :
7,08 / 10 - par 12 personnes
7,08 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Ce code explique comment faire pour utiliser ou créer une requête SQL dans un formulaire sans être obliger d'avoir 200 requêtes enregistrées sous Access. On gère tout en interne et cela de manière transparente.

Source

  • Option Compare Database
  • Option Explicit
  • Dim sDateDeb As String ' var. DateDebut Rapport
  • Dim sDateFin As String ' var. DateFin Rapport
  • Dim sSQL As String ' var. SQL->chaîne
  • Dim DB As Database ' var. DB est une BD
  • Dim myRec As Recordset ' var. Enregistrement
  • Set db = CurrentDb
  • 'on récupère les dates de début et fin de rapport des contrôles txt_DateDebut..
  • Me![txt_DateDebut].SetFocus
  • sDateDeb = Me![txt_DateDebut].Text
  • Me![txt_DateFin].SetFocus
  • sDateFin = Me![txt_DateFin].Text
  • On Error GoTo nonTrouve
  • ' Traitement des erreurs : si erreur (enregistrement non trouve) alors passe au suivant
  • nonTrouve:
  • Resume Next
  • 'REQUETE SQL -> NOMBRE DE PERSONNES ACCUEILLIES
  • sSQL = "TRANSFORM Count(activite.[N° Client]) AS CompteDeN° Client]" & _
  • " SELECT clients.[nom client], Count(clients.[no client]) AS total" & _
  • " FROM clients INNER JOIN activite ON clients.[no client] = activite.[N° Client]" & _
  • " WHERE (((activite.[Type financement])='chèques' Or (activite.[Type financement])='monnaie' Or (activite.[Type financement])='carte' Or (activite.[Type financement])='gratuit') AND ((activite.[Dare accueil]) Between #" & sdatedeb & "# And #" & sDatefin & "#))" & _
  • " GROUP BY clients.[nom client] PIVOT activite.[Type financement]; "
  • 'assigne à la variable myRec la database et la requête conjointe
  • Set myrec = db.OpenRecordset(sSQL)
  • Me![nb accueils].SetFocus
  • myrec.MoveLast 'on balaie les enregistrements
  • myrec.MoveFirst
  • Me![nb accueils].Text = myrec.RecordCount
Option Compare Database
Option Explicit

Dim sDateDeb As String ' var. DateDebut Rapport
Dim sDateFin As String ' var. DateFin Rapport

Dim sSQL As String     ' var. SQL->chaîne

Dim DB As Database     ' var. DB est une BD
Dim myRec As Recordset ' var. Enregistrement

Set db = CurrentDb

'on récupère les dates de début et fin de rapport des contrôles txt_DateDebut..	

  Me![txt_DateDebut].SetFocus
  sDateDeb = Me![txt_DateDebut].Text

  Me![txt_DateFin].SetFocus
  sDateFin = Me![txt_DateFin].Text

On Error GoTo nonTrouve  

' Traitement des erreurs : si erreur (enregistrement non trouve) alors passe au suivant

  nonTrouve:
  Resume Next
    

'REQUETE SQL -> NOMBRE DE PERSONNES ACCUEILLIES

sSQL = "TRANSFORM Count(activite.[N° Client]) AS CompteDeN° Client]" & _
       " SELECT clients.[nom client], Count(clients.[no client]) AS total" & _
       " FROM clients INNER JOIN activite ON clients.[no client] = activite.[N° Client]" & _
       " WHERE (((activite.[Type financement])='chèques' Or (activite.[Type financement])='monnaie' Or (activite.[Type financement])='carte' Or (activite.[Type financement])='gratuit') AND ((activite.[Dare accueil]) Between #" & sdatedeb & "# And #" & sDatefin & "#))" & _
       " GROUP BY clients.[nom client] PIVOT activite.[Type financement]; "


'assigne à la variable myRec la database et la requête conjointe

Set myrec = db.OpenRecordset(sSQL)

Me![nb accueils].SetFocus
myrec.MoveLast	 'on balaie les enregistrements
myrec.MoveFirst
Me![nb accueils].Text = myrec.RecordCount


 

Conclusion

Ce petit listing est un exemple de code dans un formulaire qui me permet de calculer le RAPPORT D'ACTIVITE de ma société d'une pèriode choisie. Avec ce système je gère tous les paramètres financiers et les données liées à notre activité !

En ce moment je développe un moteur en VBA qui générera lui-même la requête SQL suivant les critères choisis (cases à cocher), c'est un challenge car les requêtes suivant les paramètres n'ont pas le même squelette étant donné qu'il faut prendre en compte parfois les relations croisées entre plusieurs tables.


Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de hball le 19/11/2003 17:39:30

    bouuuu
    ça marche pas

    j'ai un bug sur :
        Set myRec = DB.OpenRecordset(sSQL)

    help

  • signaler à un administrateur
    Commentaire de pasco05 le 20/03/2008 13:55:36

    moi aussi ça ne fonctionne pas quand il y à une apostrophe dans mon texte.

  • signaler à un administrateur
    Commentaire de Renfield le 20/03/2008 14:55:30 administrateur CS

    dupplique tes quotes, elles seront interpretées comme une quote, et non comme étant un separateur de texte

  • signaler à un administrateur
    Commentaire de pasco05 le 20/03/2008 19:10:36

    c'est à dir ?
    je travail sous excel et je lance des requetes SQL sur une base de données access pour recupérer des informations.

    mon projet et d'ouvrir un combobox avec 1 colonne.

    1 - Sur entrer dans le Combobox1 je lance ma requete qui recupere les données stocké de ma Base dans la table Liste Champ1

    - Jusque la pas de problème.

    3 - j'éfectue un test (REQUETE SQL)pour controler si un enregistrement de la table Liste corespond à ma nouvelle saisie, si tel est le cas je n'enregistre pas ma nouvelle saisie (cas ou une autre perssonne aurai déjà saisie cette valeur entre le moment ou j'ai ouvert Combobox1 et le moment ou je sort de celui-ci).

    3 - si ma saisie ne corespond pas à un élément de  Combobox1, je l'enregistre dans ma table Liste.

  • signaler à un administrateur
    Commentaire de pasco05 le 20/03/2008 19:14:13

    j'oubliai je travail dans un Combobox qui ce trouve dans une feuille de calcul excel.
    ensuite je recupere la valeur pour la mettre dans une cellule.

  • signaler à un administrateur
    Commentaire de econs le 20/03/2008 20:25:22 administrateur CS

    Ce que tente de t'expliquer Renfield, c'est qu'à chaque fois que tu as une apostrophe dans ta requête, tu dois la remplacer par une double apostrophe
    ' devient ''
    Ca évitera à ton moteur SQL de croire que la requête se termine sur le '

  • signaler à un administrateur
    Commentaire de Renfield le 21/03/2008 09:12:32 administrateur CS

    donnes nous sinon un brin de code (construction de ta requete) on t'indiqueras comment greffer un Replace(sValeur, "'", "''")

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS