ASP: faire un lien vers un .vbs avec message de chargement pendant l'éxécution d

larfanou Messages postés 12 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 3 novembre 2005 - 2 nov. 2005 à 16:25
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 - 3 nov. 2005 à 20:32
Bonjour a tous,

Voila, j'ai développé un script vbs qui lit les fichiers .sql d'un répertoire donné et qui éxécute les requêtes lues pour en ressortir un fichier résultat .csv.
Ce script fonctionne très bien et est éxécuté quotidiennement (env 2 min pour 19 requêtes soit environ 70mo de données).
Afin de satisfaire mes utilisateurs, j'aurai voulu rendre accessible l'exécution de ce script via une page asp en intranet.
Débutant en asp, j'aurai besoin d'aide et de conseils...

J'ai commencé par faire une page avec un bouton qui appel directement le script vbs, cela fonctionne, mais

1. comment faire pour afficher un message "chargement en cours..." pour faire patienter l'utilisateur et pour qu'il sache ou ça en est ?
2. j'aimerai en fait que sur la page asp, il y est un "aperçu" du chargement, comme par exemple :
Traitement en cours...
Requête n° x sur y en cours d'extraction (z % effectué)
w % du chargement total effectué
avec x la requête en cours d'éxécution, y le nombre total de requête, z le pourcentage sur le recordcount de la requete.
toutes ces variables sont bien entendu facilement obtenues dans le script.

Mon réel problème est donc de faire intéragir le script avec la page asp, pour avoir un aperçu du chargement en temps réel.
D'avance merci à tous,
Steff
A voir également:

8 réponses

boreuxc Messages postés 20 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 5 janvier 2006
3 nov. 2005 à 09:54
Base MS-ACCESS ?
--Ced--
0
larfanou Messages postés 12 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 3 novembre 2005
3 nov. 2005 à 10:09
non, SQL SERVER...
0
boreuxc Messages postés 20 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 5 janvier 2006
3 nov. 2005 à 10:18
le problème de la progression (via recordcount) c'est que il n'y a pas de COMMIT avant la fin de ton traitement, donc pas facile à savoir ou on en est... L'diéal serait, je pense, de créer un fichier texte, et de le garnir en avançant.

Un pop up en avant plan irait lire ce fichier pour afficher la progression...

C'était juste mon avis...
--Ced--
0
larfanou Messages postés 12 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 3 novembre 2005
3 nov. 2005 à 11:01
Qu'entends tu par COMMIT ?
Je connais le nbre total d'enregistrements, donc facile d'en avoir l'avancement, non ?
Le résultat de la requête est inséré dans un fichier csv, il est donc garni en avançant...
Je ne voudrais pas trop avoir de popup, je préfèrerais que le tout soit affiché dans la page asp et raffraichit pour avoir un suivi du chargement en temps réel...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
boreuxc Messages postés 20 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 5 janvier 2006
3 nov. 2005 à 11:21
Donne moi tes requetes que je regarde un peu
--Ced--
0
larfanou Messages postés 12 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 3 novembre 2005
3 nov. 2005 à 11:36
Voici le code du script vbs:

'-----------------------------------------------------------------------------
'Extraction des données dans Oméga
'-----------------------------------------------------------------------------
'Ouverture de la base de données Omega
Set ConnBdOmega = Server.CreateObject("ADODB.Connection")
ConnBdOmega.Open BdOmega


