Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 26/05/2011, 09h53   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Par défaut Afficher un recordset d'une requête

Bonjour,

J'essaie désespérément de récupérer le résultat d'une requête lancée depuis VB pour ensuite éditer automatiquement un état de cette requête (et l'imprimer aussi).

Mais comment faire pour que le résultat de ma requête s'affiche dans une table (comme cela le fait lorsque on lance une requête en mode classique).

Si-dessous une partie du code
(strChamps est une variable définie par des sélections dans une liste box)

Code :
1
2
3
4
5
6
7
8
9
10
11
Set db = CurrentDb
 
SQL = "SELECT [n° client], nom, prénom, [n° compte], solde" _
& " FROM comptes, clients, comptes inner join clients on [#n° client] = [n° client]" _
& " WHERE nom = " & strChamps _
& " ORDER by nom " & ";"
 
Set rst = db.OpenRecordset(SQL)
 
Set rst = Nothing
Set db = Nothing
Merci beaucoup à tous.
wiidle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h49   #2
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Apparemment ce dont tu as besoin c'est d'une requête au sens des objets ACCESS. C'est une QueryDef. Tu crées une Querydef, tu lui donnes comme SQL la chaîne que tu as écrites, et tu ouvres ta QeryDef comme une table.

Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 11h09   #3
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Par défaut Afficher un recordset d'une requête

Bonjour et merci de ta réponse,

J'ai déjà essayé de faire avec une query mais ne faut -t-il pas que la requête soit crée dans le dur et nommée pour cela. ici je ne peux pas car les critères de ma requête change en fonction des sélections préalables de l'utilisateur dans la liste box (d’où la variable strChamps).


Donc j'essaie avec une query mais message d'erreur (erreur 3265, élément non trouvé dans cette sélection).

le code ci-dessous :

Code :
1
2
3
4
5
6
7
8
Set db = CurrentDb
 
SQL = "SELECT [n° client], nom, prénom, [n° compte], solde" _
& " FROM comptes, clients, comptes inner join clients on [#n° client] = [n° client]" _
& " WHERE nom = " & strChamps _
& " ORDER by nom " & ";"
 
Set rst = db.QueryDefs(SQL) 'le message d'erreur est ici
Merci de ta réponse car depuis 3 jours j'essaie de faire sa (d'afficher une requête) et sa rend fou.

Par hasard, ne faudrait-il pas que je créé une table qui se remplisse en fonction du recordset (méthode bidouille mais je préfèrerais éviter ) ?
wiidle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 11h37   #4
Membre confirmé
 
Homme
Développeur amateur
Inscription : mars 2009
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur amateur

Informations forums :
Inscription : mars 2009
Messages : 176
Points : 255
Points : 255
Bonjour,

je crois qu'il faut utiliser la methode "createquerydef"

cordialement
reedy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 13h14   #5
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Re,

Dans le principe c'est très simple. Oui il faut créer un objet QueryDef et le nommer, mais non la requête associée n'est pas figée : tu la modifies par code.
Si tu ne vois pas comment faire, je te donne une routine que tu pourras adapter.

Cdlt,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 14h10   #6
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Par défaut Afficher un recordset d'une requête

Bonjour,

Merci encore pour ton aide.
Je pense que la routine que tu me propose pourrait être grandement utile.

Suite à tes conseils j'ai créé un createquery en lui donnant un nom ect...

cependant, cela ne m'affiche pas le résultat attendu (une table avec le résultat de ma requête comme lorsque je passe par SQL et exécuter).

En fait je voudrais pouvoir éditer un état depuis le résultat de cette requête (j'ai programmé une macro qui devrait éditer l'état depuis cette nouvelle table en faisant un DoCmd.RunMacro).

je mets le code du createquery ci-dessous :

Code :
1
2
3
4
5
6
7
8
9
Dim Qry As DAO.QueryDef
 
SQL = "SELECT [n° client], nom, prénom, [n° compte], solde" _
& " FROM comptes, clients, comptes inner join clients on [#n° client] = [n° client]" _
& " WHERE nom IN (" & strChamps & ")" _
& " ORDER by nom;"
 
Set Qry = db.CreateQueryDef(test, SQL)
Set rst = Qry.OpenRecordset
Le truc c'est qu'une fois le programme fini il ne c'est rien passé, pas de création de table et donc pas de suite.

Merci,
wiidle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 15h06   #7
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Par défaut Afficher un recordset d'une requête

Re bonjour à tous,

j'apporte enfin la réponse à ma question.
Messieurs, j'ai apprécié vos réponses mais il ne s'agit pas d'un createquery ou que sais-je.

il fallait simplement lancer un runSQL (que j'avais déjà tester mais bon.
Dans la requête SQL il faut spécifier un INTO pour la création de la nouvelle table.

il vaut mieux taper le code du SQL plutot que de la nommer précedemment.

Le code ci-dessous :

Code :
1
2
3
4
5
6
7
8
Dim fExistTable As Boolean
Dim i As Integer
 
DoCmd.RunSQL "SELECT [n° client], nom, prénom, [n° compte], solde" _
& " INTO [table selection]" _
& " FROM comptes, clients, comptes inner join clients on [#n° client] = [n° client]" _
& " WHERE nom IN (" & strChamps & ")" _
& " ORDER by nom;"
6 heures de temps pour un INTO....
rrrrrrrrrrrrrrrrrrrrrrrrrrrr

merci à tous en tout les cas.
Bonne journée.
wiidle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h39.


 
 
 
 
Partenaires

Hébergement Web