Newsgroup: it.comp.appl.access
Titolo: metodi ItemsSelected.Count e Selected(u)

Ho una maschera "mTel", contenente tre caselle di riepilogo [amm],
[tec] e [altro].
C'è anche una casella di testo [quanti].
Alla pressione di un pulsante, chiamo le seguenti istruzioni
        Forms!mTel!quanti = [Forms]![mTel]![amm].ItemsSelected.Count +
_
           [Forms]![mTel]![tec].ItemsSelected.Count + _
           [Forms]![mTel]![altro].ItemsSelected.Count
        If Forms!mTel!quanti = 0 Then
            MsgBox "Scegliere almeno un tipo di problema!", vbCritical
+ vbOKOnly
per controllare che almeno una voce in una casella di riepilogo sia
stata selezionata.
Se tutto va bene, esegue il seguente codice
            stri = "'"
            For u = 0 To Forms!mTel!amm.ListCount - 1
                stri = stri & Forms!mTel!amm.Selected(u) & "', '"
            Next
            For u = 0 To Forms!mTel!tec.ListCount - 1
                stri = stri & Forms!mTel!tec.Selected(u) & "', '"
            Next
            For u = 0 To Forms!mTel!altro.ListCount - 1
                stri = stri & Forms!mTel!altro.Selected(u) & "', '"
            Next
            stri = Left(stri, Len(stri) - 1)
            stri = "insert into telefonate values(" & codice & ", '" &
Forms!mTel!contatto & _
                "', '" & Forms!mTel!provsr.Caption & "', '" & Forms!
mTel!giorno & "', '" & _
                Forms!mTel!prov & "', " & stri & Chr(34) & Forms!mTel!
descr & Chr(34) & _
                ", " & Chr(34) & _
                Forms!mTel!nome & Chr(34) & ", " & Chr(34) & Forms!
mTel!tel & Chr(34) & _
                ", " & Chr(34) & _
                Forms!mTel!postel & Chr(34) & ", " & Forms!mTel!quanti
& ");"
            CurrentDb.Execute stri
La "insert into" comprende, fra i valori, la stringa "stri", composta
più o meno così:
"1;0;0;1;..." tanti uni e zeri quanti ne sono stati trovati scorrendo,
con i tre "For...Next", le tre caselle di riepilogo. Questi valori
sono scritti in campi di tipo Sì/No. Non mi risultano messaggi di
errore tipo: "il numero di valori non corrisponde al numero dei
campi", che uscirebbe se i "For... Next" non scorressero tutti i
valori.
L'istruzione contiene anche il valore di [quanti] calcolato prima.
Dovrebbe essere uguale al conto degli uni della stringa precedente.
Ora succede che circa il 2% dei record così creati ha un valore di
[quanti] superiore di uno al conto delle opzioni scelte. Il valore di
[quanti] in questi record va da 1 a 5.
Si tratta di un applicativo usato da più persone e ricevo questi dati
fasulli da diversi di loro. Ho provato a selezionare cliccando o
battendo lo spazio ma a me non è successo.
Non mi è parso nemmeno di notare che l'errore possa aver mangiato
sistematicamente una scelta in particolare.
Bò! Come dire: mi affido all'altrui acume.
Grazie a tutti.
Riccardo Baldinotti


wrote:

L'uso di questa sintassi:
INSERT INTO <tabella> VALUES( <valori> )
richiede che tutti i campi vengano valorizzati, qual'ora non vengano
ionteressati tutti la sintassi deve esere variata in questo modo:
INSERT INTO <tabella> ( <campi> ) VALUES( <valori> )
Es:
INSERT INTO dirigenti(id, cognome, nome) VALUES(10, 'Corinzi',
'Mimmo')
Nel tuo caso non sò bene che stai facendo non sapendo il numero dei
campi della tabella ma tu sicuramente lo conosci...!
P.S.
Altra confusione che vedo è che alcune volte usi l'APICE altre il
chr(34) non sarebbe opportuno che uniformassi...?
Per le ListBox basta verificare che ListIndex>0 al fine di capire se è
apportata una selezione.
@Alex

 "1;0;0;1;..." tanti uni e zeri quanti ne sono stati trovati scorrendo,
[cut]
Non capisco. A meno che mi sia perso qualcosa la tua stri e'
stri = '0','-1',.........,'-1',
1) se deve finire in campi di tipo si/no non comprendo perche' vengono 
passati in alfanumerico
2) a occhio la logica sembra corretta
3) Ti consiglerei di mettere in ogni for
ctr = ctr + abs(Forms!mtel!xxx.Selected(u))
e dopo le for (prima della insert)
if quanti <> ctr then msgbox "'ste quantita' non tornano mai'
questo, se non altro, dovrebbe evidenziarti sul momento il problema
-- 
ac
y-1=x

 if quanti <> ctr then msgbox "'ste quantita' non tornano mai'
Ci avevo pensato. Il problema è che succede in uffici sparsi in altre
province. Non sono riuscito a ottenere l'errore sul mio pc. Non vorrei
bloccare un operatore senza poter intervenire sulla macchina.
Preciso che non sono nemmeno in grado di spostarmi facilmente (sedia a
rotelle senza antigravità...;-).
Proverò a mettere un messaggio dettagliato e a inviare la nuova
versione in uno solo di quegli uffici, con preghiera di chiamarmi
immediatamente.
Nel frattempo, a costo di ripetermi, esprimo il mio entusiasmo per la
vostra esistenza.
Riccardo Baldinotti

 immediatamente.
Behhh.... direbbero gli ovini.
Puoi sempre in quel caso, invece della msgbox, mandarti in automatico 
una e-mail con i dati che ti interessano.
-- 
ac
y-1=x


wrote:

Mai che mi vengano in mente le soluzioni più ovvie...
Comunque, ho scoperto che nessun dato era sbagliato: c'erano delle
query incoerenti nel prenderli! Pardon.


Dimenticavo di precisare che volevo sapere in diretta qual fosse
l'inserimento che produceva il dato strambo. Sentendoci in diretta.
pensavo, avrei capito cosa succedeva.
Tutto superato, come dicevo.
Saluti e grazie.
Riccardo Baldinotti