Newsgroup: it.comp.appl.access
Titolo: Selezionare casella di riepilogo da codice

Salve!
Su dopo aggiornamento di due caselle di riepilogo ho:
nella prima:
    If Me!LstSconto <> 0 Then
        Me!LstTSc =0  ho provato anche con "0.00"
    End If
nella seconda
    If Me!LstTSc <> 0 Then
        Me!LstSconto= 0
    End If
Per LstSconto la query è:
SELECT 0 AS Sconto FROM TbSconto UNION SELECT TbSconto.IdSconto FROM TbSconto
ORDER BY Sconto;
tipo dati IdSconto = numerico (precisione doppia)
mentre per LstTSc è:
SELECT 0 AS ScTSc FROM TbTSc UNION SELECT TbTSc.ScTSc FROM TbTSc
ORDER BY ScTSc;
tipo dati ScTSc = valuta
 
il problema è che dalla seconda espressione mi seleziona lo "0" nella casella di riepilogo LstTSc, mentre nell'altra mi deseleziona il record senza selezionare lo "0,00€".
Grazie per l'aiuto
 
 
 
 
 
 

SELECT 0 AS Sconto FROM TbSconto UNION SELECT TbSconto.Sconto FROM TbSconto
ORDER BY Sconto; 

 ORDER BY Sconto;
ciao e grazie
ma non è questo il problema


Non ho capito benissimo... quindi magari la risposta non è centrata:
 
Me.NomeCombo.Value=Me.NomeCombo.Itemdata(0)
 
@Alex


grazie Alex
non capisco perchè con
 
    If Me!LstSconto <> 0 Then
        Me!LstTSc.value = 0
    End If
nella casella di riepilogo LstTSc non viene selezionato il record "0"
 
 

 nella casella di riepilogo LstTSc non viene selezionato il record "0"
 
Secondo me perchè confondi il Type... la ListBox restituisce un Variant String e non un Numerico.
 
Quindi se proprio:
Me!LstTSc.value = "0"
 
Ciao
@Alex


come faccio a testare che tipo di dato è?

 come faccio a testare che tipo di dato è?
 
Non lo devi testare... ti ho già risposto che la ListBox, ha in pancia SOLO dati String... non li devi testare, è l'assunto. 
 
@Alex


ho provato anche da un pulsante sulla form con:
Me!LstTSc.Value = "0"
ma se è selezionata  la casella di riepilogo, si deseleziona
e non seleziona cpme dovrebbe il valore "0,00" (Valuta)
 
 
 
 
 


Alberto... manca un po di logica funzionale nel tuo modo di Operare.
La ListBox non opera su Formati, non mostra una VALUTA, nè eventuali DATE, ripeto che mostra AS-IS la stringa fine a se stessa...
Comprendi la sostanziale differenza tra una Stringa ed un Tipo diverso...?
La stringa ancorchè "0,00" è una STRINGA non è un dato che vale Zero.
Così se nella ListBox ho "01/06/2021" non ho la data del 1° Giugno, ma solo la Stringa "01/06/2021".
Se poi voglio che quella stringa diventi una Data devo convertirla con cDate("01/06/2021")
 
Insomma, l'impressione è che ci siano lacune importanti.
 
Detto questo, per me l'argomento è chiuso.
 
@Alex


grazie


vediamo se ho capito (serve la sfera di cristallo)
hai una casella di riepilogo per sconti in percentuale
e una casella per sconti in ammontare
vuoi che quando selezioni un valore diverso da zero in uno dei due.. il 
focus ti vada sullo zero dell'altra listbox?
 
se si...e zero è il primo valore delle tue listbox
 
Private Sub LstSconto_AfterUpdate()
If Me.LstSconto <> 0 Then
     Me.LstTSc.SetFocus
     Me.LstTSc.ListIndex = 0
 
End If
 
End Sub
 
Private Sub LstTSc_AfterUpdate()
If Me.LstTSc <> "0,00" Then
     Me.LstSconto.SetFocus
     Me.LstSconto.ListIndex = 0
End If
End Sub
 
 
se non è cosi magari spiega cosa devi fare
 
BFS
 
 
 


oppure se devi semplicemente evidenziare il valore zero nella listbox 
quando il valore dell'altra non lo è
 
 
 
Public Sub ListboxSelectString(lstListbox As ListBox, strToSelect As 
String, Optional SelectDeselect As Boolean = True)
     Dim i As Integer
     For i = 0 To lstListbox.ListCount - 1
         If lstListbox.ItemData(i) = strToSelect Then
             lstListbox.Selected(i) = SelectDeselect
         End If
     Next i
End Sub
 
 
Private Sub LstSconto_AfterUpdate()
If Me.LstSconto <> 0 Then
    ListboxSelectString Me.LstTSc, "0,00"
 
