Recordset volumineux

cs_Arkane Messages postés 14 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 20 mai 2005 - 13 mars 2003 à 11:46
BBeppe Messages postés 16 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 10 février 2004 - 11 févr. 2004 à 18:41
Je traite une base de donnée concequente avec des memebre par milliers

Par un formulaire, j interroge la DB pour afficher les membres souhaité.

Pour faciliter, la navigation, je n affiche qu une partie du resultat (10 par ex )pour ne pas avoir 1000 ligne sur ma page :) (exemple : resultat requet sur moteur de recherche)

Mon probleme c que qd je veux afficher les x suivant ou x precedent, mon script va reintéroger la DB pour refaire uen selection et trier les X suivant/precedent souhaité !!!

N y a t il pas moyen pour optimiser de faire une selection, une fois pour toute, et afficher qu'une partie de cette selection, et naviguer dans le resultat ss reinterroge la db ????

en qq sorte obtenir un resultat 'offline' de la DB !!

Merci pour vos reponses. Bonne journée
Bonne Programmation ;)

4 réponses

Paxcal Messages postés 42 Date d'inscription samedi 24 août 2002 Statut Membre Dernière intervention 3 octobre 2005
15 mars 2003 à 01:36
une possibilité.

Elle nécessite que tu ais les droits d'ecriture sur le disque.

Page rs.asp
<OBJECT RUNAT= "SERVER" SCOPE="page" ID="fso" PROGID="Scripting.fileSystemObject"></OBJECT>
<%

function getAuthors( startPos , nbRows , bForce )
dim sql , cn , rsData

set rsData = Server.CreateObject("ADODB.recordset")
'si on ne force pas  l'interrogation au serveur,
et que le fichier existe on l'ouvre à partir du disque
if ( not bForce and fso.FileExists( Server.MapPath(Session.SessionID + "rs"))) then
rsData.Open  Server.MapPath(Session.SessionID + "rs")
else
'sinon, on execute la requete
set cn = Server.CreateObject("ADODB.connection")
sql = "select * from authors"
rsData.CursorLocation=adUseClient
rsData.CacheSize=20

cn.ConnectionString=Application("connectionString")
cn.Open
rsData.Open sql,cn
set rsData.ActiveConnection=nothing
cn.Close 
set cn = nothing

'on supprime un éventuelle version sur disque
if ( fso.FileExists( Server.MapPath(Session.SessionID + "rs"))) then
call fso.DeleteFile( Server.MapPath(Session.SessionID + "rs"),true)
end if
'on ectit le recordset sur disque
call rsData.Save (Server.MapPath(Session.SessionID + "rs"),adPersistADTG )
end if

'on se positione à la position de départ
rsData.Move(startPos)
' on copie les données dans un tableau
'l'utilisation d'un tableau est plus rapide que la navigation dans un recordset

'on retourne le tableau
getAuthors = rsData.GetRows( nbRows )
exit function
end function

dim arValues

arValues = getAuthors(0, 100, false)
for i = 0 to ubound( arValues , 2 ) 'lignes
Response.Write "
********** #" & i & "
"
for j = 0 to ubound( arValues , 1 ) 'colonnes
Response.Write arValues( j , i ) & "
"
next
next

%>

 global.asa 

<!--metadata name ="Microsoft ActiveX Data Objects 2.6 Library" type="TypeLib" uuid="{00000206-0000-0010-8000-00AA006D2EA4}"-->
<SCRIPT LANGUAGE="vbscript" RUNAT=Server>
sub Application_OnStart
Application("connectionString") = "dsn=tom;uid=sa;Password=******;"    
end sub
sub Session_OnStart
end sub

'on supprime les données cachées
'dans le Session_OnEnd, aucun des object intrinsect ne fonctionne
'on a juste accé au Session.SessionID
il faut donc écrire le chemin en dur
sub Session_OnEnd
dim fso
set fso = Server.CreateObject("Scripting.fileSystemObject")
if fso.FileExists( "C:\Inetpub\wwwroot\forum\recordset" & Session.SessionID & "rs" ) then
call fso.DeleteFile( "C:\Inetpub\wwwroot\forum\recordset" & Session.SessionID & "rs", true)
end if
set fso=nothing
end sub
</SCRIPT>



Pascal
0
cs_Arkane Messages postés 14 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 20 mai 2005
17 mars 2003 à 08:51
une ecriture dasn un fichier !

Oui j y ai pensé aussi :) et çà aurait ete ma seule solution si ce n est que je dois avoir la possibilite de trier mon Rs sur les collone qu il affiche !! :(

donc pas de #txt !! :'(

Merci pour ta proposition ;)

Programmez bien

-- Arkane the Keroberos --
0
Paxcal Messages postés 42 Date d'inscription samedi 24 août 2002 Statut Membre Dernière intervention 3 octobre 2005
17 mars 2003 à 16:14
tu peux trier un recordset sans qu'il soit connécté à la base de données.

la propriété sort

rs.sort="nom desc, prenom"


Pascal
0
BBeppe Messages postés 16 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 10 février 2004
11 févr. 2004 à 18:41
Bonjour

Cherche appui pour projet structuré d'Éditeur Multilingue GREC, ARMENIEN, FRANCAIS!
Mon matos Win98 pas de serveur.
Un editeur HTML en HTML dont j ai ote le code submit mailto qui ne m'interesse pas (ex code d'envoi de mails).

J'ai l'intention de me servir de cet editeur de preference a un
autre parce qu il sera Multilingue.
Compatible HTML SEULEMENT !

Grave Manque : l'implementation d'une FSO, pour sauver sur disque dur le boulot.

Actuellement en JAVASCRIPT je sauve le CODE Html plus le code de l'Éditeur. ;O) Ce qui est pas la meilleur façon de faire.

Pour le multilinguisme j'ai trouvé un biais, je passe par le choix de la TRUETYPE !

J'accepte éventuellment de partager mes droits avec un programmeur qui menera à bien la partie code.
Car il est possible de FAIRE UN VRAI PROGICIEL COMMERCIAL! Moi j'en suis parsuadè.

le_premier_bourguignon@yahoo.fr

Echange traduction contre AIDE en SCRIPT
0
Rejoignez-nous