OPTIMISATION

cs_Jackboy Messages postés 757 Date d'inscription vendredi 7 septembre 2001 Statut Membre Dernière intervention 19 juin 2008 - 21 mars 2005 à 17:17
cs_Jackboy Messages postés 757 Date d'inscription vendredi 7 septembre 2001 Statut Membre Dernière intervention 19 juin 2008 - 25 mars 2005 à 06:35
J'aimerai qu'un "pro" de l'optimisation puisse me regularisé et optimisé ce code... Pas nécessaire de tout passer a la loupe, mais si vous trouvé des methode + simple et moin gourmante, bien me le faire savoir. L'optimisation ce trouverai en nécessité dans le code ou ce trouve la boucle de sélection pour chaque image (a partir de la ligne 119), Merci d'avance pour votre coup de main !!!

dim Browse_Graphic_File_Name
dim Browse_Graphic_File_Description
dim Browse_Graphic_File_Type
dim Browse_Graphic_File_Name_id
dim Browse_Graphic_File_Description_id
dim Browse_Graphic_File_Type_id


'récuperation du formulaire (4 champs)
Browse_Graphic_File_Name = Request.form("Browse_Graphic_File_Name") 'champs 1
Browse_Graphic_File_Description = Request.form("Browse_Graphic_File_Description") 'champs 2
Browse_Graphic_File_Type = Request.form("Browse_Graphic_File_Type") 'champs 3
Browse_Graphic_File_Name_id = "44" 'valeur static pour le champ 1, désigner le type du champs (voir table ELEMENT)
Browse_Graphic_File_Description_id = "43" 'valeur static pour le champ 2, désigner le type du champs (voir table ELEMENT)
Browse_Graphic_File_Type_id = "45" 'valeur static pour le champ 3, désigner le type du champs (voir table ELEMENT)


'*****************************************************
' connection pour recuperation et editer la table
' METD_EDIT_CITATION selon les nouvelle enregistrement
' de l'usager, permettre d'avoir une table pour ré-édition
'****************************************************
Connection_M3Cat strCon
dim strMETD_EDIT_BROWSEGRAPHICS
strMETD_EDIT_BROWSEGRAPHICS = "SELECT * FROM METS_EDIT_BROWSEGRAPHICS"
dim RS_METD_EDIT_BROWSEGRAPHICS
Set RS_METD_EDIT_BROWSEGRAPHICS = Server.CreateObject("ADODB.Recordset")
RS_METD_EDIT_BROWSEGRAPHICS.CursorType = 2
RS_METD_EDIT_BROWSEGRAPHICS.LockType = 3

'ouverture de la bd selon la requete et infos de la bd
RS_METD_EDIT_BROWSEGRAPHICS.Open strMETD_EDIT_BROWSEGRAPHICS, strCon

'var pour éditer la table METS_EDIT_BROWSEGRAPHICS
dim Browse_Graphic_File_Name_Edit
dim Browse_Graphic_File_Description_Edit
dim Browse_Graphic_File_Type_Edit

Browse_Graphic_File_Name_Edit = Browse_Graphic_File_Name
Browse_Graphic_File_Description_Edit = Browse_Graphic_File_Description
Browse_Graphic_File_Type_Edit = Browse_Graphic_File_Type

'édition de la table
RS_METD_EDIT_BROWSEGRAPHICS("Browse_Graphic_File_Name") = Originator_Edit
RS_METD_EDIT_BROWSEGRAPHICS("Browse_Graphic_File_Description") = Browse_Graphic_File_Description_Edit
RS_METD_EDIT_BROWSEGRAPHICS("Browse_Graphic_File_Type") = Browse_Graphic_File_Type

RS_METD_EDIT_BROWSEGRAPHICS.Update
RS_METD_EDIT_BROWSEGRAPHICS.Close
set RS_METD_EDIT_BROWSEGRAPHICS = nothing
'****************************************************
' fin recuperation
'****************************************************

'nom de la collection (ex.: ESM 2003)
metadata_name_collection = session("NameServerMeta")

'Exprésion réguliere qui permet de capter, si il y a lieu les espace remplacer par un %20
'dans le request.QueryString émis dans la page de collection
'sinon recherche de la collection erroné
set regExp = new regExp
regExp.Pattern = "[%20]"
regExp.Global = true
regExp.IgnoreCase = false
strClean = regExp.replace(metadata_name_collection, " ")


