Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 16h37   #1
Invité de passage
 
Thomas
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Thomas
Âge : 28

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 4
Points : 4
Par défaut Requête sql sur requête sql en vba

Bonjour à tous,

Afin d'intégrer des calculs dans une table de ma base de données, j'ai besoin de manipuler en VBA le resultat d'une requête paramétrée. J'aimerais pouvoir combiner cette requête avec une autre et la parcourir façon "Recordset".

J'ai une table où se trouve ma population : "Personnes".
J'ai un paramètre : "psIdentifiantContrat". (auquel j'ai attribué dans ce bout de code un numéro arbitraire).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim db As Database
Dim mirs1 As Recordset
Dim mirs2 As Recordset
Dim sql1 As String
Dim sql2 As String
 
Set db = CurrentDb
 
psIdentifiantContrat = "100000P0990000"
 
sql1 = "SELECT Personnes.[Identifiant contrat] " _
& "FROM Personnes GROUP BY Personnes.[Identifiant contrat] HAVING (Personnes.[Identifiant contrat]=""" & psIdentifiantContrat & """);"
 
Set mirs1 = db.OpenRecordset(sql1, dbOpenDynaset)
 
sql2 = "SELECT mirs1.[Identifiant contrat], Personnes.Nom, Personnes.Prénom" _
& " FROM mirs1 INNER JOIN Personnes ON mirs1.[Identifiant contrat] = Personnes.[Identifiant contrat]" _
& " GROUP BY mirs1.[Identifiant contrat], Personnes.Nom, Personnes.Prénom;"
 
Set mirs2 = db.OpenRecordset(sql2, dbOpenDynaset)
La première requête passe bien mais pas la deuxième. Je reçois un message d'erreur '3078' comme quoi ma requête "mirs1" n'est pas définie...

Si vous voyez où ça cloche ou s'il y a un moyen plus élégant, faites moi signe!

Merci et bonne journée.
Smoovy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 18h11   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Enregistre ta requête paramétrée (mirs1) dans la base en mettant comme critère [psIdentifiantContrat].

Enregistre ta seconde requête dans la base.

Puis ouvre ta seconde requête (mirs2) en lui passant le paramêtre.

Ton code devrait être proche de :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
dim db as dao.database:set db=currentdb
dim q as dao.querydef
set q=db.querydefs("mirs2")
q.parameters("psIdentifiantContrat")=psIdentifiantContrat
Set mirs2 = q.OpenRecordset()
.
.
.
set q=nothing
db.close:set db=nothing
cela devrait marcher.

Il seputr que tu sois obliger de déclarer tes paramêtres dans les deux requêtes (en design de requête, menu requêt, paramètres).

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 19h32   #3
Invité de passage
 
Thomas
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Thomas
Âge : 28

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 4
Points : 4
Un grand merci.

Une chaude larme (de joie) s'est écoulée le long de ma joue au moment où tout a fonctionné. Ca débloque une situation dont je n'arrivais pas à me défaire depuis longtemps.

Le déclic fut la commande "Paramètres" que tu m'as donné dans le mode création de la requête, j'ignorais son existence jusqu'à lors...

Vraiment merci.
Smoovy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 20h25   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
J'ai moi-même découvert les paramêtres et leurs usages sur le tard :o). Cela ne fait pas parti des éléments qu'on voit courrament dans Access.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h13.


 
 
 
 
Partenaires

Hébergement Web