ASP... besoin de 2 recordsets...

calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   -  
jroy Messages postés 27 Statut Membre -
Bonjour,

J'ai lu que l'on ne pouvait pas ouvrir plus d'un recordset à la fois...

et bien sur... mon problème est celui-la... j'ai besoin d'avoir deux recordset.

La solution que j'ai trouvé, mais qui ne me plaît guère est de mettre le résultat du premier recordset dans un tableau et de le parcourir pour pouvoir utiliser mon deuxième recordset... vous suivez toujours ? ;o)

Bref, quelqu'un aurait-il une méthode plus simple ou plus efficace que celle-ci ou suis-je un génie de la prog ;o)))

Mon sujet est le suivant :

J'ai trois tables.

1- La première contient le nom et des infos diverses d'un établissement.

2- la deuxième contient la ou les adresses de cet établissement.

3- la troisième contient les coordonnées de cet établissement. (tél, fax, courriel, etc...)

Mon problème est que lorsque je veux imprimer une liste de tous les établissements, je ne veux pas qu'il m'affiche autant de fois qu'il y a de lignes dans les tables 2 et 3 le nom et les infos de la table 1.

Je comptais faire un premier SQL SELECT sur la table 1 et 2, puis pour chaque ligne trouvée, je comptais faire un SQL SELECT sur la table 3.

Mais voilà... cela implique 2 recordset imbriqués...

J'apprécierais vos petits trucs...

MERCI

José
A voir également:

2 réponses

yaubi
 
j'ai du mal à schématiser ton besoin, mais si j'ai bien compris, je ferais ainsi :

1. une première requète récupère les id des établissements que tu veux afficher :
SELECT id FROM Table1;

2. tu lis ton recordset et copies cette liste dans un tableau
regarde s'il n'y a pas un fonction getRows :
idList = recordSet.GetRows(recordSet.RecordCount)

Pour chaque id de ta liste :

3. tu fais une requète pour récupérer les info de la table 1
SELECT * FROM Table1 WHERE etab_id = idList(index)

3'. tu affiches ces info

4. tu fais une requète pour récupérer les info des tables 2 et 3
SELECT * FROM Table2 WHERE etab_id = idList(index)
UNION
SELECT * FROM Table3 WHERE etab_id = idList(index)

4'. tu affiches ces info

ainsi de suite, jusqu'à la fin de ta liste.

Ai-je répondu à ta question ?

Yoann
0
calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci, c'est la solution que j'avais envisagé.

J'ai réfléchi à ce problème et je me suis dit que cela serait peut-être mieux de faire une table qui recevrait le résultat de mes requêtes avec un ordre d'apparition.

Je me dis que cela serait plus performant car lorsque une requête est faite au serveur pour afficher ma page ASP, il n'y aurait que cette requête SQL au lieu de mes n requêtes SQL.

Le problème est lié aussi à la BD. Access ne gère pas les "View". J'aurais pu régler ca avec Sql Server.

Merci d'avoir pris la peine de répondre.

José
0
jroy Messages postés 27 Statut Membre > calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention  
 
l'utilisation de la fonction getrows te permettra d'améliorer les performances d'accès aux données de ton site.

monTab = monRecorset.getrows

avec cette ligne de code tu transfert ton recordset dans un tableau et ainsi tu peux fermer ta connexion à la base de données. ensuite il ne te reste plus qu'à parcourir ton tableau avec une boucle for
0
jroy Messages postés 27 Statut Membre > calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention  
 
l utilisation de la fonction getrows te permettra d améliorer les performances d accès aux données de ton site.

monTab = monRecorset.getrows

avec cette ligne de code tu transfert ton recordset dans un tableau et ainsi tu peux fermer ta connexion à la base de données. ensuite il ne te reste plus qu'à parcourir ton tableau avec une boucle for
0
alix_bergeret Messages postés 4 Statut Membre
 
comment ca pas deux recordset?
bien sur que si?
je comrends pas la...

dim rs1 as recordset
dim rs2 as recordset
dim cc as connection

set rs1 = new recordset
set rs2 = new recordset
set cc = new connection

cc.connectionstring="..."
cc.open

rs1.open "select * from table1", cc
rs2.open "select * from table2", cc

...

rs1.close
rs2.close
cc.close

set rs1 = nothing
set rs2 = nothing
set cc = nothing
0
calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour,

Il est vrai que cela marche avec 2 recordsets utilisés indépendament...

Mais, sauf erreur de manipulation de ma part, cela ne marche pas avec 2 recordsets IMBRIQUES...

Le deuxième étant lié au premier pour la clause WHERE de la requête no 2.

En gros, je voulais avoir un premier RS1 qui me donne un ID qui va me servir pour faire une sélection sur le deuxième RS2.

Mais j'ai un beau message d'erreur qui me dit que je ne peux pas le faire sur un objet déjà ouvert... (bien sur, les deux rs ont deux noms différents).

Si je prends mon RS2 et que je le sors de la boucle... ca marche... mais cela ne répond pas à mon besoin.

Voilà pour la petite histoire...

José
0