'*****************************************************
' connection pour recuperation dans la table DATASET
' de la valeur DATS_ID de la collection selon le nom
' de la collection. Plusieurs collections sont insérés dans la
' meme table dataset, mais chacune ayant un id différent.
' Attacher lr id à chaque nouvelle enregistrement (formulaire)
'****************************************************
Connection_M3Cat strCon strSqlNameCollection "SELECT DATS_ID, DATS_NAME FROM DATASET WHERE DATS_NAME '"& metadata_name_collection &"'"
Set RS_DATASET = Server.CreateObject("ADODB.Recordset")
RS_DATASET.CursorType = 1
RS_DATASET.LockType = 1
'ouverture de la bd selon la requete et infos de la bd
RS_DATASET.Open strSqlNameCollection, strCon
DATS_COLLECTION_ID = RS_DATASET("DATS_ID")
RS_DATASET.Close
set RS_DATASET = nothing
'****************************************************
' fin recuperation
'****************************************************

'*****************************************************
' connection pour recuperation, dans la table DATASET,
' de chaque image ayant un PARENT_DATS_ID (id de la collection trouvé + haut)
' égal a la celui de la collection DATS_ID
'**************************************************** strSqlDataset "SELECT * FROM DATASET WHERE PARENT_DATS_ID "& DATS_COLLECTION_ID
Set RS_DATASET_2 = Server.CreateObject("ADODB.Recordset")
RS_DATASET_2.CursorType = 1
RS_DATASET_2.LockType = 1
RS_DATASET_2.Open strSqlDataset, strCon
'*****************************************************
' fin de la connection mais utilisation + bas
'****************************************************



'*****************************************************
'*****************************************************
'*****************************************************
' OPTIMISATION NÉCESSAIRE CAR PLUS DE 1700 IMAGES ET +
' A VÉRIFIER MULTIPLIER PAR LE NOMBRE DE CHAMPS DU
' FORMULAIRE, CE QUI DONNE 5100 REQUETTE A LA QUEUE,
'POSSIBILITER DUN FORMULAIRE AYANT 14 CHAMPS DONC...
'*****************************************************
'*****************************************************
'*****************************************************


'*****************************************************
' connection pour ajout ou edition de la table METD_VALUE
' doit passer chaque image et verifier si la donner
' est présente, si oui editer, sinon ajouter
'****************************************************
Set RS_METD_VALUE = Server.CreateObject("ADODB.Recordset")
RS_METD_VALUE.CursorType = 3
RS_METD_VALUE.LockType = 3


'*****************************************************
' boucle qui sélectionne chaque image de la table dataset
' ayant le PARENT_DATS_ID de la collection, insere
' les valeur du formulaire et ce pour chaque image,
'*****************************************************
do while not RS_DATASET_2.EOF 'recherche de chaque image dans la bd (au dessus de 1600 images a passé a la queue)


DATASET_NAME = RS_DATASET_2("DATS_NAME")
METD_VALUE_DATS_ID = RS_DATASET_2("DATS_ID")


NameForm = ""
Form_Metd_Id = ""


'récupere tous les champs du formulaire (ici 3)
'et ajoute un enregistrement dans la
'table METD_VALUE pour chaque champs
for i = 1 to 3
select case i
case "1" 'champs 1
NameForm = Browse_Graphic_File_Name
Form_Metd_Id = Browse_Graphic_File_Name_id
case "2" 'champs 2
NameForm = Browse_Graphic_File_Description
Form_Metd_Id = Browse_Graphic_File_Description_id
case "3" 'champs 3
NameForm = Browse_Graphic_File_Type
Form_Metd_Id = Browse_Graphic_File_Type_id
case else 'aucun champs (erreur)
NameForm = ""
Form_Metd_Id = ""
End Select


'*****************************************************
' connection pour add OU edit dans la table METD_VALUE
' et ce pour chaque image étant relié à la collection
' requete sql qui vérifie si un enregistrement est présent
' selon un Id et un valeur si oui edit sinon ajoute
'**************************************************** strSqlMetdValue "SELECT * From METD_VALUE where METD_ID "& Form_Metd_Id &" and DATS_ID = "& METD_VALUE_DATS_ID
RS_METD_VALUE.Open strSqlMetdValue, strCon


