Newsgroup: it.comp.appl.access
Titolo: [ASP]Esportare DB Access in un Foglio Excel, come fare?

Ho trovato/creato la procedure per creare una pagina ASP che carica in una 
pagina web tutto il DB Access.
Adesso vorrei predisporre in fondo alla pagina un pulsante con scritto 
Esporta, che esporta l'intero DB in un foglio Excel.
Come potrei modificare il mio codice?
Grazie
------CODICE-----
<%
'************************************
'Linkbruttocane per vademecum
'il database va messo in mdb-database
'************************************
strFile = "GestioneCompletaAnagraficaIscritti.asp"    'il nome di questo 
file
strTable = "Rubrica"           'nome tabella
strKey = "ID"          'chiave primaria, contatore
bgHeaderColor = "Orange"
fontHeaderColor = "black"
bgColor1 = "Silver"
fontColor1 = "Black"
bgColor2 = "White"
fontColor2 = "Black"
Set MyConn=Server.CreateObject("ADODB.Connection")
MyConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & 
server.MapPath("/mdb-database/Circolo_Liberta_Teodolinda_DB.mdb")
'**************************************
'azioni da eseguire
'**************************************
Select Case Request("mode")
  Case "ExportDB"
  ExportDB
 Case Else
  ShowAll
