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.
Approfondimenti
I più letti di oggi
- Effettuare il binding di contenuti HTML con AngularJS
- Monitorare i cambiamenti di una proprietà dello scope di AngularJS
- Utilizzare le template variable di Angular per mostrare un messaggio di errore
- Ottimizzare il codice JavaScript con i Shorthand Patterns - seconda parte
- Utilizzare l'attributo HTML inert per disabilitare gli eventi in HTML5
- Combinare Container Queries e Media Queries
- Visual Studio 2015 Preview Live - Online
- ReBuild 2020 Live - Online
- Disponibile il nuovo Feature Pack di Visual Studio 2010
- Mono 2.8 aggiunge .NET Framework 4, ASP.NET 4.0 e MVC 2