Appunti di ASP Active Server Pages
Realizzazione di un modulo ASP per ADODB, generico per l’inserimento e la modifica dei dati che provengono da una qualsiasi form
Prima di tutto è necessario realizzare una procedura che nella pagina associata alla form in questione recepisca tutti i campi e valori passati
dalla form stessa che nell’esempio supporremmo in POST.
Tale procedura deve quindi fare il ciclo su tutti i campi che sono presenti nella form e creare due array
strArCampi = “”
For i = 2 To Request.Form.Count
strArCampi = strArCampi & Request.Form.Key(i) & “|”
Next
strArValori = “”
For i = 2 To Request.Form.Count
strArValori = strArValori & Request.Form.Item(i) & “|”
Next
il primo array dei nomi dei campi e l’altro dei valori di campo corrispondenti
ar_campi=split(strArCampi,”|”)
ar_valori=split(strArValori,”|”)
di seguito ho pensato ad una funzione che presi come argomenti la stringa di connessione al database utilizzato, il nome della tabella, e questi due array inserisca il record nel database.
Function ins_record(strConnectionString, nome_tab, ar_campi, ar_valori)
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open strConnectionString
set rstInsCl = Server.CreateObject(“ADODB.Recordset”)
Sql_Cl=”select * from ” & nome_tab
rstInsCl.Open Sql_Cl, conn, 1, 3
rstInsCl.addnew
for i = 1 to ubound(ar_campi)-1
select case Decode_tipo(tipo_campo(strConnectionString,”Schede”,ar_campi(i)))
case “date”
rstInsCl.fields(ar_campi(i)).value = FormatDateTime(ar_valori(i),VBShortDate)
case “text”
rstInsCl.fields(ar_campi(i)).value = ar_valori(i)
case “num”
rstInsCl.fields(ar_campi(i)).value = ar_valori(i)
case “bool”
if ar_valori(i)=”on” then
rstInsCl.fields(ar_campi(i)).value = true
else
rstInsCl.fields(ar_campi(i)).value = false
end if
end select
next
rstInsCl.update
end function
Dove in neretto ho inserito le due funzioni che mi servono per sapere il tipo di campo di ADODB e per decodificare in:
campo di tipo data
campo testo,
campo numerico
campo booleano (true/false)
Function tipo_campo(strConnectionString,nome_tab,nome_campo)
set objUserConn = server.createObject(“ADODB.Connection”)
set UserdataRec= Server.CreateObject(“ADODB.Recordset”)
objUserConn.Open strConnectionString*
Sql = “select * from ” & nome_tab
UserdataRec.Open sql, objUserConn, 2, 3
tipo_campo = UserdataRec.Fields(nome_campo).Type
UserdataRec.close
objUserConn.close
set objUserConn = nothing
set UserdataRec = nothing
end function
questa seconda funzione si appoggia ad una tabella che riporto sotto
Function Decode_tipo(cod_tipo)
set objUserConn = server.createObject(“ADODB.Connection”)
set UserdataRec= Server.CreateObject(“ADODB.Recordset”)
objUserConn.Open strConnectionString*
Sql = “select * from Tipi_campo where cod_tipo=” & cod_tipo
UserdataRec.Open sql, objUserConn, 2, 3
Decode_tipo= UserdataRec.Fields(“Classe”).value
UserdataRec.close
objUserConn.close
set objUserConn = nothing
set UserdataRec = nothing
end function
*dove strConnectionString è la stringa di connessione ADODB che nel caso provato con un database Access è :
Perc_db=server.MapPath(“/nome_cartella/nomedb.mdb”)
strConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”+ Perc_db
Tabella Tipi_campo di decodifica dei tipi ADODB decodificati dalla funzione Decode_tipo
tipo | cod_tipo | descr | classe |
---|---|---|---|
adEmpty | 0 | no value | null |
adSmallInt | 2 | 2-byte signed integer | num |
adInteger | 3 | 4-byte signed integer | num |
adSingle | 4 | Single-precision floating-point value | num |
adDouble | 5 | Double precision floating-point | num |
adCurrency | 6 | Currency format | num |
adDate | 7 | Number of days since 12/30/1899 | data |
adBSTR | 8 | Null-terminated character string | text |
adIDispatch | 9 | Currently not supported by ADO | |
adError | 10 | 32-bit error code | |
adBoolean | 11 | True or false Boolean | bool |
adVariant | 12 | Automation variant | |
adIUnknown | 13 | Currently not supported by ADO | |
adDecimal | 14 | Number with fixed precision and scale | num |
adTinyInt | 16 | 1-byte signed integer | num |
adUnsignedTinyInt | 17 | 1-byte unsigned integer | num |
adUnsignedSmallInt | 18 | 2-byte unsigned integer | num |
adUnsignedInt | 19 | 4-byte unsigned integer | num |
adBigInt | 20 | 8-byte signed integer | num |
adUnsignedBigInt | 21 | 8-byte unsigned integer | num |
adFileTime | 64 | Number of 100-nanosecond intervals since 1/1/1601 | num |
adGUID | 72 | Globally Unique identifier | num |
adBinary | 128 | Binary | |
adChar | 129 | String | text |
adWChar | 130 | Null-terminated Unicode character string | text |
adNumeric | 131 | Number with fixed precision and scale | num |
adUserDefined | 132 | User-defined variable | |
adDBDate | 133 | YYYYMMDD date format | date |
adDBTime | 134 | HHMMSS time format | date |
adDBTimeStamp | 135 | YYYYMMDDHHMMSS date/time format | date |
adChapter | 136 | 4-byte chapter value for a child recordset | |
adDBFileTime | 137 | Database file time | date |
adPropVariant | 138 | PROPVARIANT automation | |
adVarNumeric | 139 | Variable width exact numeric with signed scale | num |
adVarChar | 200 | String | text |
adLongVarChar | 201 | Long string value | text |
adVarWChar | 202 | Null-terminated Unicode character string | text |
adLongVarWChar | 203 | Long Null-terminates string value | text |
adVarBinary | 204 | Binary value | |
adLongVarBinary | 205 | Long binary value | num |
La stessa funzione però destinata alla modifica di un record esistente:
Argomenti:
- Stringa di connessione al database
- Nome tabella
- Array nomi campo
- Array valori
- Nome campo id
- Valore id
Function mod_record(strConnectionString, nome_tab, ar_campi, ar_valori,nome_campoid,id)
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open strConnectionString
set rstInsCl = Server.CreateObject(“ADODB.Recordset”)
Sql_Cl=”select * from ” & nome_tab & ” where ” & nome_campoid & “=” & id
rstInsCl.Open Sql_Cl, conn, 1, 3
for i = 1 to ubound(ar_campi)-1
select case Decode_tipo(tipo_campo(strConnectionString,”Schede”,ar_campi(i)))
case “date”
rstInsCl.fields(ar_campi(i)).value = FormatDateTime(ar_valori(i),VBShortDate)
case “text”
rstInsCl.fields(ar_campi(i)).value = ar_valori(i)
case “num”
rstInsCl.fields(ar_campi(i)).value = ar_valori(i)
case “bool”
if ar_valori(i)=”on” then
rstInsCl.fields(ar_campi(i)).value = true
else
rstInsCl.fields(ar_campi(i)).value = false
end if
end select
next
rstInsCl.update
set rstInsCl = Nothing
set conn = Nothing
end function
Realizzazione di un modulo ASP per ADODB, per la creazione di una visione tabellare dei dati con funzionalità di ordinamento
Per svolgere questa funzione molto utile nel caso si vogliano sviluppare applicazioni web per la gestione di database ho creato una funzione che ha i seguenti argomenti:
nome_tabella=il nome della tabella che viene appare nella lista
Qry = la query sql che definisce quali record devono apparire nella lista, da notare che non deve contenere la clausola order by
campo_chiave = il nome del campo chiave “primary key” della tabella <nome_tabella>
campo_ord=il nome del campo su cui si desidera ordinare i dati appena viene aperta la pagina
tipo_ord=il tipo di ordinamento può essere “ASC” o “DESC” ascendente o discentente
tag_coll = nome della pagina da aprire facendo click sul link nell’ultima colonna di ogni record “modifica” che permette di accedere ad una pagina di modifica del singolo record
c= nel caso di query è il valore del campo codizione a cui verrà applicato il criterio like per filtrare i record
function lista_tabella(nome_tabella, Qry, campo_chiave,campo_ord, tipo_ord,tag_coll,c)
‘on error resume next
if tipo_ord=”ASC” then
mtipo_ord=”DESC”
else
mtipo_ord=”ASC”
end if
set objConnCar1 = server.createObject(“ADODB.Connection”)
objConnCar1.Open strConnectionString
if Query=”” then
strsql = “select * from ” & nome_tabella & ” order by ” & campo_ord & ” ” & tipo_ord
else
strsql = Qry & “‘%” & c & “%’ order by ” & campo_ord & ” ” & tipo_ord
end if
set dataRecCar1 = Server.CreateObject(“ADODB.Recordset”)
dataRecCar1.Open strsql, objConnCar1, adOpenForwardOnly
if err.number<>0 then
response.write err.description
end if
if dataRecCar1.eof then
response.write “Nessuna registrazione ” & strsql
else
str_campi=””
for i=0 to dataRecCar1.Fields.count-1
if Campo_vis_Tab(nome_tabella,dataRecCar1.Fields(i).name) then
str_campi=str_campi & dataRecCar1.Fields(i).name & “|”
end if
next
if str_campi=”” then
response.write “<font> Nessuna definizione per la visualizzazione tabellare</font>”
lista_tabella=0
else
str_campi=left(str_campi,len(str_campi)-1)
ar_campi=split(str_campi,”|”)
response.write “<tr>”
for i=0 to ubound(ar_campi)-1
Response.write “<td><b>”
if len(Qry)=0 then
Response.write “<a href=’tabella.asp?t=” & nome_tabella & “&q=&k=” & campo_chiave & “&o=” & ar_campi(i) & “&ad=” & mtipo_ord & “&l=” & tag_coll & “‘>”
else
Response.write “<a href=’tabella.asp?t=” & nome_tabella & “&q=” & qry & “&k=” & campo_chiave & “&o=” & ar_campi(i) & “&ad=” & mtipo_ord & “&l=” & tag_coll & “&c=” & c & “‘>”
end if
Response.write Decode_campi(nome_tabella,ar_campi(i))
Response.write “</a>”
Response.write “</td>”
next
Response.write “</tr>”
Response.Flush
mlista_tabella = “”
conta_righe=0
do until dataRecCar1.eof
conta_righe=conta_righe+1
if conta_righe/2 = int(conta_righe/2) then
coloresf=”#C0C0C0″
else
coloresf=”#FFFFFF”
end if
Response.write “<tr bgcolor=” & coloresf & “>”
for i=0 to ubound(ar_campi)-1
Response.write “<td>”
Response.write dataRecCar1.Fields(ar_campi(i)).value
Response.write “</td>”
next
Response.write “<td>”
Response.write “<a href=’” & tag_coll & “?” & campo_chiave & “=” & dataRecCar1.Fields(campo_chiave).value & “‘>modifica</a>”
Response.write “</td>”
Response.write “</tr>”
dataRecCar1.movenext
loop
end if
response.write mlista_tabella
end if
set dataRecCar1 = Nothing
set objConnCar1 = Nothing
end function
ovviamente questa funzione va richiamata da una pagina ASP come la seguente:
– “tabella.asp”—
<html>
<head>
<title>Elenco</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
<link href=”css/gestione.css” rel=”stylesheet” type=”text/css”>
<body>
<table border=0 width=100%>
<tr>
<td>
<a href=index.htm><-ritorna alla maschera principale</a>
</td>
<td>
</td>
</tr>
</table>
<table border=”10″ cellpadding=”2″ cellspacing=”2″>
<%
nome_tabella=request(“t”)
query=request(“q”)
c=request(“c”)
campo_chiave=request(“k”)
campo_ord=request(“o”)
tipo_ord=request(“ad”)
tag_col=request(“l”)
lista_tabella nome_tabella, query, campo_chiave,campo_ord, tipo_ord,tag_col,c
%>
</table>
</body>
</html>
Realizzazione di una funzione per la decodifica dei colori dalla rappresentazione HTML ai tre valori di R G B
I colori in html vengono rappresentati con una stringa di 6 caratteri in esadecimale che a coppie di 2 decodificati in decimale danno i valori di RGB.
un esempio di funzione per la decodifica è:
<%
function decode_htmlcolor(colorehtml,componente)
R = Val(“&H” & Mid(colore, 1, 2))
G = Val(“&H” & Mid(colore, 3, 2))
B = Val(“&H” & Mid(colore, 5, 2))
select case componente
case “R”
decode_htmlcolor=R
case “G”
decode_htmlcolor=G
case “B”
decode_htmlcolor=B
end select
end function
%>
Realizzazione di una funzione per elencare i file presenti in una cartella (utilizzo dell’oggetto FileSystemObject)
Function ElencoDir(DirName)
Dim fso ‘ il file system object
Dim folder ‘ la directory
Dim file ‘ oggetto file
Dim string
‘ N.B. dirName è il nome della directory di cui si vuole l’elenco dei file contenuti
‘ Creazione del FileSystemObject
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ Accesso alla singola cartella
Set folder = fso.GetFolder( dirName )
string = “”
‘ esecuzione del ciclo sugli oggetti file contenuti nell’oggetto cartella e riempo la stringa string con i
For Each file in folder.Files
string = string & file.name
string = string & vbCrLf
Next
Set folder=Nothing
Set fso=Nothing
end function
Elenco dei possibili valori del comando Response.ContentType(“”)
application/andrew-inset ez
application/mac-binhex40 hqx
application/mac-compactpro cpt
application/mathml+xml mathml
application/msword doc
application/octet-stream bin dms lha lzh exe class so dll
application/oda oda
application/ogg ogg
application/pdf pdf
application/postscript ai eps ps
application/rdf+xml rdf
application/smil smi smil
application/srgs gram
application/srgs+xml grxml
application/vnd.mif mif
application/vnd.mozilla.xul+xml xul
application/vnd.ms-excel xls
application/vnd.ms-powerpoint ppt
application/vnd.wap.wbxml wbxml
application/vnd.wap.wmlc .wmlc wmlc
application/vnd.wap.wmlscriptc .wmlsc wmlsc
application/voicexml+xml vxml
application/x-bcpio bcpio
application/x-cdlink vcd
application/x-chess-pgn pgn
application/x-cpio cpio
application/x-csh csh
application/x-director dcr dir dxr
application/x-dvi dvi
application/x-futuresplash spl
application/x-gtar gtar
application/x-hdf hdf
application/x-httpd-php .php .php4 .php3 .phtml
application/x-httpd-php-source .phps
application/x-javascript js
application/x-koan skp skd skt skm
application/x-latex latex
application/x-netcdf nc cdf
application/x-pkcs7-crl .crl
application/x-sh sh
application/x-shar shar
application/x-shockwave-flash swf
application/x-stuffit sit
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar .tgz tar
application/x-tcl tcl
application/x-tex tex
application/x-texinfo texinfo texi
application/x-troff t tr roff
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/x-wais-source src
application/x-x509-ca-cert .crt
application/xhtml+xml xhtml xht
application/xml xml xsl
application/xml-dtd dtd
application/xslt+xml xslt
application/zip zip
audio/basic au snd
audio/midi mid midi kar
audio/mpeg mpga mp2 mp3
audio/x-aiff aif aiff aifc
audio/x-mpegurl m3u
audio/x-pn-realaudio ram rm
audio/x-pn-realaudio-plugin rpm
audio/x-realaudio ra
audio/x-wav wav
chemical/x-pdb pdb
chemical/x-xyz xyz
image/bmp bmp
image/cgm cgm
image/gif gif
image/ief ief
image/jpeg jpeg jpg jpe
image/png png
image/svg+xml svg
image/tiff tiff tif
image/vnd.djvu djvu djv
image/vnd.wap.wbmp .wbmp wbmp
image/x-cmu-raster ras
image/x-icon ico
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
model/iges igs iges
model/mesh msh mesh silo
model/vrml wrl vrml
text/calendar ics ifb
text/css css
text/html .shtml html htm
text/plain asc txt
text/richtext rtx
text/rtf rtf
text/sgml sgml sgm
text/tab-separated-values tsv
text/vnd.wap.wml .wml wml
text/vnd.wap.wmlscript .wmls wmls
text/x-setext etx
video/mpeg mpeg mpg mpe
video/quicktime qt mov
video/vnd.mpegurl mxu
video/x-msvideo avi
video/x-sgi-movie movie
x-conference/x-cooltalk ice