- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- aprire chiudere db
-
è vero, query troppo pesanti, e molti recordset restituiti, purtroppo, ho cercato di limitare i campi su cui effettuare la ricerca, ma più di questo non posso, la restituzione dei recordset non dipende da me.
Dal tronde, le ricerche devono essere soddisfacenti.
Secondo te cosa potrei fare per migliorare un pò la situazione???grazie, ciao.
-
quanti record vengono restituiti? Ti servono proprio tutti? Li spari tutti nelle pagina?
-
no, non li sparo tutti nella pagina, ma devo sempre aprire un recordset per spulciarvi dentro...
-
Ecco allora mi sa che è quello "spulciare" che ti rallenta tutto.
Che operazioni ci fai sopra?
-
Beh, adesso ti faccio mettere le mani ai capelli:D, questo è il codice di un solo database.
//------------------------------------------------------------Database infoterritoriali set conn = server.createobject("ADODB.Connection") conn.open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "& server.MapPath("/database/***.mdb")) //-----------------------------------------------------------Personaggi Storici set recset = Server.createobject("ADODB.Recordset") //gestione contatore set recCount = Server.CreateObject("ADODB.Recordset") set recCount = conn.execute ("Select count(*) as recTot from personaggiStorici") if TipoDiRicerca = "FraseIntera" then sql = "SELECT * FROM personaggiStorici WHERE nome LIKE '%"&ParoleDaCercare&"%' OR nm LIKE '%"&ParoleDaCercare&"%' OR descrizione LIKE '%"&ParoleDaCercare&"%'" else sql = "Select * FROM personaggiStorici Where((" x=0 for each word in ArrSearch word = trim(word) sql = sql & "nome LIKE '%"&word&"%' OR nm LIKE '%"&word&"%' OR descrizione LIKE '%"&word&"%'" sql = sql & ")" if Not x=UBound(ArrSearch) then sql = sql & cond &"(" x = x+1 next sql = sql & ")" sql=sql end if recset.Open sql, conn, 1, 3 if recset.eof then TrovatoRisultati = False else TrovatoRisultati = True do while not recset.eof conto = lcase(recset("nome"))&lcase(recset("descrizione"))&lcase(recset("nm")) call contoParoleTrovate(conto) call mettiArr() //trova gli apici da mettere nella querystring nome = replace(recset("nome"),"'","%27%27") // sostituisci il segno - con a.C. if instr(recset("anno"),"-") > 0 then intAnno = replace(recset("anno"),"-","a.C. ") strAnno = split(intAnno," ") anno = strAnno(1)&strAnno(0) end if //Aggiungi il risultato negli array ArrayRisultatiRicerca(ArrayPosizioneRisultati) = "<table width=""100%"" ><tr><td><a href='mioSito.it/storia/personaggistorici.asp?termine="&nome&"&cat=libera' target='_self'>"&recset("nome")&" - "&anno&"</a> <em><font color=""#666666"" size=""2""> "&conteggio&" occorrenze trovate</font></em> </td><td align=""right"" width=""120""><font size='2'><a href='mioSito.it/storia/personaggistorici.asp' target='_self'>Ricerca Avanzata</a></font></td><tr><td colspan=""2"">"&VbCrlf&"I personaggi storici dal 500 a.C. fino al 1900 d.C. </td></tr></table>" recset.movenext Loop //chiude if trovatoriusltato end if //contatore records in database recTot = recCount("recTot") + recTot //chiudo pulisco va chiuso ogni volta che si cambia tabella recCount.Close set recCount = nothing recset.Close set recset = nothing //----------------------------------------------------------- Fine Tabella // chiudo e pulisco la connessione va chiusa e riaperta ogni volta che si cambia database conn.Close set conn = nothing
Purtoppo non posso eliminare nulla, che dici, sono proprio inguaiato???
-
Ho dato un'occhiata al codice.
Confermo la mia ipotesi sul fatto che il tutto rallenta per le operazioni che fai dopo e non per il recordset.L'uso degli array di sicuro ti rallenta.
Poi non posso vedere alcune funzioni che chiami nel codice perchè non ci sono nel listato che hai incollato.
Ti consiglio di cominciare ad isolare le cose.
Commenta una alla volta le funzioni nel "do while not recset.eof"
-
do while not recset.eof // somma tutte le occorrenze trovate tra i campi conto = lcase(recset("nome"))&lcase(recset("descrizione"))&lcase(recset("nm")) // chiama la funzione passando il parametro di sopra, serve per contare quane parole sono state trovate // la riporto sotto call contoParoleTrovate(conto) // chiama una funzione che mette questa riga in un'array, che verrà stampato nella pagina call mettiArr() //questo passo non è molto importante, serve a sostituire alcuni caratteri che potrebbero darmi fastidio //trova gli apici da mettere nella querystring nome = replace(recset("nome"),"'","%27%27") // sostituisci il segno - con a.C. if instr(recset("anno"),"-") > 0 then intAnno = replace(recset("anno"),"-","a.C. ") strAnno = split(intAnno," ") anno = strAnno(1)&strAnno(0) end if //qui mi costruisco un'array formato da una tabella, con i valori principali dei recordset trovati, con link alla pagina. //Aggiungi il risultato negli array ArrayRisultatiRicerca(ArrayPosizioneRisultati) = "<table width=""100%"" ><tr><td><a href='mioSito.it/storia/personaggistorici.asp?termine="&nome&"&cat=libera' target='_self'>"&recset("nome")&" - "&anno&"</a> <em><font color=""#666666"" size=""2""> "&conteggio&" occorrenze trovate</font></em> </td><td align=""right"" width=""120""><font size='2'><a href='mioSito.it/storia/personaggistorici.asp' target='_self'>Ricerca Avanzata</a></font></td><tr><td colspan=""2"">"&VbCrlf&"I personaggi storici dal 500 a.C. fino al 1900 d.C. </td></tr></table>" recset.movenext Loop
riporto qui le due funzioni:
questa funzione ordina l'array tramite metodo bubble sort in base alle occorrenze trovate// conta quante parole sono state trovate Public function contoParoleTrovate(conto) corrCount = 0 conteggio=0 for each word In ArrSearch word = trim(word) word = lcase(word) tet=0 for y=1 to len(conto) tet=instr(conto, word) if tet > 0 then conteggio=conteggio+1 conto=mid(conto,tet+1) end if next corrCount=corrCount+1 next end function ```questa funzione serve per mettere il risultato negli array, è stata fatta una funzione, per evitare la ripetizione di queste righe in tutti i database
//Questa Sub evita le ripetizioni dentro le molteplici ricerche e contiene il codice per mettere il risultato negli array
Public Sub mettiArr()//Calcola il totale dei file nei quali è stata effettuata la ricerca TotaleFileCercati = TotaleFileCercati + 1 //Calcola il totale dei file trovati TotaleFileTrovati = TotaleFileTrovati + 1 //Calcola che i file visualizzati non superino il numero di file da visualizzare per pagina If FileVisualizzati < (RecordsPerPagina + NumeroFile) and TotaleFileTrovati > FileVisualizzati Then //Incrementa il numero di file visualizzati FileVisualizzati = FileVisualizzati + 1 //Mette i risultati della ricerca nell' Array dei risultati e calcola la posizione nell'Array del risultato ottenuto ArrayPosizioneRisultati = ArrayPosizioneRisultati + 1 end if //Dichiara di aver trovato una corrispondenza CorrispondenzaTrovata = True
end Sub
Vorrei ringraziarti di cuore per il tuo interesse. un saluto.
-
Purtroppo io non posso provare il codice ma mi sembra che sia un po incasinato.
Per ottimizzarlo dovrei mettermi a testarlo.
Isola il problema commentando righe di codice e funzioni. Così scopri chi è che perde troppo tempo.
Almeno ci si focalizza solo su quello
-
allora, io ad esempio, provo a fare a meno della funzione contoparole, se lo script va più veloce, vuol dire che il problema sta li, se no, provo ad isolare un'altra funzione, o a semplificarla al massimo o a bypassare parti del codice.
Ti ringrazio, anche se ci vorrà del tempo, posterò in futuro il problema che troverò.
Se vuoi comunque, posso inviarti il codice intero.
Un saluto.
-
Esatto devi fare proprio quello che hai detto.
Purtroppo non ho molto tempo. Cerco di dare una mano quando richiede pochi minuti. Sono a lavoro e lo faccio nei ritagli di tempo.
Trova la parte di codice che rallenta e magari si vede di ottimizzare quella.
A mio avviso comunque fai troppi passaggi.
Per riscrivere il codice bisognerebbe capire cosa deve fare la pagina e come sono strutturati i dati nel database...ci vorrebbe un po di tempo che non ho.
Magari c'è qualcun altro disponibile.Ciao
-
Ti ringrazio per la tua disponibilità, hai già fatto molto per aiutarmi.
Un saluto.