128 messaggi dal 01 febbraio 2006
Ho scritto il seguente script per la creazione di un file in excel da un recordset, ma quando lo apro mi da il seguente errore:

"L'operazione non è consentita se l'oggetto è chiuso"

Per quale motivo?

<%
fileName = "C:\miofile.xls"
Response.Buffer = true
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition","attachment;filename=" & filename
Set rs_prodotto = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM tbl_prodotto WHERE Disponibile = '" + Replace(rs_prodotto__Param, "'", "''")
rs_prodotto.ActiveConnection = conn_STRING
Response.Write "<table>"
Do Until rs_prodotto.Eof = True
%>
<%Response.Write "<tr><td bgcolor='#ffffff' align=center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("marca_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("modello_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("ID_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("descrizione_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("prezzo_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'></td></tr>"
Response.Write "</table>"
%>
<%
rs_prodotto.MoveNext
loop
Response.Flush
Response.End
rs_prodotto.Close
Set rs_prodotto = Nothing
Set conn_STRING = Nothing
%>

Grazie a tutti.

Ciao

Agostino Pasquin
Mi sembra ci siano un bel po' di errori: l'istruzione sql non è associata al recordset, activeconnection *non* deve essere la connection string ma una adodb.connection aperta.

Prova con una cosa di questo tipo:

Set cn = Server.CreateObject("ADODB.Connection")
cn.Open conn_STRING

strSQL = "SELECT * FROM ..."

Set rs_prodotto = Server.CreateObject("ADODB.Recordset")
rs_prodotto.CursorLocation = 3;
rs_prodotto.Open strSQL, cn

...

Matteo Casati
GURU4.net
128 messaggi dal 01 febbraio 2006
L'ho risistemato in questo modo:
<%
fileName = "C:\miofile.xls"
Response.Buffer = true
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition","attachment;filename=" & filename
Set rs_prodotto = Server.CreateObject("ADODB.Recordset")
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open conn_STRING
strSQL = "SELECT * FROM tbl_prodotto"
Set rs_prodotto = Server.CreateObject("ADODB.Recordset")
rs_prodotto.Open strSQL, cn
Response.Write "<table>"
Do while not rs_prodotto.Eof
%>
<%Response.Write "<tr><td bgcolor='#ffffff' align=center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("marca_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("modello_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("ID_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("descrizione_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'><font face='verdana' size='2'>" %>
<%= rs_prodotto("prezzo_prodotto") %>
<% Response.Write "</td><td bgcolor='#ffffff' align='center'></td></tr>"
Response.Write "</table>"
rs_prodotto.MoveNext
loop
%>
<%
Response.Flush
Response.End
rs_prodotto.Close
Set rs_prodotto = Nothing
Set conn_STRING = Nothing
%>

Adesso funziona ma ho un altro problema.

Infatti mi sistema la prima riga del foglio correttamente, poi nella seconda riga mette tutto il resto delle informazioni. C'è di sicuro un errore nel ciclo di ripetizione ma non so dove.

Ciao e grazie ancora

Agostino Pasquin
Sposta l'istruzione Response.Write "</table>" fuori dal loop

Matteo Casati
GURU4.net
128 messaggi dal 01 febbraio 2006
Spostato fuori dal loop e funziona, ma stranamente mostra solo la metà dei record. (Sono 80 e ne mostra 40)

<% Response.Write "</td><td bgcolor='#ffffff' align='center'></td></tr>"
rs_prodotto.MoveNext
loop
Response.Write "</table>"
%>

Perche?

Grazie mille

Agostino Pasquin
635 messaggi dal 06 settembre 2002
Ciao,
prova a fare questo test:
dopo

rs_prodotto.Open strSQL, cn

scrivi:
{code]
Response.Write(rs_prodotto.RecordCount) 'Visualiz.tot record trovati da strSQL
Response.End 'Blocca l'esecuzione dello script
[/code]

In questo modo vedi se la query restituisce tutti gli 80 record.

Se il codice sopra ti visualizza 80 allora, molto probabilmente il record successivo a quello estrapolato o l'ultimo campo del 40 record contiene un carattere jolly che blocca l'esecuzione dello script.

Ciao.

OJD

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.