In MySQL è possibile assegnare ad un campo di una tabella il tipo ENUM (elenco enumerativo), per preimpostare nella struttura del database stesso tutti e soli i possibili valori (fino ad un massimo di 65.535 voci) che quel campo potrà assumere.
Volendo simulare, ad esempio, una variabile booleana potremmo eseguire questa query SQL:
CREATE TABLE nome_tabella (
campo_booleano ENUM('Y','N')
)Più in generale è possibile realizzare qualcosa del genere:
CREATE TABLE nome_tabella (
nome_campo ENUM('valore1','valore2','valore3', ... ,'valoreN')
)Supponendo, in un secondo momento, di dover semplicemente elencare i possibili valori assegnabili a nome_campo o di dover creare un campo SELECT in un form HTML, per assegnare il valore desiderato, dovremmo riaprire il database per appuntarci tutti i possibili valori. E se fossero davvero 65.535?
Una soluzione, a mio avviso utile, esiste.
Eseguendo la query SHOW COLUMNS FROM nome_tabella LIKE 'nome_campo' e richiedendo il valore type si ottiene una stringa di tipo enum('valore1','valore2','valore3', ... ,'valoreN'). Utilizzando la funzione Replace è possibile eliminare da questa stringa i caratteri che non ci servono, lasciando soltanto le virgole come separatori dei valori. A questo punto si può 'splittare' la stringa ottenuta, imponendo come separatore proprio la virgola.
Si otterrà un array contente i possibili valori del campo di tipo ENUM.
Ecco il codice:
<%
'... codice per l'apertura della connessione: objConn.Open etc etc
Set objRS = objConn.Execute("SHOW COLUMNS FROM nome_tabella " &_
"LIKE 'nome_campo'")
strEnum = Replace(objRS("type"),"enum(","")
strEnum = Replace(strEnum," ","")
strEnum = Replace(strEnum,"'","")
strEnum = Replace(strEnum,")","")
arrEnum = Split(strEnum,",")
For i = 0 To UBound(arrEnum)
Response.Write arrEnum(i) & " <br> "
Next
Set objRS = Nothing
%>In questo modo, dovendo aggiornare la struttura del database, per aggiungere ad esempio la voce valoreN+1, non dovremo ricordarci di modificare tutte le pagine ASP dove abbiamo elencato le voci possibili di nome_campo, ma tutto avverrà in automatico.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.




