Newsgroup: it.comp.lang.javascript
Titolo: Problema con recordset e ciclo

Ciao, non riesco a risolvere questo problema. Ho un ciclo che in base a
un parametro ricerca seleziona delle colonne di un tabella (fa passare
tutte le tabelle del db). Per ogni tabella ricerco in ogni record una
serie di parole. Appena una parola è stata trovata stampo un output. Il
problema è  che il ciclo mi da un errore quando apre la tabella seguente
a quella in cui è  stata trovata un parola. L'errore si verifica al
momento della Open Questo è il codice
for( i=0 ; i < tipi.length ; i++)
{
	var Ricerca = Server.CreateObject("ADODB.Recordset");
	Ricerca.ActiveConnection = MM_prodotti_STRING;
	Ricerca.Source="SELECT Codice_prodotto, Nome_prodotto FROM "+tipi[i];
	Ricerca.CursorType = 0;
	Ricerca.CursorLocation = 2;
	Ricerca.LockType = 1;
	Ricerca.Open();
	while( !(Ricerca.EOF)){
		var tmp = String(Ricerca.fields.item("Nome_prodotto")).toLowerCase();
		// Eseguo la ricerca
		for ( j=0 ; j < r_parole.length ; j++){
			if ( tmp.indexOf(r_parole[j]) != -1 ){
				// Se corretto stampo un output					
				j = r_parole.length; // è inutile continuare il ciclo
			}
		}
		Ricerca.move(1);
	}
	Ricerca.Close();
}

 momento della Open Questo è il codice
Non so aiutarti perche' non ho mai usato questa sintassi per i DB, ma se non 
ricevi risposta qui chiedi in it.comp.www.asp visto che non mi sembra tanto 
un problema di JavaScript quanto piu' di ASP/ADO
Dai un occhio al sito di Carlo Pelliccia: 
http://www.sauronsoftware.it
<PROMO>
E se sei interessato ad approfondire ti consiglio vivamente i due libri
</PROMO>
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

[...]
Scusa se faccio un megacut, ma vorrei sapere quale e' il messaggio di errore
restituito.
A parte il messaggio di errore ci sono alcune questioni logico / sintattiche
da mettere a posto visto che cosi' com'e' lo script causa un notevole spreco
di risorse per il server.
Tre cose a colpo d'occhio:
- l'oggetto recordset viene istanziato molte volte (ne basta una)
- la ricerca viene fatta ciclando un array: meglio farla direttamente in
SQL. SQL a parte, in altri casi considera un search su una stringa
- Recordset.fields.item(fieldName) e' una sintassi che ti restituisce un
oggetto field e non il suo valore (che e' quello che ti interessa)
Queste cose non per pignoleria, ma perche' non sempre basta la correttezza
sintattica a far funzionare un programma.
Ciao

Andrea Scartabelli ha scritto:

Stò per impazzire, è tutto il giorno che cerco soluzioni ma non ne trovo. 
Devo fare una ricerca nella stessa pagina tra più di 10 tabelle. Ho 
scoperto che facendo una cosa semplice del genere non funziona.
Non ho messo il codice tra la open e la close tanto era ininfluente.
for(i=0;i<tipi.length;i++){
	var Ricerca = Server.CreateObject("ADODB.Recordset");
	Ricerca.ActiveConnection = MM_prodotti_STRING;
	Ricerca.Source = "SELECT * FROM "+tipi[i];
	Ricerca.Open();
	Ricerca.Close();
}
Ho scoperto che quando tipi.length è più di 10 la pagina mi restituisce 
un errore. Da questo ho dedotto che non si possono fare scorrere più di 
10 tabelle. Il codice è corretto perchè se metto 9 la pagina funziona 
correttamente. 
Allora ho provato a fare la union tra le 15 tabelle (di max 10 record su 
2 colonne...quindi senza perdita di prestazioni) ma OvViamente (anche li 
ho fatto le prove) fino a 10 union ok mentre se sono di più mi da errore
L'errore è sempre quello:
[Microsoft][Driver ODBC Microsoft Access] Il modulo di gestione del 
database Microsoft Jet non è in grado di trovare la tabella o la query in 
input 'scan'. Verificare che il nome esista e che sia stato digitato 
correttamente
Come posso fare??!?!?!?!? Aiutatemi!!!!
-- 
Davide

Quello che dici è senza senso: non stai facendo una union o altro su X
tabelle, stai facendo N query INDIPENDENTI tra loro...quindi il limite 10
non lo capisco proprio...
Io comunque dichiarerei lo/gli oggetti al di fuori del ciclo e userei lo
stesso oggetto (casomai non riesca per qualche ignoto motivo a
distruggerlo...)
 var Ricerca = Server.CreateObject("ADODB.Recordset");
 Ricerca.ActiveConnection = MM_prodotti_STRING; <=che avrai dichiarato da
qualche altra parte, immagino...
 for(i=0;i<tipi.length;i++){
 Ricerca.Source = "SELECT * FROM "+tipi[i];
 Ricerca.Open();
 ....qua scriverai i tuoi risultati....
 Ricerca.Close();
 }
Ricerca="";Ricerca=null;
Per l'errore: non trova scan => avrai tipi[10]='scan' e questa tabella non
esiste (l'errore sembrerebbe questo)

 Come posso fare??!?!?!?!? Aiutatemi!!!!
Io insisto che se il codice e' sintatticamente corretto non vuole dire che
funzioni.
Se in ASP mandi in saturazione la memoria, metti oggetti nelle sessioni,
istanzi 10 oggetti senza distruggerli, ridichiari continuamente variabili in
cicli annidati o amenita' del genere aspettati pure che IIS ti risponda: "Io
non esisto".
Dando ovviamente per scontato che la tabella ci sia:
- hai provato a spostare la posizione di "scan" nel tuo array "tipi"?
- hai provato ad accedere solamente alle tabelle senza fare altre operazioni
(tipo cercare corrispondenze con le parole)?
- hai provato a rinominare la tabella (casomai avessi beccato una qualunque
stupida parola riservata, anche se con Jet / Access non mi risulta) ?
- dopo queste prove e' sempre la solita tabella a dare l'errore o e' sempre
al decimo ciclo che spunta?
In verita' potrebbe anche esserti sfuggito qualcosa nel pezzo di codice che
non hai postato, ma dal canto mio non ritengo nessuna prova valida finche'
il codice rimane in quella forma e spreca inutilmente risorse.
Almeno almeno, fammi contento, sposta la dichiarazione dell'oggetto fuori
dal ciclo...
Ciao

Vi ringrazio moltissimo per tutti i suggerimenti che mi avete dato!!
-- 
Davide