Eliminare più record contemporaneamente
Salve, oggì cercherò di spiegare come eliminare più records da un database contemporaneamente!
Avete presente quando si visiona una webmail? Vediamo un elenco con una casella di scelta quadrata per ogni riga, e abbiamo la possibilità di selezionare le righe che vogliamo ed eliminarle contemporaneamente, solo quelle che vogliamo! Come fare? Cerherò di spiegarvelo nel modo più corretto possibile.
Direi che possiamo iniziare, ambientandoci in una situazione reale, giusto per capire meglio.
Supponiamo di essere nel pannello di amministrazione del nostro guestbook, e abbiamo l’elenco delle firme lasciate, sarebbe bello se potessimo selezionare solo alcune di queste firme e cancellarle, invece di cancellarle una ad una.
Questo è possibile mettendo l’elenco dei records dentro un FORM, dare stesso nome alle caselle di scelta e dare come valore alle caselle l’ID della riga visualizzata. Avendo le caselle stesso nome, quando vengono passati per esempio con GET, otterremo
“pagina.asp?nomecasella=1&nomecasella=3&nomecasella=9”
e richiedendo la varibile “nomecasella” otterremo una stringa così
“1, 3, 9”
Bene, inizieremo adesso a scrivere il codice di una pagina, che simula un elenco di firme e che ci permetterà appunto di eliminarle.
Il codice nella pagina deve avere un certo ordine, percui sarete costretti a capire tutto solo alla fine, come il film Matrix.
Intanto controlliamo se abbiamo l’elenco dei records da eliminare, passato tramite GET, onde evitare errori dello script
<% if request.QueryString("record") <> "" thenInizializziamo le variabili che ci serviranno e cominciamo ad entrare ne cuore dello script
i=0 k=1 cont=0
Misuriamo la lunghezza della stringa ottenuta, creiamo un ciclo che dura per tutta la lunghezza della stringa e contiamo quante virgole ci sono nella stringa! Contate le virgole, sappiamo con certezza che ci saranno sempre NUMEROVIRGOLE+1 di valori diversi.
lung=len(request.QueryString("record"))
while i < lung
car=mid(request.QueryString("record"),k,1)
if car = "," then
cont=cont+1
end if
i=i+1
k=k+1
wend
cicli=cont+1 'NUMEROVIRGOLE+1Riutilizziamo la variabile i reimpostandola a 0 e utilizziamo il comando “split” che funziona come un array tagliando la nostra stringa ad ogni virgola che trova.
i=0
record=split(request.QueryString("record"),", ")Utilizzando il valore di NUMEROVIRGOLE+1, creiamo finalmente il ciclo di eliminazione dei records. Una volta eliminati usiamo il response.redirect per aggiornare la pagina priva dei records eliminati.
while cicli > 0
set del = Server.CreateObject("ADODB.Command")
del.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/mdb-database/guestbook.mdb")
del.CommandText = "DELETE FROM firme WHERE ID="&record(i)&""
del.CommandType = 1
del.CommandTimeout = 0
del.Prepared = true
del.Execute()
cicli=cicli-1
i=i+1
wend
response.redirect("questapagina.asp")E concludiamo il controllo
End If
