4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>
Attraverso quindi un loop di questo tipo, riempio la variabile locale valori con i valori dei campi del record da aggiornare nel solito formato HTML (campo1=valore1&campo2=valore2 ?)
Ovviamente, affinché tale funzione svolga correttamente il suo compito, occorre che il valore del campo chiave sia presente nella Form (se non lo si vuole visualizzare lo si può definire come hidden) prima di tutti gli altri (in parole povere deve essere la prima colonna del tabella HTML).
Il loop ci consente quindi di elaborare una per una tutte le righe della tabella, ed è qui che dovremo scrivere il codice che ci consente di elaborare ogni singola riga.
Per prima cosa dobbiamo agganciare il record da aggiornare attraverso il recordse. Occorre quindi recuperare il valore del campo chiave. Quest'operazione è svolta dalla funzione:
Public Function ValoreField(Stringa As String, nome As String) As StringChe, ricevendo come parametro la stringa in cui effettuare la ricerca e il nome del campo richiesto, mi restituisce il valore di quest'ultimo.
Ora può avvenire l'aggancio vero e proprio.
' aggancio campo sul database
If .RecordCount > 0 Then
.MoveFirst
.Find (mvarCampoChiave & "=" & valoreChiave)
End IfTrovata sul recordset la riga oggetto d'aggiornamento occorre individuare i singoli campi presenti all'interno della variabile valori.
Occorre però fare anche un'altra piccola considerazione: nell'ambito delle Form HTML i campi di input definiti come checkbox vengono postati solo se sono selezionati, ne consegue che, se l'utente deseleziona un checkbox, tale informazione non viene trasmessa al server.
Per ovviare a questo problema supponiamo che tutti i campi booleani presenti nella struttura del database, vengano sempre inseriti nella Form (anche se nascosti), a questo punto è sufficiente, prima di eseguire l'aggiornamento dei campi, porre a "false" il valore di quelli booleani: Se dalla Request ottengo l'informazione che sono stati selezionati significa che o l'utente li ha effettivamente cliccati oppure che erano degli INPUT di tipo HIDDEN. Se tale informazione non arriva, allora li potremo considera alla stregua di una deselezione.
Viene quindi eseguito un ciclo per valorizzare a "false" tutti i campi booleani.
For Each field In .Fields
If (field.Type = adBoolean) Or _
controllaBooleani(field.Name, mvarCampiSbiancati) Then
field.Value = sbiancaCampo(field)
End If
NextPrima di eseguire l'aggiornamento occorre anche stabilire il tipo di azione (inserimento o modifica) da eseguire sul DB:
- Se l'aggancio del record sul recordset non è avvenuto (in altre parole ) significa che la riga di cui è stato chiesto l'aggiornamento non esiste. Siamo quindi nel caso di inserimento di un nuovo record
taborig.EOF = True - Se invece ho selezionato il record da aggiornare sono in "update".
Arriviamo finalmente al loop che, scandendo campo per campo la riga precedentemente estratta, mi restituisce i nomi ed i valori dei campi da aggiornare.
Do Until esciNome = True
y = y + 1
nome = ""
Call NomeValore("&" + valori, nome, valore, y)
If nome = "" Then
esciNome = True
Else
valoreCampo = HTMLValore(.Fields(nome), valore)
If nome = mvarCampoObbligatorio And IsNull(valoreCampo) Then
.CancelUpdate
If azione = "aggiornamento" Then .Delete
daAggiornare = False
Exit Do
Else
.Fields(nome) = valoreCampo
End If
End If
Loop
If daAggiornare Then .Update
Public Sub NomeValore(stringa As String, nomeCampo As String, _
valoreCampo As String, posizione As Integer)Si noti che il cuore di quest'iterazione consiste nel richiamo della funzione NomeValore, che, ricevendo in input la riga d'aggiornare, restituisce il nome ed il valore di ogni singolo campo, identificato dalla sua posizione all'interno della stringa valori:
Se il numero di posizione non esiste all'interno della stringa il nome ed il valore del campo verranno valorizzati a stringa vuota. Ne consegue che il ciclo termina quando viene restituito un nome campo vuoto.
Il valore del campo restituito dalla funzione deve essere ulteriormente processato, il browser infatti invia al server stringhe del tipo "%XX" (dove XX è la rappresentazione esadecimale di un carattere) per identificare tutti i caratteri che non siano lettere dell'alfabeto. Gli spazi bianchi vengono invece rappresentati da un "+".
Public Function HTMLValore(campo As field, valore As String) As VariantQuesta funzione invece ha il compito di decodificare i caratteri rappresentati in forma esadecimale, valorizzare correttamente i campi booleani e numerici, e quindi troncare il valore di un campo stringa se la sua lunghezza è superiore alla dimensione massima del campo
Un ulteriore controllo prima di eseguire l'aggiornamento del campo riguarda il campo definito come obbligatorio. Se è stato valorizzato a stringa vuota, invece di eseguire l'aggiornamento del record (Recordset.Update) dobbiamo effettuarne la cancellazione (Recordset.Delete).
4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download 