'Lecture des requêtes SQL du répertoire RepReq
Set fSrc = fs.GetFolder(RepReq")
Set fFichiers = fSrc.Files


i = 0 'Compteur de fichiers SQL


For Each fTemp in fFichiers
'Compteur de fichiers requêtes
i = i+1


'Ouverture du fichier requête
Set inF = fs.OpenTextFile(fTemp, 1, false)


'Lecture du fichier
ReqSQL = inF.readAll


'Fermeture du fichier requête
inF.close


'Nom du fichier requête
NomFichierReq = left(fTemp.Name, len(fTemp.Name) - 4) & ".csv"


'Exécution de la requête (ReqSQL)
'Set ReqOmega = ConnBdOmega.Execute(ReqSQL)
Set ReqOmega = CreateObject("ADODB.Recordset")
ReqOmega.open ReqSQL, BdOmega


buffer = ""


'Récupération des entêtes de la requête
for j=0 to ReqOmega.fields.Count -1
buffer = buffer & ReqOmega(j).name & ";"
next


'Résultat de la requête dans un fichier csv a mettre dans RepExtract
'---------------------------------------------------------------------
'Création du fichier csv contenant le résultat de la requête
Set fExtract = fs.CreateTextFile (RepExtract & NomFichierReq)


'Ecriture des entêtes dans le fichier
fExtract.WriteLine buffer


'Deux méthodes pour récupérer les données de la requête:
'1ere méthode = balayage du recordset enregistrement par enregistrement
'(demande plus de ressources puisque travaille sur la base de données)


'While not ReqOmega.EOF
' buffer=""
' for j=0 to ReqOmega.fields.Count -1
' buffer = buffer & ReqOmega(j).value & ";"
' next
' fExtract.WriteLine buffer
' ReqOmega.MoveNext
'Wend


'2e méthode = Récupération de la requête dans un tableau à 2 dimensions
tempArray = ReqOmega.GetRows()


'Fermeture de la requête
ReqOmega.Close
Set ReqOmega = Nothing


'Extraction des données du tableau (=contenu de la requête)
For iRowLoop = 0 to UBound(tempArray, 2)
buffer=""
For iColLoop = 0 to UBound(tempArray, 1)
buffer = buffer & tempArray(iColLoop, iRowLoop) & ";"
Next 'iColLoop
fExtract.WriteLine buffer
Next 'iRowLoop


'Fermeture du fichier
fExtract.Close


Set fExtract = Nothing
Next 'fTemp


'Fermeture de la base de données Oméga
ConnBdOmega.Close
'-----------------------------------------------------------------------------



'-----------------------------------------------------------------------------
'Cloture des objets
'-----------------------------------------------------------------------------
Set ConnBdOmega = Nothing
Set fFichiers = Nothing
Set fSrc = Nothing
Set fs= Nothing

J'ai juste enlevé la déclaration et la définition des variables...
0
boreuxc Messages postés 20 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 5 janvier 2006
3 nov. 2005 à 12:05
Il faut à mon avis jouer avec les BUFFERS

Essaye
Response.buffer = false en début de page et essaye d'afficher dans ta boucle la valeur de iRowLoop par exemple

Si ca marche pas, essaye l'inverse
Response.buffer = true et en début de page et essaye d'afficher dans ta boucle la valeur de iRowLoop par exemple
après l'affiche, mets la commande Response.flush()
pour forcer à afficher le contenu du buffer... Jamais testé, à essayer donc !
--Ced--
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
3 nov. 2005 à 20:32
Salut,

Tu cherches à exécuter le script vbs dans ta page ASP
Le plus simple serait de faire un copier-coller entre deux balises <% et %>, comme ça tu te débarasses du vbs, et ça devient une simple page asp.

Ensuite, pour l'affichage tu as deux choix :
- Faire comme boreuxc le disais, c'est à dire : Utiliser le Response.Flush() avec une petite dose de javascript et ça te fait une superbe progressbar qui avance ! Il y a plusieurs sources sur ce site qui parlent de ça, dont une particulièrement adaptée à ton problème...
http://www.aspfr.com/code.aspx?ID=30460 (tu as juste besoin de l'adapter un peu et ça marche comme sur des roulettes )

ou alors

- Utiliser l'AJAX pour actualiser le contenu de la page. Malheureusement, je crains fort que dans ton cas, ce ne soit vraiment trop complexe d'utiliser ça...
Dans ce cas là, je te conseillerais plutôt l'autre méthode (mais tu fais comme tu veux...)

Nurgle
Il est plus aisé d'être sage pour les autres que pour soi-même ! (La Rochefoucauld)
0
Rejoignez-nous