End If
 
End Sub
 
Private Sub LstTSc_AfterUpdate()
If Me.LstTSc <> "0,00" Then
    ListboxSelectString Me.LstSconto, "0"
 
End If
End Sub
 
funzione ListboxSelectString presa da qui
https://stackoverflow.com/questions/46845690/using-vba-to-select-a-list-box-item
 
 
 
ciao
BFS
 


hai capito perfettamente BFS;
grazie 1000.
Io ho risolto modificando nella tb 
il tipo dati, da valuta a numerico precisione doppia;
infatti il problema lo creà il formato dello "0".
Lo zero in questo formato  "0,00 €" nella casella di riepilogo da problema.
 
 
 

Se la listbox deve consentire la selezione di Importi formattati
 deve avere 2 colonne.
La prima conciliazione valore Numerico e la imposti a larghezza ZERO.
La seconda la imposti a larghezza 2cm e la popoli con il valore
 stringa formattato che serve solo alla visualizzazione.
 
In questo caso accedi alla colonna associata che contiene il
 valore numerico relativo.
 
Ripeto che fai confusione e BSF ha ripetuto le stesse cose che ti
 ho detto sopra...
 
-- 
@Alex
 
 
----Android NewsGroup Reader----
https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.html
 

 -- 
 
hai ragione, ho fatto un grande errore, scusami.
Nella tabella, in questo caso che natura devono avere i due campi?
e se fosse un numero percentuale?
 

 e se fosse un numero percentuale?
 
Non esistono numeri percentuali... esistono NUMERI ed esiste la visualizzazione %...
0.1 è un Numero che può essere rappresentato come 10%, ma tu userai sempre 0.1
 
Quindi se hai la tua famosa ListBox sempre con 2(larghezza 0 per la prima, 2cm per la seconda) Colonne avrai:
Col1	Col2
0	0%
0.1	10%
0.2	20%
0.3	30%
...	...
1	100%
 
In realtà usando valori decimali avresti un problema con il separatore... che dovresti considerare in relazione ai Regional Settings, vale a dire che ti troveresti la VIRGOLA ma dovresti avere il PUNTO e nel VBA serve quello, quindi conviene lavorare con gli INTERI e dividere per 100 in fase di utilizzo, per lasciare al sistema la gestione di queste variabili del separatore decimale.
 
Un esempio:
Per popolare questa ListBox basta impostarla in Elenco Valori, e la si popola:
Dim i As Integer
For i=0 to 100 Step 10
     nomeListBox.AddItem i & ";" & FormatPercent(i/100, 1)
Next
In questo modo hai nella 1° Colonna hai il valore Numerico equivalente al valore % rappresentato nella 2° colonna:
Col1	Col2
0	0%
10	10%
20	20%
30	30%
...	...
100	100%
 
 
Quindi se devi usare lo sconto del 10%, selezionando il 2° ITEM della lista, ti basta prendere il valore della Colonna Associata(BoundColumn) che viene letto dalla proprietà Value:
 
PrezzoIniziale 100€
ScontoSelezionato=10% (selezione del 2° Item della ListBox)
[PrezzoFinale]=[PrezzoIniziale]*(1-Val(Me!NomeListBox.Value)/100 )
 
L'esempio era solo per farti comprendere meglio.
 
@Alex

 
grazie  @Alex
ottimo
nella tb  va bene impostare 
nel primo campo: tipo dati numerico (precisione doppia)?
 
 

tutto questo va bene anche nel caso di casella combinata?
 
Si
 
ottimonella tb  va bene impostare nel primo campo: tipo dati
 numerico (precisione doppia)?
 
Se si tratta di soldi io non uso MAI dati in virgola mobile...
 devi usare il tipo Valuta(Currency) per evitare errori di
 arrotondamenti.
 
Ciao


Un esempio:
Per popolare questa ListBox basta impostarla in Elenco Valori, e la si popola:
Dim i As Integer
For i=0 to 100 Step 10
nomeListBox.AddItem i & ";" & FormatPercent(i/100, 1)
Next
In questo modo hai nella 1° Colonna hai il valore Numerico equivalente al valore % rappresentato nella 2° colonna:
Col1 Col2
0 0%
10 10%
20 20%
30 30%
... ...
 
in questo modo però le percentuali non vengono salvate in una tb
e se devo utilizzarle in una query devo per forza avere la maschera
con la casella di riepilogo aperta, giusto?
 

 con la casella di riepilogo aperta, giusto?
 
Nella Query NON serve avere "90%", serve avere 0.9... e se nella maschera, il Controllo associato al valore Percentuale lo imposti con il Formato %, visualizzerai 90%, ma il valore rimane Numerico 0.9
 
Questi sono gli aspetti su cui devi prendere confidenza.
 
@Alex


sei veramente forte
grazie