Se si frequentano forum di programmazione in ASP, diverse volte sarà capitato di sentirsi dire, di fronte ad un errore legato all'interazione con il database, di "stampare a video la query". No, non stiamo parlando di stampare a video i risultati della query, ovvio, se quello è il problema che genera errore non possiamo sicuramente farlo al momento. Con lo stampare a video si intende proprio eseguire una Response.Write() della query in questione. Ad esempio, immaginiamo di avere una query del tipo:
<%
' ...
strSQL = "SELECT * FROM nometabella " &_
"WHERE campoid = " & id & " AND camponome = '" & nome & "' " &_
"ORDER BY " & variabilecampo & " DESC"
objRs.Open strSQL, objConn
' ...
%>
Questa query dovrebbe, in linea teorica, richiamare tutti i campi della tabella nometabella che presentino un campoid uguale ad una variabile data numerica ed un camponome uguale ad una variabile nome stringa ordinandoli per un campo passato come variabile.
Come è possibile notare ci sono almeno 3 variabili che possono provocare problemi alla query nel caso non siano passati nel formato e modo richiesto e sono proprio quelle variabili che al momento ci impediscono di procedere correttamente.
Il problema è che, essendo variabili, potrebbe non essere semplice conoscere con precisione quale sarà il loro contenuto.
Eseguendo a video una stampa della query prima di eseguirla:
<%
' ...
strSQL = "SELECT * FROM nometabella " &_
"WHERE campoid = " & id & " AND camponome = '" & nome & "' " &_
"ORDER BY " & variabilecampo & " DESC"
' Stampa la query
Response.Write(strSQL)
' Termina l'esecuzione
Response.End()
objRs.Open strSQL, objConn
' ...
%>
Verrà mostrato a video l'output della query stessa che permetterà di leggerla ed individuare l'errore. Supponendo ad esempio che il nostro problema fosse la variabile id non valorizzata, otterremo a video una stampa del tipo:
SELECT * FROM nometabella campoid = AND camponome = 'pippo' ORDER BY data DESC
che svelerà facilmente il responsabile del problema.
NB. L'uso di Response.End() dopo la stampa blocca l'esecuzione del codice successivo che non verrà quindi elaborato. Se omesso, dopo la stampa, la pagina continuerà il processo e verrà generato nuovamente l'errore impedendoci di leggere il risultato della Response.Write()