Newsgroup: it.lavoro.professioni.webmaster
Titolo: si può fare?

Ciao a tutti, sono un novizio delle active server pages, gradirei una info,
mi basterebbe, sapere se sia possibile farlo, anche se sarebbe meraviglioso,
se qualcuno sapesse anche spiegarmi come, ( premetto che conosco una goccia
di linguaggio sql, una goccia di vbscript per asp, e qualcosa in più per
l'html).
Ma arriviamo alla domanda:
Ho in un database una colonna con testo, una colonna con testo, e una
colonna memo.
Vorrei far si che dinamicamente ogni riga del database sia visualizzabile in
una pagina di lettura e fin qui tutto ok, ma quello che mi viene difficile e
come fare a suddividere in diverse pagine i dati, ovvero messo una colonna
contatore la riga con il numero più vecchio deve vedersi nella prima pagina,
quello prima nella seconda e cosi via, in automatico ogni pagina deve avere
sotto dei numeretti che cambiano dinamicamente in base a quante righe ci
sono.
In breve genero una riga nel database, automaticamente la visualizzo nella
pagina di lettura come prima pagina, dinamicamente si genera qualcosa che mi
faccia navigare in pagine contenenti le righe precedenti del database.
GRAZIE
GRAZIE

faccia navigare in pagine contenenti le righe precedenti del database.
il sistema più semplice potrebbe essere quello di recuperare un
parametro request.querystring ed usarlo per costruire una query sql
per ottenere il record "corrente".  se il parametro
request.querystring non c'è allora usi il valore del contatore più
basso, che si suppone essere il "primo" della tabella.
dentro la collezione request.querysting ci vanno a finire i parametri
che nella riga dell'url stanno dopo il ? e sono separati da & se sono
più di uno, ad es.:
http://tuosito.com/tuapagina.asp?pippo=1&pluto=ciao
per recuperare i valori dei parametri pippo e pluto nel codice
vbscript dalla collezione request.querystring userai rispettivamente
qualcosa tipo:
variabile1 = request.querystring("pippo")
variabile2 = request.querystring("pluto")
oppure usi direttamente request.querystring("nomeparametro)
nell'espressione che ti interessa (ad esempio nella costruzione della
query sql).  
se però devi usare più volte quel valore è meglio appoggiarlo subito
in una variabile, perché l'accesso alla collezione request.querystring
(come pure ai campi di un recordset) richiede più risorse che non
l'accesso ad una variabile.  si tratta di quantità infinitesimali, ma
è meglio abituarsi a ragionare fin da subito in modo "economico".  a
mio avviso ne viene anche migliorata la leggibilità del codice.
considera che tutto quello che sta dentro request.querystring anche se
sembra un numero viene trattato come stringa, quindi dentro variabile1
ti ci trovi "1" e dentro variabile2 ti ci trovi "ciao".  attenzione
che "1" tra virgolette è diverso da 1 senza virgolette.  "1" è una
stringa che contiene il carattere "1", 1 è il valore numerico 1.  se
devi costruire una query sql, che è semplicemente una stringa, non c'è
problema, ma a volte puoi ottenere dei casini magari comparando valori
stringa a valori numerici.  vbscript non è tipizzato (cioè non ti
spermette/non ha bisogno di specificare il tipo dati di una variabile)
ma a volte problemi del genere ce ne possono essere.
ad es. metti che scorri un recordset e vuoi fare qualcosa se il valore
del contatore è uguale ad un valore request.querystring, questo
qualcosa non viene eseguito perché magari hai un contatore 23 e un
valore request.querystring "23".  in questo caso ti conviene
convertire esplicitamente in numerico il valore recuperato con
request.querystring per mezzo delle apposite funzioni di conversione
clng se ti serve un intero lungo (contatore) o cdbl se ti serve un
valore a virgola flottante.  ad es.: 
variabile1 = clng(request.querystring("pippo"))
ma, dicevamo, nel caso delle query sql questo non è comunque un
problema quindi variabile1 la lasciamo così com'è.
dicevamo che ti serve selezionare con una query sql un record a
partire dal contatore (ovvero da un campo numerico autoincrementale
come viene chiamato in gergo più tecnico - e attenzione che il
contatore *non* serve per contare, può avere dei buchi di numerazione
se cancelli i record!)
una query del genere può essere:
SELECT * FROM Tabella WHERE CampoContatore = 1
ipotizziamo che il valore del contatore lo recuperi dal parametro
request.querystring("id").  questo vuol dire che per visualizzare il
record il cui campo contatore vale 5, l'url dovrà essere qualcosa
tipo:
http://tuosito.com/tuapagina.asp?id=5
andando a scrivere un po' di codice si potrebbe avere:
dim cn ' variabile oggetto connessione
dim ssql ' stringa sql
dim vid ' valore del contatore
dim rst ' variabile oggetto recordset
vid = request.querystring("id")
ssql = "SELECT * FROM Tabella "
ssql = ssql & "WHERE contatore = " & vid
set cn = server.createobject("adodb.connection")
[apri la connessione sul tuo db]
set rst = cn.execute(ssql)
[visualizzi i campi come meglio credi]
ci sarebbe da chiudere gli oggetti recordset e connection, ma per il
momento non lo facciamo.  invece preoccupiamoci di cosa succede se
nell'url non passiamo alcun parametro "id", cioè abbiamo
semplicemente:
http://tuosito.com/tuapagina.asp
in questo caso request.querystring("id") restituirà il valore ""
(stringa vuota).  la query sql è semplicemente una stringa, quindi non
glie ne importa niente se gli accodi un valore vuoto e te lo fa fare,
ma quando provi ad usarla per settarci il recordset la connessione si
arrabbia perché la sua sintassi è sbagliata (manca un valore di
confronto che hai esplicitamente richiamato con l'=).
quindi dobbiamo verificare che effettivamente esista un valore di
confronto da usare nel where, e lo facciamo con un if:
vid = request.querystring("id")
if vid <> "" then
   ssql = "SELECT * FROM Tabella "
   ssql = ssql & "WHERE contatore = " & vid
else
   ssql = "SELECT TOP 1 * FROM Tabella "
   ssql = ssql & "ORDER BY contatore"
end if
la parte in basso è quella che viene eseguita se vid è vuoto, e cioè
prendi il primo record (TOP 1) che si ottiene ordinando i record dal
valore di contatore più basso al più alto.
adesso resta da fare l'"indice", cioè la serie di link agli altri
record da mettere in fondo alla pagina.
creiamo un recordset ordinato per contatore (come sopra, senza il TOP
1) però chiedendo di prendere solo il campo contatore.  in questo caso
il motore di asp non deve andare a vedere l'elenco dei campi della
tabella, come dovrebbe fare se tu gli dicessi *, e risparmia un po' di
risorse, come quando assegnammo il valore di request.querystring ad
una variabile.  poi scorriamo il recordset e costruiamo una stringa
che linki l'url corretto:
[altre dichiarazioni di variabili]
dim c
dim appo
[il codice per la visualizzazione del singolo record]
ssql = "SELECT contatore FROM Tabella "
ssql = ssql & "ORDER BY contatore"
set rst = cn.esecute(ssql)
do until rst.eof
   c = rst("contatore")
   appo = ""
   appo = appo & "<a href = tuapagina.asp?id=" & c & ">"
   appo = appo & "vai al record n. " & c
   appo = appo & "</a>"
   response.write appo
   response.write "<br>"
   rst.movenext
loop
a questo punto chiudiamo le variabili oggetto, in ordine inverso da
come le avevamo aperte:
rst.close
set rst = nothing
cn.close
set cn = nothing
fine...
-- 
abbraccio espedienti 365 giorni l'anno.
(generata da: 
http://www.phibbi.com/extra/gswe.php
)


Magari avessi trovato una persona disponibile qualche anno fa quando stavo
studiando asp ;-))
"IO dal computer dalla mamma" sei proprio fortunata!!
Claudio
 p.s.: ora invece mi piacerebbe anche avere il "tempo" per scrivere risposte
cosi complete...

Grazie sei stato meraviglioso !

cosi complete...
in effetti quando l'ho rivisto on line mi sono un po' preoccupato...
del resto una domenica pomeriggio con la pioggia se po' anche fà...


>Grazie sei stato meraviglioso !
che ci vuoi fare, quando ci sono le mamme di mezzo divento buono...
:-)
