Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
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 10/07/2007, 23h20   #1
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 39
Points : 17
Points : 17
Par défaut Probleme d'accès aux données récupérées dans une requête

Bonsoir,

Tout d'abord, je tiens à préciser que je suis nouveau ici et que je ne connais pas les coutumes. Je tiens à m'excuser par avance si j'en ai oubliées ou ommises. Par ailleurs, je tiens aussi à préciser que j'ai effectué une recherche sur le forum pour trouver une réponse à ma question.

Alors voilà : je crois que j'ai un gros souci d'accès à mes données : je dois récupérer les joueurs français (de football) évoluant en premier league (championnat d'angleterre) en 2007. Ma base est telle que d'un coté je dois sélectionner les joueurs français, et trouver leurs équipes respectives (1700 champs), et de l'autre je trouve les équipes du championnat anglais (20 champs).

Le souci intervient quand je fais le croisement des 2. je dois parcourir, pour les 1700 équipes des joueurs (par leur id), les 20 équipes de la compétition et si il y a un résultat (une table CompEquipe prend une Competition et une équipe par leurs id respectifs...) retourner "oui" tout simplement.

Voilà mon soucis, il concerne le temps d'exécution de la requete : si je remplace l'id des 1700 équipes trouvé par la requete, par un id bidon en dur, mon exécution dure 40 sec (évidemment la requete est qd mm executée :p). Si je mets, dans le MEME code, l'id généré, elle dure 2mn...

Ma réflexion est lancée sur le fait que pour accéder au 1600ème id, je dois parcourir les 1599 d'avants avant de trouver le bon, et ce à chaque fois...
Donc je voudrais supprimer, après lecture de l'id, l'élément du résultat de ma requete. Sauf que je n'arrive pas à le faire (instruction delete ?? ne marche pas...)

Mon code ressemble à :

'ces lignes sont de mémoire : le code est au boulot et je n'y suis pas là... désolé.
Code :
1
2
3
4
5
6
7
8
9
10
11
SQL = "select idEquipe from ....."
Set RSCompetition  = Server.CreateObject("ADODB.Connection")
RSCompetition.LockType=3
RSCompetition.Open
 
do until RSCompetition.eof
idTrouve=RSCompetition(0)
...
(RSCompetition.delete ???)
RSCompetition.movenext
loop
en gros ma boucle ressemble à cela, et je voudrais donc supprimer du RESULTAT de ma requete la premiere ligne apres lecture de celle ci, pour pouvoir accélérer mes performances en accès.

Merci d'avance à tous ceux qui prendront au moins le temps de lire ce roman !!! Mais avec mon responsable on a regardé pdt 1h30, croyez moi je suis tétu, mais là je n'ai pas trouvé. Merci!

Alex
chalumea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 08h21   #2
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 811
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 811
Points : 3 011
Points : 3 011
Bonjour,

J'espère avoir tout compris.

Pour une requête SELECT, tu devrais utiliset un recordset.

Code :
1
2
 
Set RSCompetition = Server.CreateObject("ADODB.Recordset")
Pour supprimer un enregistrement, utilise un object Connetion

Code :
1
2
3
4
 
Set RSCompetition = Server.CreateObject("ADODB.Connection")
...
txtSQL = "delete from matable where Id = " & RSCompetition(0)
Et tu utilises la commande Execute
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 08h46   #3
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 39
Points : 17
Points : 17
Ce n'est pas tout à fait cela. Tu me proposes si j'ai bien compris de supprimer la ligne lue de la base de données n'est-ce pas ? Tandis que je voudrais la supprimer du "fichier" résultat de ma requete. Le code exact est :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL = "select * from ... "
Set SQLStmt = Server.CreateObject("ADODB.Command")
Set RSGars= Server.CreateObject ("ADODB.Recordset")
SQLStmt.CommandText = texte
SQLStmt.CommandType = 1
RSGars.LockType=3
Set SQLStmt.ActiveConnection = DBase
RSGars.Open SQLStmt
 
While NOT RSGars.eof
      idTrouve = RSGars(0)
      fonction(idTrouve)
      'ici je voudrais supprimer RSGars(0) pour que le prochain champ à lire soit en tete de "fichier"
      RSGars.movenext
Wend
chalumea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 14h09   #4
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 811
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 811
Points : 3 011
Points : 3 011
Re,

Ca veut dire que dans le résultat de ta requête, tu veux supprimer le premier champ ?

Si c'est ça, tu ne le mets pas dans le select.
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 14h38   #5
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 39
Points : 17
Points : 17
pas le premier champ, mais le premier de mes 1700 résultats, pour qu'au tour de boucle suivant, le résultat n°2 soit au dessus des autres et ainsi de suite pour avoir à chaque fois un accès direct au résultat numéro i de ma requete...

par exemple :

Si au Tour de boucle n°1 ma requete a sélectionné les id suivants :
IdEquipe
1
5
7
8
14

Je veux, au tour de boucle n°2 :
IdEquipe
5
7
8
14

Puis au numéro 3 :
7
8
14

etc, de telle façon à ce que je puisse accéder au résultat de ma requête à la ligne i en instantané !
chalumea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 15h20   #6
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 811
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 811
Points : 3 011
Points : 3 011
Re,

On va essayer d'être plus clair.

Tu fais une requête qui te retourne une liste d'enregistrements.

Ensuite tu veux faire une boucle pour parcourir cette liste, et à chaque tour, tu veux récupérer la même liste qu'au tour précédent, mais sans la première valeur ?

J'ai compris ou pas ?
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 15h48   #7
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 39
Points : 17
Points : 17
Re,

Complètement désolé de ne pas avoir pu répondre plus tôt. C'est exactement cela. Le but étant évidemment de gagner un maximum de temps par rapport à l'accès à la donnée dans ma liste de résultats.

As-tu une solution ? Merci !
chalumea 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 09h36.


 
 
 
 
Partenaires

Hébergement Web