Ciao a tutti,
sono difronte a un problema per me gravoso, perchè mi sta bloccando totalmente su un lavoro, spero possiate darmi una mano voi perchè non so più che pesci pigliare...
Ho applicato, modificandolo per mie esigenze specifiche, uno script ASP di ordinamento random di un recordset che ho trovato in rete al seguente indirizzo:
http://www.aspcode.it/articoli/84_Re...omicamente.htm
(mi scuso se la pubblicazione di un link a un sito esterno va contro le regole del forum, ma in questo caso credo sia utile per farvi capire meglio dove ho messo mano io rispetto allo script originale...)
Questo il codice (modificato, ma funzionante) che sto utilizzando:
Come vedete, tale script, oltre ad estrarre dal DB un recordset da randomizzare, ha il compito di prendere i dati estratti e formattarli in modo da generare un output di tipo XML (come da altro esempio trovato in rete).codice:<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% Set rs = Server.CreateObject("adodb.recordset") ConnStr = "Provider=Microsoft.Jet.Oledb.4.0;data source=" &_ Server.MapPath("database/miodb.mdb") & ";" rs.activeconnection = ConnStr rs.Source = "SELECT IDcat FROM categorie" 'Seleziona gli ID delle categorie rs.Open arrID = rs.GetRows() ' Salva nell'array gli ID delle categorie intRows = UBound(arrID,2) 'numero delle categorie, meno uno (0..N-1) rs.Close rs.Source = "SELECT IDcat, titolo, foto FROM categorie" rs.CursorType = 0 ' adForwardOnly rs.CursorLocation = 3 ' cursore lato client rs.Open Set rs.ActiveConnection = Nothing ' ci "stacchiamo" dalla sorgente dati%> <% Set objDic = CreateObject("Scripting.Dictionary") ' Riempiamo il Dictionary con gli ID delle categorie For i = 0 To intRows objDic.Add arrID(0,i), arrID(0,i) Next Randomize Timer For intCurrentRow = 0 To intRows intRnd = Int((intRows + 1) * RND) + 1 'ID random boolExists = objDic.Exists(intRnd) If boolExists Then ' se L'ID esiste nel Dictionary... rs.Move intRnd - 1, 1 ' ...muoviamo il puntatore sulla riga bersaglio... objDic.Remove(intRnd) ' ...e cancelliamo l'ID dal Dictionary ' Mostriamo il record selezionato casualmente%> <% xml = xml & "<track>" xml = xml & "<title><![CDATA[" & rs("titolo") & "]]></title>" xml = xml & "<image><![CDATA[" & rs("foto") & "]]></image>" xml = xml & "</track>" %> <% Else intCurrentRow = intCurrentRow - 1 ' se l'ID non esiste, ripetiamo lo stesso ciclo FOR End If Next xml = xml & "</trackList></playlist>" xml = "<playlist version=""1"" xmlns=""http://xspf.org/ns/0/""><title>Il mio elenco</title><info>http:/xspf.org/xspf-v1.html</info><trackList>" & xml response.ContentType = "text/xml" response.write xml rs.Close : Set RS = Nothing Set objDic = Nothing %>
Queste 2 funzionalità funzionano correttamente, fino a quando non aggiungo un nuovo record al mio DB e la pagina ASP/XML non mi visualizza più niente, anzi, si pianta. Ho notato che quando aggiungo (manualmente o tramite apposito manager) un nuovo record, questo assume un ID che non è consecutivo a quelli dei records di esempio già presenti (6 records, con ID dall'1 al 6), questo per effetto di precedenti test di inserimento/cancellazione.
Quindi, nel caso specifico, l'ID del nuovo record non sarà 7 ma, ad esempio, 25.
Il risultato, come detto, è che la pagina ASP atta a restituirmi i dati che mi servono non si carica, pagina bianca e tutto piantato...![]()
Se invece cancello il record appena creato, tutto rifunziona magicamente, questo mi fa pensare che il nuovo ID (non consecutivo agli altri 6) non piaccia allo script.
Cosa devo fare? C'è qualcuno tra voi che può aiutarmi, magari mettendo mano al codice o al DB, per risolvere questo problema?
Vi ringrazio molto per l'aiuto e la disponibilità, spero di ricevere presto delle risposte!![]()
![]()
t.

Rispondi quotando
edit: mi sa che non va... provo a ritrovare il codice che avevo usato
