Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto Select e CheckBox...

Salve,
devo valutare lo stato di una checkbox, vedere se è spuntata o meno.
Inizialmente ho provato con:
If Chek1 then
	MsgBox("check selezionato")
Else
	MsgBox("check non selezionato")
End If
Per uno funziona, vedo effettivamente se la casella è premuta, il
problema però esce quando devo vedere quali su 5 delle checkbox è
selezionata, al controllo sul tezro check, la IF mi impazzisce...ho
allora pensato di usare un istruzione Select Case almeno non divento
matto io a fare If troppo nidificate (visto che poi manco funzionano).
Ho provato qualcosa con la select ma se spunto la casella o meno mi da
sempre la stessa risposta :) Come posso farlo un controllo su una
checkbox usando una select?
Aspetto news, grazie.
Saluti, cioa ciao.

 ha scritto...

ci ho capito zero. please, non dirmi: "strano!" :)
-- i chek sono 1 o 5 ? parti con 1 ma finisci con 5...
-- puoi metterli in una matrice e usare l'indice ?
-- se non puoi metterli in una matrice, che problema c'e' a mettere gli if
uno sotto l'altro ? visto che sono cheks e non opts, suppongo che possano
anche essere spuntati non solo uno per volta. pero' dici "devo vedere
*quale* e' selezionato". se deve essere attivo solo uno per volta, usa degli
option buttons, magari in matrice, cosi' ti fai restituire l'indice di
quello selezionato.
-- hai controllato la sintassi ? chiedo davvero, perche' mi e' venuto un
dubbio: un chekbox non è un option, che ha due stati: col chek puoi avere
0 unchecked
1 checked
2 grayed
dato che vb ogni tanto considera vero quello che non e' zero, rischi che ti
da' vero anche se il chek non e' spuntato ma e' disattivo. io di solito per
andar sul sicuro metto
    if chkPippo.value = 1 then
ciao, a.

 Ho provato qualcosa con la select ma se spunto la casella o meno mi da
sempre la stessa risposta :) Come posso farlo un controllo su una checkbox
usando una select?
Sicuro che vuoi parlare di CheckBox e non di OptionButton? Perche', per la
natura stessa delle CheckBox, non e` tanto interessante sapere quale, fra
quelle presenti, sia "spuntata" ma, piuttosto, per *ciascuna* di esse,
conoscere lo stato: vbUnchecked (=0) o vbChecked (=1). O anche: vbGrayed
(=2).
Sono, appunto, gli OptionButton che, racchiusi generalmente in un Frame,
possono essere "accesi" uno ed uno solo alla volta; e quale di essi abbia
Value = True puoi testarlo anche cosi`:
  Select Case True
  Case Option1.Value
    MsgBox "1"
  Case Option2.Value
    MsgBox "2"
  Case Option3.Value
    MsgBox "3"
  End Select
