Ci sono diversi modi per arrivare al risultato,
il piu classico è quello di fare una maschera che prenda i dati dalla query
e poi in funzione dello stato della tua casella di controllo
imposti la proprieta "Visibile" del campo interessato a si oppure no
Me.Nomecampo.Visible = True ( oppure false )
__________________________________________________ ____________________
ma tu hai fatto riferimento specifico a quando viene lanciata la query
pertanto seguiamo la strada di modificare la query stessa
( facci sapere se habbiamo sbagliato strada )
__________________________________________________ __________________
cominciamo a
__ creare la tabella
__ Inserire dati
__ Creare una query semplice da modificare dopo
Consiglio di aprire un nuovo file di access
e in un nuovo modulo ci metti questo codice che ti
imposta le basi
( quando sei nella finestra di VBA per lanciare la funzione
trovi un pulsante a forma di Triangolo o freccia verde)
codice:
Public Function ImpostaBase()
Dim ssq As String
' _______ Cominciamo a creare una semplicissima tabella _________________________
ssq = ""
ssq = ssq & "CREATE TABLE T04 "
ssq = ssq & "("
ssq = ssq & "Id int identity(1,1) CONSTRAINT [PrimaryKey] Primary Key, "
ssq = ssq & "Ca1 nvarchar, "
ssq = ssq & "Ca2 nvarchar, "
ssq = ssq & "Ca3 nvarchar"
ssq = ssq & ")"
CurrentProject.Connection.Execute ssq
ssq = ""
'__________ Inseriamo un po di dati _______________________________________________
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 10, 'k', 'kkk', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 2, 'ggg', 'lll', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 12, 'rr', 'aaa', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 17, 'yy', 'ttt', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 3, 'sss', 'yyy', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 1, 'hhh', 'kkk', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 19, 'uuu', '222', 'u' );"
'________ Creo una vista ______________________________________
ssq = "CREATE VIEW Q04 AS SELECT T04.Id, T04.Ca1, T04.Ca2, T04.Ca3 FROM T04;"
CurrentProject.Connection.Execute ssq
' diamo un messaggio di conferma
MsgBox ("Creato tabella __ Inserito dati ___ Creato vista")
' NB Manca la gestione degli errori
End Function
ora clicca con il mouse nella finestra del DB ( non VBA )
e premi il tasto F5 per aggiornare lo schermo
( oppure chiudi e riapri il DB )
__________________________________________________ ____________________________
Adesso puoi creare una Nuova maschera con solamente 1 casella di controllo
( Chiamiamola "CaCon" )
e sull'evento "dopo aggiornamento" di CaCon lanciamo questa routine
( adesso il modulo non è piu quello di prima ma bensi
si tratta del modulo interno della maschera )
codice:
Private Sub CaCon_AfterUpdate()
' dopo aggiornamento della casella di controllo di nome " CaCon"
' ti modifica la stringa della query
Dim stq As String
stq = ""
If Me.CaCon Then
' se la casella di controllo è "spulciata " prende i campi 1 e 3
stq = "SELECT T04.Id, T04.Ca1, T04.Ca3 FROM T04;"
CurrentDb.QueryDefs("Q04").SQL = stq
stq = ""
Else
' se invece non è "spulciata" prende solo il campo 2
stq = "SELECT T04.Id, T04.Ca2 FROM T04;"
CurrentDb.QueryDefs("Q04").SQL = stq
stq = ""
End If
' adesso per conferma mettiamo nel messaggio la stringa della query cosi come modificata,
' osserva che la stringa non arriva da quanto scritto sopra,
' ma VBA legge direttamente la stringa all'interno della query e la mette nel messaggio
Dim StringaQuery As String
StringaQuery = CurrentDb.QueryDefs("Q04").SQL
MsgBox StringaQuery
End Sub
Facci sapere
.