End Select
'**************************************
Sub ShowAll()
 MySQL="Select * from " & strTable
 Set MyRs=MyConn.Execute(MySQL)
 Response.write ("<h2> Gestione Anagrafica Circolo della Liberta - Monza e 
Brianza</h2>")
 Response.write ("<p><a href=""" & strFile & "?mode=AddItem""><font 
size=""2"">AGGIUNGI NUOVO</font></a></p>")
 Response.write ("<table border=""1"" cellpadding=""4"" cellspacing=""1"">")
 Response.write ("<tr>")
 numerocampi=MyRs.fields.count -1
 Response.write ("<td bgcolor=""" & bgHeaderColor & """ align=""Center"" 
nowrap><font color=""" & fontHeaderColor & """ size=""2"">Elimina 
Iscritto</font></td>")
 Response.write ("<td bgcolor=""" & bgHeaderColor & """ align=""Center"" 
nowrap><font color=""" & fontHeaderColor & """ size=""2"">Modifica 
Iscritto</font></td>")
 for i=0 to numerocampi
  if Not MyRs(i).name = "ID" then
   Response.write ("<td bgcolor=""" & bgHeaderColor & """ align=""Center"" 
nowrap><font color=""" & fontHeaderColor & """ size=""2"">" & MyRs(i).name & 
"</font>&nbsp;</td>")
  end if
 next
 Response.write ("</tr>")
 do while not MyRs.eof
 if bgColor = bgColor2 then
  bgColor = bgColor1
  fontColor = fontColor1
 else
  bgColor = bgColor2
  fontColor = fontColor2
 end if
 Response.write ("<tr>")
 Response.write ("<td align=""Center"" valign=""Top"" bgcolor=""" & bgColor 
& """>")
 Response.write ("<font color=""" & fontColor & """><A HREF=""" & strFile & 
"?mode=DelItem&which=" & MyRs(strKey) & """>Elimina</A></font></td>")
 Response.write ("<td align=""Center"" valign=""Top"" bgcolor=""" & bgColor 
& """>")
 Response.write ("<font color=""" & fontColor & """><A HREF=""" & strFile & 
"?mode=EditItem&which=" & MyRs(strKey) & """>Modifica</A></font></td>")
 for i = 0 to numerocampi
  if Not MyRs(i).name = "ID" then
  '  if MyRs(i).name = "QUOTA_VERSATA_2007" then
  '  ThisRecord = FormatCurrency(MyRs(i))
  '  strAlign = "right"
  ' else
    ThisRecord = MyRs(i)
    strAlign = ""
  ' end if
   If IsNull(ThisRecord) or ThisRecord = "" Then
    ThisRecord = "&nbsp;"
   end if
   ThisRecord  = Replace(ThisRecord,vbCrLf,"<BR>")
   Response.write ("<td align=""" & strAlign & """ valign=top bgcolor=""" & 
bgColor & """><font color=""" & fontColor & """>" & Thisrecord & 
"</font>&nbsp;</td>")
  end if
 next
 Response.write ("</tr>")
 MyRs.movenext
 loop
 Response.write ("</table>")
 MyRs.close
 Set MyRs= Nothing
end sub
'************************************** IL CODICE SOTTOSTANTE VA MODIFICATO 
PER PERMETTERE L'ESPORTAZIONE ALL'INTERNO DI UN FOGLIO EXCEL
Sub ExportDB
 MySQL="Select * from " & strTable
 Set MyRs=MyConn.Execute(MySQL)
                                            'QUI DEVE DIRGLI DI SCRIVERE SU 
UN FILE MA COME
 Response.write ("<h2> Gestione Anagrafica Circolo</h2>")
 numerocampi=MyRs.fields.count -1
 for i=0 to numerocampi
  if Not MyRs(i).name = "ID" then
   Response.write ("<td bgcolor=""" & bgHeaderColor & """ align=""Center"" 
nowrap><font color=""" & fontHeaderColor & """ size=""2"">" & MyRs(i).name & 
"</font>&nbsp;</td>")
  end if
 next
 Response.write ("</tr>")
 do while not MyRs.eof
 for i = 0 to numerocampi
  if Not MyRs(i).name = "ID" then
    ThisRecord = MyRs(i)
    strAlign = ""
   If IsNull(ThisRecord) or ThisRecord = "" Then
    ThisRecord = "&nbsp;"
   end if
   ThisRecord  = Replace(ThisRecord,vbCrLf,"<BR>")
   Response.write ("<td align=""" & strAlign & """ valign=top bgcolor=""" & 
bgColor & """><font color=""" & fontColor & """>" & Thisrecord & 
"</font>&nbsp;</td>")
  end if
 next
 Response.write ("</tr>")
 MyRs.movenext
 loop
 Response.write ("</table>")
 MyRs.close
 Set MyRs= Nothing
end sub
' CREDO CHE CI SIANO ANCHE GROSSI PROBLEME PER LA FORMATTAZIONE DEL FILE 
EXCEL.
Sapere Aiutarmi.
Grazie
Thommy

 Thommy
Ciao.
-- 
Sergio MAZZA 


Grazie
Quindi tu mi proponi il seguente codice:
---CODICE PROPOSTO---
<%
' stringa di conn
strConn = "Provider=sqloledb; Data Source=localhost; Initial Catalog=pubs; 
Integrated Security=SSPI;"
' apro la connessione
set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConn
' estraggo i dati
Set rs = conn.Execute("SELECT * FROM Authors")
for i = 0 to rs.Fields.Count-1
risultato = risultato & rs.Fields(i).Name & "</td><td>"
next
risultato = risultato & "</td></tr><tr><td>"
risultato = risultato & rs.GetString(,,"</td><td>","</td></tr><tr><td>", 
"-")
' chiusura
rs.Close
set rs = Nothing
conn.Close
set conn = Nothing
' modifico header per forzare l'apertura in Excel
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "content-disposition", "inline; filename=tabella.xsl"
' scrivo a video
Response.Write ("<table><tr><td>" & risultato & "</td></tr></table>")
%>
---FINE CODICE PROPOSTO---
L'ho integrata nel mio codice asp e pare funzionare. (Vedi Codice fondo 
pagina)
1) Pero' come mai quando apro il file xls Office mi dice: Il formato del 
file che si sta tentando di aprire è differente da quello dell'estensione.
2) E se invece volessi aggiungere anche la funzionalità che il nome delle 
colonne mi venissero riportate in Meretto (BOLD) come potrei fare?
3) E se non Volessi riportare la colonna ID basterebbe aggiungere: (SEMBRA 
FUNZIONARE)
-----------------------
for i = 0 to MyRs.Fields.Count-1
if MyRs(i).name = "ID" then
else
    risultato = risultato & MyRs.Fields(i).Name & "</td><td>"
end if
next
---------------------------
Corretto?
Grazie
Thommy
---------------Dovrei quindi modificarla con:-----------------------------
' stringa di conn
strConn ="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & 
server.MapPath("/mdb-database/database.mdb")
' apro la connessione
Set MyConn=Server.CreateObject("ADODB.Connection")
MyConn.Open strConn
' estraggo i dati
MySQL="Select * from " & strTable
Set MyRs=MyConn.Execute(MySQL)
for i = 0 to MyRs.Fields.Count-1
risultato = risultato & MyRs.Fields(i).Name & "</td><td>"
next
risultato = risultato & "</td></tr><tr><td>"
risultato = risultato & MyRs.GetString(,,"</td><td>","</td></tr><tr><td>", 
"-")
' chiusura
MyRs.Close
set MyRs = Nothing
MyConn.Close
set MyConn = Nothing
' modifico header per forzare l'apertura in Excel
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "content-disposition", "inline; 
filename=RubricaIscritti.xls"
' scrivo a video
Response.Write ("<table><tr><td>" & risultato & "</td></tr></table>")
%>
---------------Fine modifica:-----------------------------

 Corretto?
Solo il risultato che vedi può darti la sensazione che tutto sia corretto...


 Solo il risultato che vedi può darti la sensazione che tutto sia corretto...
Purtroppo mi sono accorto solo oggi che il codice postato sopra
funziona correttamente per il titolo delle colonne ma poi non funziona
correttamente nella copia dei valori delle colonne.
Ottengo infatti
NOME | COGNOME
1

Scusa ho dato invio senza aver completato l'esempio.
Ottengo infatti:
NOME | COGNOME
1 | Mario | Rossi
2 | Carlo | Paperino
E ovviamente non va bene!
Idee?

 Io direi: basterebbe non includere il campo nella tabella.
Purtroppo mi sono accorto solo oggi che il codice postato sopra
funziona correttamente per il titolo delle colonne ma poi non funziona
correttamente nella copia dei valori delle colonne.
Ottengo infatti
NOME | COGNOME
1
[risposta]
Allora, oltre ad una guida HTML ti serve anche una guida ASP/ADO:
http://tutorial.aspitalia.com/ASP-base/
dove trovi questo:
http://www.aspitalia.com/articoli/db/introduzione.aspx
che dovrebbe chiarirti le idee.
La costruzione di una tabella partendo da un recorset č la cosa piů semplice 
che c'č; con quel codice ti complichi solo la vita...
Ciao.
-- 
Sergio MAZZA 

 che c'è; con quel codice ti complichi solo la vita...
Si ma il codice per esportare in un file excel la tabella, l'ho
copiato dal primo sito che gentilmente mi avevi passato tu.
Quindi dici che dovrei completamente cambiare il codice che genera il
file excel?
Io in questo pezzetto di codice volevo che nel file excel NON venisse
riportato il campo ID. Con il codice che ti ho scritto sopra in
effetti non mi riporta nel foglio excel il nome ID nella prima riga ma
purtroppo dalla riga 2 in poi carica i valori di questa riga,
sfalsandomi tutto.
Grazie
Thommy

 ha scritto nel messaggio 
news:1194527135.3...@e9g2000prf.googlegroups.com...
Se non sbaglio č la prima versione che aveo provato. I file xsl non
sono mica file excel, pensavo fosse un errore!
[risposta]
Documentarsi prima č meglio: 
http://it.wikipedia.org/wiki/XSL
Ma quando copio in un file non č un HTML.
[risposta]
Altro errore di fondo.
Una pagina ASP (ma non solo quella) genera output HTML; e non potrebbe fare 
altrimenti visto che la visualizzi con un browser web che interpreta solo 
quello.
Se non mettessi le righe:
...
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "content-disposition", "inline; filename=tabella.xsl"
...
che indicano la diversa natura dell'output, ti verrebbe visualizzato dentro 
il browser, il codice HTML generato dalle istruzioni Response.Write.
 Quindi non č che posso mettere
risultato = risultato & MyRs.Fields(i).Name & "</td><b></b><td>"
[risposta]
Quindi quello che devi fare č:
risultato = risultato & "<b>" &  MyRs.Fields(i).Name & "</b></td><td>"
Si ma il codice per esportare in un file excel la tabella, l'ho
copiato dal primo sito che gentilmente mi avevi passato tu.
[risposta]
Copiare va bene se si capisce quello che si fa.
Ecco un altro esempio probabilmente piů chiaro:
'--> elenco articoli inseriti
<%
dim tmp_objRstArticoli
strSQL = "SELECT strDescrizione FROM Offerte_dettagli ORDER BY idData DESC;"
set tmp_objRstArticoli = oConn.Execute(strSql)
if not tmp_objRstArticoli.eof then %>
<table border="0" padding="2px" width="100%">
    <tr>
    <td><font face="Verdana" size="2">Descrizione</font></td>
    </tr>
<%
     do while not tmp_objRstArticoli.eof
%>
<tr>
    <td><font style="font-family: Verdana, Arial; 
font-size:.7em;"><b><%=tmp_objRstArticoli("strDescrizione")%></b></font></td>
</tr>
<%
    tmp_objRstArticoli.movenext
   loop %>
</table>
...
E' una tabella con una sola colonna e la query non restituisce l'id, visto 
che non mi serve (in output); i valori del campo 
tmp_objRstArticoli("strDescrizione") sono formattati con un carattere 
diverso dall'intestazione e faccio riferimento al campo indicandolo per 
nome: tmp_objRstArticoli("strDescrizione").
Quindi dici che dovrei completamente cambiare il codice che genera il
file excel?
[risposta]
Io dico che prima di cambiare il codice, o di copiarlo, si dovrebbe capire 
quello che fa per poi saper intervenire nei punti interessati.
Io in questo pezzetto di codice volevo che nel file excel NON venisse
riportato il campo ID. Con il codice che ti ho scritto sopra in
effetti non mi riporta nel foglio excel il nome ID nella prima riga ma
purtroppo dalla riga 2 in poi carica i valori di questa riga,
sfalsandomi tutto.
[risposta]
C.V.D.
Grazie
Thommy
[risposta]
Ciao.
-- 
Sergio MAZZA 

 nome: tmp_objRstArticoli("strDescrizione").
[cut]
Grazie ancora.
Thommy 

 Grazie ancora.


 Ho fatto una prova: (WinXP+Sp2; Off2003+Sp2)
Windows Vista e Office 2007!

Ok grazie staserà provero' il codice.
Grazie
Thommy

 ha scritto nel messaggio 
news:1194601401.1...@k79g2000hse.googlegroups.com...
Windows Vista e Office 2007!
[risposta]
Non posso riprodurre l'ambiente, non ho Vista (so' cecato); posso provare 
con Off2007...
Ok grazie staserà provero' il codice.
Grazie
Thommy
[risposta]
Ciao.
-- 
Sergio MAZZA 

 %>
Cosě potrebbe anche funzionare ma non č ricorsivo come volevo! 

 Così potrebbe anche funzionare ma non è ricorsivo come volevo!
Queste tue affermazioni mi fanno sorridere; scusa ma è così.
Hai un codice che non riesci a modificare perché non lo hai interpretato, 
non ti documenti (altrimenti avresti già risolto) e se ti viene proposto un 
codice moolto più semplice al confronto del "tuo" codice che è (ovviamente) 
ottimizzato e parametrizzato.
Insomma, quello che voglio dire: se non riesci a scrivere codice "semplice", 
come pretendi di capire/scrivere codice ottimizzato?
Tutto questo non ha nulla a che fare con l'ostacolo dell'ambiente 
(Vista+Off2007 vs. WinXP+Off2003) che potrebbe non restituire il risultato 
voluto, anche se il codice (semplice o ottimizzato) è giusto e 
funzionante...
Ciao.
-- 
Sergio MAZZA 

 non ti documenti (altrimenti avresti già risolto) e se ti viene proposto un
[cut]
Se fossi un esperto ed un amante della programmazione non avrei certo
scritto qui, ma avrei risolto da solo. Non credi?
Se ho chiesto aiuto è perchè i miei interessi e skill sono differenti.
Grazie lo stesso comunque.
Thommy

 ha scritto nel messaggio 
news:1194856081.4...@v3g2000hsg.googlegroups.com...
Se fossi un esperto ed un amante della programmazione non avrei certo
scritto qui, ma avrei risolto da solo. Non credi?
[risposta]
Per come la vedo io non è un problema di "amore"; (in questo caso) se vuoi 
mettere le mani su del codice dovrai almeno capire se fa al caso tuo o no? 
Almeno per capire come riadattarlo.
Se ho chiesto aiuto è perchè i miei interessi e skill sono differenti.
[risposta]
Se hai chiesto aiuto è perché non hai capito il codice che volevi 
utilizzare.
Grazie lo stesso comunque.
Thommy