Nel caso dei tuoi 5 CheckBox, invece, possono essere "spuntati" tutti,
nessuno, solo primo, il primo e il secondo, solo il secondo... e cosi` via.
In 2^5 = 32 modi diversi. (Addirittura 3^5 = 243 modi diversi se li usi a
tre stati). Non penso, quindi, ti interessino *tutte* le relazioni fra i
loro diversi stati quanto semmai solo alcune di queste in particolare. Ma da
quello che dici sembrerebbe che quello che effettivamente ti occorra siano
gli OptionButton. Sbaglio?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

    if chkPippo.value = 1 then
Questo in effetti non lo avevo considerato...grazie!!
PS: se leggi il mio messaggio di risposta a quello di Borrelli, ho
spiegato tutto quello che volevo fare e quello che invece ho fato :))
Saluti, ciao ciao.

loro diversi stati quanto semmai solo alcune di queste in particolare.
Eh...invece č proprio cosě :)) A me servirebbe di "calcolare" i 32
modi diversi. Ti spiego per bene quello che devo fare, almeno hai
anche te le idee chiare...e magari c' č un altra soluzione migliore..
Stň scrivendo un piccolo programma che mi crea un db con al suo
interno una tabella con dei campi per ora fissi; una volta creato il
db posso scrivere in questi campi, ricercare quello che ho scritto,
cercare e modificare o cancellare...dovrŕ fare anche qualche altra
operazione, ma successive al funzionamento di queste.
Quello che stavo valutando ora era proprio la ricerca, visto che la
creaziode del db e della tabella con i relativi campi l' ho fatta, la
selezione di un db con relativa tabella l' ho fatta a metŕ :)) e ora
mi serve di cercare quello che ho scritto li dentro per andare avanti
con la ricerca fissa, la modifica e la cancellazione.
La ricerca la stavo impostano in questo modo: ho messo 5 checkbox da
spuntare, perchč in questo modo (ricordi che avevo postato un
messaggio sul come fare query verso un db usando il vb?) riesco a
vedere che cercare nella tabella. Mi spiego meglio e faccio una
piccola premessa. I campi della tabella sono gli stessi che vedi
quando apri l' info box di un mp3 da Winamp (Titolo, Autore, Album,
Genere...). Ok, ammettiamo che io ho una tabella che si chiama mp3 e
in questa tabella voglio fare delle query che imposto da programma. Ho
pensato, metto i check vedo quello che spingo e mi creo la
query...solo che credevo fosse piů semplice perchč partendo da:
	SELECT qulcosa FROM qualche_parte WHERE condizione
ho subito semplificato prendendo tutti i campi della tabella, quindi
la cosa diventerebbe:
	SELECT * FROM mp3 WHERE condizione
Adesso devo valutare solo "condizione", perchč prendendo tutti i campi
almeno non devo fare controlli su che visualizzare alla risposta della
query. I controlli, quello che ho chiamato "condizione", credevo fosse
utile passarmeli tramite checks facendo un ragionamento del genere:
dal primo all' ultimo vedo quale ho spuntato e mano mano me lo piazzo
nella stringa che poi passo come query. Quindi avendo una cosa del
genere:
Titolo	[x]  <---selezionato
Autore	[  ]
Album	[  ]
Genere	[x]  <---selezionato
Cd	[  ]
La query che dovrei avere alla fine dei mie controlli č qualcosa del
genere:
	Select * from mp3 where titolo = 'aaaa' and genere = 'bbbb'
Sembra un boaita...invece mi sono impicciato :)) Ho iniziato a
valutare lo stato dei checks dicendo: parto dal primo e vedo se questo
e selezionato, perchč se questo č selezionato e ce ne saranno altri
selezionati dovrň solo aggiungere alla stringa "and.....and...." in
caso contrario, vado al successivo perchč questo non l' ho selezionato
e faccio lo stesso discorso. Quindi, il primo problema era valutare
quale fosse il primo ad essere spuntato. Una volta trovato il primo
cominciavo a fare le combinazioni per vedere quale dovevo aggiungere
al primo selezionato. Questa č un po la storia. Ho iniziato con delle
If, perň per i primi era semplice, ma giŕ dal terzo check cominciava a
diventare una cosa lunga, quindi ho optato per un bel case. Anzi,
posto anche quello che avevo scritto per i controllare i primi lo
stato dei checks:
If Check1 Then
  strTitolo = "si"
  strStringa = "Select * from mp3 where Titolo = '" & TxtTitolo.Text &
"'"
Else
  strTitolo = "no"
End If
 
If Check2 And strTitolo = "no" Then
  strAutore = "si"
  strStringa = "Select * from mp3 where Autore = '" & TxtAutore.Text &
"'"
ElseIf Check2 And strTitolo = "si" Then
  strStringa = strStringa & " And Autore = '" & TxtAutore.Text & "'"
Else: strAutore = "no"
End If
 
If Check3 And strTitolo = "no" And strAutore = "no" Then
  strAlbum = "si"
  strStringa = "Select * from mp3 where Album = '" & TxtAlbum.Text &
"'"
elseIf Check3 And strTitolo = "si" Or strAutore = "si" Then
  'strAutore = "si"
  strStringa = strStringa & " And Album = '" & TxtAlbum.Text & "'"
Else: strAlbum = "no"
End If
Stavo procedendo cosě quando sono arrivato al terzo check e ho visto
che con le If la cosa diventava sempre + lunga...morale dell favola,
adesso sono in alto mare :))
L' esperienza che consiglia??
Aspetto news, grazie.
Saluti, ciao ciao.

 Select * from mp3 where titolo = 'aaaa' and genere = 'bbbb'
[SNIPPONE]
prova a fare cosi':
dim strStringa as string, strSelect as string, strWhere as string
strSelect = "Select * from mp3"
If Check1 Then strWhere = strWhere  & "Titolo = '" & TxtTitolo.Text & "' AND "
If Check2 Then strWhere = strWhere  & "Autore = '" & TxtAutore.Text & "' AND "
If Check3 Then strWhere = strWhere  & "Album = '" & TxtAlbum.Text & "' AND "
If Check4 Then strWhere = strWhere  & "Genere = '" & TxtGenere.Text & "' AND "
If Check5 Then strWhere = strWhere  & "CD = '" & TxtCD.Text & "' AND "
'se c'e' almeno una condizione...
if Len(strWhere)>0 Then
    'questo va fatto perche' la stringa finisce con un " AND " di troppo
    strWhere=left$(strWhere, Len(strWhere)-5)
    'aggiungiamo la parola chiave "where" davanti alle condizioni
    strWhere=" where " & strWhere
end if
'componiamo la stringa finale
strStringa = strSelect & strWhere
Ciao
--
Luca Dormio
luca....@tin.it
luca....@sig-la.com

>prova a fare cosi':
Wuaaà!! Troppo forte :)) Funziona alla perfezione...inutile dire che
mi ero complicato la vita...io con 2000 if, case e roba strana...e te
non una decine di righe di codice...con una if hai risolto
tutto...grazie mille!! Ora riprovo passo per passo così vedo cosa
succede ma...già provato e funziona :))
Grazie mille.
Saluti, cioa ciao.

 L' esperienza che consiglia??
Taccio. In questo momento mi vengono solo parolacce, scusa.
PS: Il codice qui sopra e` scritto direttamente in OE quindi attento sia
alle lanterne che alle lucciole che sicuramente ci gireranno attorno.
Considera anche la possibilita` di NON usare i chk ma unicamente le caselle
di testo dei criteri di ricerca. Sono gia` sufficientemente significative.