'Édition si l'enregistrement à été trouvé dans la bd
if RS_METD_VALUE.RecordCount <> "-1" and RS_METD_VALUE.RecordCount > "0" then
RS_METD_VALUE("METD_Value") = NameForm 'valeur du champs entrer par l'usager
'RS_METD_VALUE("PARNT_METD_VALUE_ID") = "0" 'valeur par default pour le moment
'RS_METD_VALUE("METD_OCC") = "1" 'valeur par default pour le moment
RS_METD_VALUE("METD_ID") = Form_Metd_Id 'insère le type déterminant la valeur insérer
'RS_METD_VALUE("PARAM_ID") = "0" 'valeur par default pour le moment
RS_METD_VALUE("DATS_ID") = METD_VALUE_DATS_ID 'attacher l'id de l'image

'Ajout si l'enrtegistrement n'a pas été trouvé dans la bd
else
RS_METD_VALUE.addnew 'ajouter un enregistrement dans la table METD_VALUE
RS_METD_VALUE("METD_Value") = NameForm 'valeur du champs entrer par l'usager
RS_METD_VALUE("PARNT_METD_VALUE_ID") = "0" 'valeur par default pour le moment
RS_METD_VALUE("METD_OCC") = "1" 'valeur par default pour le moment
RS_METD_VALUE("METD_ID") = Form_Metd_Id 'insère le type déterminant la valeur insérer
RS_METD_VALUE("PARAM_ID") = "0" 'valeur par default pour le moment
RS_METD_VALUE("DATS_ID") = METD_VALUE_DATS_ID 'attacher l'id de l'image
end if

RS_METD_VALUE.update 'updater la table METD_VALUE
RS_METD_VALUE.close 'fermer la table METD_VALUE

next 'passer au prochain champs du formulaire

RS_DATASET_2.movenext 'passer a la prochaine image


loop 'refaire la procedure pour la prochaine image trouvé dans la table DATASET

'end if
set RS_METD_VALUE = nothing 'vider la table METD_VALUE

RS_DATASET_2.close 'fermer la table DATASET
set RS_DATASET_2 = nothing 'vider la table DATASET

4 réponses

cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
23 mars 2005 à 21:40
euh.. tu peux expliquer ce que tu fais en français car la c'est pas très clair ....
juste le principe général, table1 table2, ...

parceque là, il me semble que tu fais hyper compliqué pour pas grand chose...

En attendant:

Au lieu de
'*****************************************************
' connection pour recuperation dans la table DATASET
' de la valeur DATS_ID de la collection selon le nom
' de la collection. Plusieurs collections sont insérés dans la
' meme table dataset, mais chacune ayant un id différent.
' Attacher lr id à chaque nouvelle enregistrement (formulaire)
'****************************************************
Connection_M3Cat strCon strSqlNameCollection "SELECT DATS_ID, DATS_NAME FROM DATASET WHERE DATS_NAME '"& metadata_name_collection &"'"
Set RS_DATASET = Server.CreateObject("ADODB.Recordset")
RS_DATASET.CursorType = 1
RS_DATASET.LockType = 1
'ouverture de la bd selon la requete et infos de la bd
RS_DATASET.Open strSqlNameCollection, strCon
DATS_COLLECTION_ID = RS_DATASET("DATS_ID")
RS_DATASET.Close
set RS_DATASET = nothing
'****************************************************
' fin recuperation
'****************************************************

'*****************************************************
' connection pour recuperation, dans la table DATASET,
' de chaque image ayant un PARENT_DATS_ID (id de la collection trouvé + haut)
' égal a la celui de la collection DATS_ID
'**************************************************** strSqlDataset "SELECT * FROM DATASET WHERE PARENT_DATS_ID "& DATS_COLLECTION_ID
Set RS_DATASET_2 = Server.CreateObject("ADODB.Recordset")
RS_DATASET_2.CursorType = 1
RS_DATASET_2.LockType = 1
RS_DATASET_2.Open strSqlDataset, strCon

'tu peux faire directement
'*****************************************************
' connection pour recuperation, dans la table DATASET,
' de chaque image ayant un PARENT_DATS_ID (id de la collection trouvé + haut)
' égal a la celui de la collection DATS_ID
'**************************************************** strSqlDataset "SELECT * FROM DATASET WHERE PARENT_DATS_ID (SELECT DATS_ID FROM DATASET WHERE DATS_NAME = '"& metadata_name_collection &"')"
Set RS_DATASET_2 = Server.CreateObject("ADODB.Recordset")
RS_DATASET_2.CursorType = 1
RS_DATASET_2.LockType = 1
RS_DATASET_2.Open strSqlDataset, strCon

'*****************************************************
' boucle qui sélectionne chaque image de la table dataset
' ayant le PARENT_DATS_ID de la collection, insere
' les valeur du formulaire et ce pour chaque image,
'*****************************************************

A propos:
DATASET_NAME = RS_DATASET_2("DATS_NAME") 'tu ne l'utilises pas ??

Et la partie

for i = 1 to 3
select case i
case "1" 'champs 1
NameForm = Browse_Graphic_File_Name
Form_Metd_Id = Browse_Graphic_File_Name_id
case "2" 'champs 2
NameForm = Browse_Graphic_File_Description
Form_Metd_Id = Browse_Graphic_File_Description_id
case "3" 'champs 3
NameForm = Browse_Graphic_File_Type
Form_Metd_Id = Browse_Graphic_File_Type_id
case else 'aucun champs (erreur)
NameForm = ""
Form_Metd_Id = ""
End Select

Je ne la comprends pas du tout ???

tes valeurs seront toujours
NameForm = Browse_Graphic_File_Type
Form_Metd_Id = Browse_Graphic_File_Type_id

pourrais-tu expliquer ce que tu as comme tables, ce que tu a comme formulaire et ce que tu veux faire ?

yopyop
0
cs_Jackboy Messages postés 757 Date d'inscription vendredi 7 septembre 2001 Statut Membre Dernière intervention 19 juin 2008
24 mars 2005 à 20:32
salut !

bien merci d'avoir pris le temps de me reponde. Pour ce qui est de la boucle for, je recupere les champs du formulaire. Ce qui arrive ces que j'ai une bd donc la table DATASET qui comporte au dessus de 1700 enregistrement (images), chaque image est relie a une collection, je dois recuperer le id de l'image ainsi que l'id de sa collection, pour chaque images je dois insérerer ou editer les valeurs de chaque champs de mon formulaire et ce a la queue dans la table METD_VALUE.

Explication de la procedure :

L'usager choisi une collection (ex.: ESM 2003) et un type de formulaire (Browse Graphics), je recupere donc l'id de la collection. Je recupere chaques champs de mon formulaire. J'ai une table respective pour chaque formulaire pour en garder la sauce pour edition ulterieur donc j'entre les modification dans la table respective au formulaire(ex.: METS_EDIT_BROWSEGRAPHICS). Ensuite je fais un regExp au cas ou l'url a mis un %20 car s'il y avait un espace, je remet donc l'espace car sinon un erreur, ensuite j'ouvre ma table DATASET pour en recuperer l'id de la collection choisi précédement par l'usager, ensuite je réouvre ma table DATASET pour en recuperer chaque images boucle (do while not RS_DATASET_2.EOF) ayant l'id de la collection correspondante. Pour chaque image trouvé je recupere le premier champs de mon formulaire (boucle for), j'ouvre METD_VALUE et je vérifie si mon enregistrement est present dans ma table, si oui (if RS_METD_VALUE.RecordCount <> "-1" and RS_METD_VALUE.RecordCount > "0") j'edite mon enregistrement, sinon je l'ajoute a la queue, je ferme et j'update METD_VALUE et je boucle mon for pour recuperer le prochain champs ( i ) et je refait la procedure (de meme pour chaque champs de mon formulaire ce qui peut etre long car peut aller a 16 champs) ensuite les champs passé je passe a la prochaine image et refait la procedure en entier...

héhé du stock tous sa... je sais qu'il y a optimisation possible, ces ma raison de ma venu sur le forum !!!!
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
24 mars 2005 à 23:32
Salut,

Pourrais-tu m'envoyer ton code asp + une description complète de ta base de donneés (tables,champs, contraintes d'intégrités).

J'ai un long weekend (Pâques) et je veux bien passer un peu de temps pour te donner un coup de main (si j'y arrive).

yopyop
0
cs_Jackboy Messages postés 757 Date d'inscription vendredi 7 septembre 2001 Statut Membre Dernière intervention 19 juin 2008
25 mars 2005 à 06:35
salut !

bien merci beaucoup ! je t'ai envoyer le tout en message privé, j'attend de tes nouvelles !!! thx !!
0
Rejoignez-nous