Newsgroup: it.comp.appl.access
Titolo: verificare se il record è selezionato oppure no

ciao a tutti
 
uso questo codice in una casella di riepilogo
 
If ctl.ItemsSelected.Count <> 0 Then
  For Each varItm In ctl.ItemsSelected
    strItems = ctl.ItemData(varItm)
    strItems1 = ctl.Column(1, varItm)
    StrItems2 = ctl.Column(2, varItm)
 
  Next varItm
 
End If
 
If InStr(strItems, ctl.Column(0)) > 0 Then
  Me!IdFornitore = ctl.Column(0)
  Me!IdFornitoreFatt = ctl.Column(1)
  Me!txt_Fornitore = ctl.Column(2)
Else
  Me!IdFornitore = strItems
  Me!IdFornitoreFatt = strItems1
  Me!txt_Fornitore = strItems2
 
End If
 
è corretto usare... 
If InStr(strItems, ctl.Column(0)) > 0 Then
per identificare se il record è selezionato 
oppure no?
 
grazie

Ciao,
come è impostata la proprietà  MultiSelect della casella di riepilogo? Suppongo sia abilitata (semplice o estesa).
 
La if di controllo all'esterno del ciclo for non ha gran senso perché lavora solo sull'ultimo elemento selezionato e non potendo sapere a priori qual'è significa che spari a caso, inoltre stritem contiene il valore di uno (l'ultimo) degli elementi selezionati e ctl.column(0) contiene il valore dell'elemento selezionato ma usato così e in un contesto di selezione multipla non ha senso (di nuovo).
 
Se spiegassi cosa devi fare e in che contesto (quale evento/sub) magari si potrebbe capire meglio.
Comunque la risposta alla tua domanda è no.
 
Ciao,
Mat


ciao Mat e grazie
 
Infatti anche se funziona, sono daccordo con te,
che la if cosi impostata non è corretta.
Ho una maschera non associata,
con casella di riepilogo non associata,
con sezione multipla semplice
e origine riga, da questa query:
SELECT Qry_Fornitori.IdFornitore, Qry_Fornitori.IdFornitoreFatt, 
Qry_Fornitori.Fornitore
FROM TbCarichi INNER JOIN Qry_Fornitori ON TbCarichi.IdFornitore = Qry_Fornitori.IdFornitore
WHERE TbCarichi.IdOrdine=txt_IdOrdine
ORDER BY Qry_Fornitori.Fornitore;
 
e sottomashera per indirizzi email, con questa query:
SELECT TbEmailFornitori.IdEmailFornitore, TbEmailFornitori.IdFornitore, TbEmailFornitori.EmailFornitore AS Email, TbEmailFornitori.InvioCarico AS InvioDoc, TbEmailFornitori.InvA2 AS InvA
FROM TbEmailFornitori
WHERE TbEmailFornitori.IdFornitore=Forms!M_SollecitoDistinteCarico!IdFornitore Or TbEmailFornitori.IdFornitore=Forms!M_SollecitoDistinteCarico!IdFornitoreFatt
ORDER BY TbEmailFornitori.EmailFornitore;
 
Da casella combinata selzionando un nominativo,
visualizzo dei "nomi" nella casella di riepilogo.
 
Ora vorrei che ogni volta che seleziono o deseleziono
un nome nella casella di riepilogo, visualizzare o meno,
nella sottomaschera "SM_Email" gli indirizzi relativi
al nome selezionato.
 
Ancora grazie

 Ancora grazie
 
Comunque hai intuito bene, usando un ciclo for sugli elementi selezionati devi costruirti un filtro da applicare alla sottomaschera ogni volta che la selezione cambia.
Ovviamente devi togliere la Where dall'origine della sottomaschera, sarà sostituita dal filtro.
Dovrai anche prevedere che quando nulla è selezionato nella listbox dovrai fare in modo che non venga visualizzato nessun record nella sottomaschera.
 
Ciao
Mat.


ciao Mat e grazie
tu come lo imposteresti il filtro?
grazie per l'aiuto

Ciao, 
all'interno di un ciclo for come quello che hai scritto creerei una stringa concatenando ad ogni passaggio i valori, alla fine del ciclo si può applicare la proprietà Filter della maschera o anche immetterla come where impostando di volta in volta l'intera origine dati del form.
Es. (pseudocode)
For each item ...
 if strWhere <>"" then
  StrWhere=strWhere & " And "
 end if
 strWhere=strWhere & "(TbEmailFornitori.IdFornitore=" & item & " OR ... )"
Next
 
me.filter=strWhere
me.filteron=true
 
Spero di aver dato l'idea.
Ciao, buon anno,
Mat.


ciao Mat e grazie
 
Ho fatto in questo modo, ma non va bene....
ho l'errore: Proprietà o metodo non supportati dall'oggetto,
dovrei ripresentare di nuovo tutta la query strSql
per non avere l'errore...
 
su apertura della form:
    Dim strSql As String
 
    strSql = vbNullString
    strSql = strSql & "SELECT "
    strSql = strSql & "IdEmailFornitore, "
    strSql = strSql & "IdFornitore, "
    strSql = strSql & "EmailFornitore As Email, "
    strSql = strSql & "InvioCarico As InvioDoc, "
    strSql = strSql & "InvA2 As InvA "
    strSql = strSql & "FROM TbEmailFornitori "
    strSql = strSql & "WHERE IdFornitore IN(0) "
    strSql = strSql & "ORDER BY EmailFornitore;"
 
    DBEngine(0)(0).QueryDefs("Qry_Email").SQL = strSql
    Me!SM_Email.Form.RecordSource = "Qry_Email"
 
query casella di riepilogo:
SELECT IIf(IsNull([Qry_Fornitori].[IdFornitoreFatt]),[TbCarichi].[IdFornitore],[Qry_Fornitori].[IdFornitore] & "," & Nz([IdFornitoreFatt],0)) AS IdFornitore, Qry_Fornitori.Fornitore
FROM TbCarichi INNER JOIN Qry_Fornitori ON TbCarichi.IdFornitore = Qry_Fornitori.IdFornitore
WHERE (((TbCarichi.IdOrdine)=[txt_IdOrdine]))
ORDER BY Qry_Fornitori.Fornitore;
 
poi su click della casella di riepilogo
 
    Dim ctl As Control
    Dim varItem As Variant
    Dim strItems As Variant
    Dim strSql As String
 
    Set ctl = Me!LstSollecitoDistinteCarico
 
    If ctl.ItemsSelected.Count <> 0 Then
        For Each varItem In ctl.ItemsSelected
            strItems = ctl.ItemData(varItem) 'per il mio caso va bene cosi'
 
        Next varItem
 
    End If
 
    strItems = IIf(strItems = "", 0, strItems)
 
    Me!SM_Email.filter = "IdFornitore IN(" & strItems & ")"
    Me!SM_Email.filterOn = True
 
    Me!SM_Email.Requery
 
ho provato anche cosi
Me!SM_Email.Form.filter = "IdFornitore IN(" & strItems & ")"
non ho l'errore, ma il filtro nella query non viene applicato
 


funziona se la query su apertura è cosi
    strSql = vbNullString
    strSql = strSql & "SELECT "
    strSql = strSql & "IdEmailFornitore, "
    strSql = strSql & "IdFornitore, "
    strSql = strSql & "EmailFornitore As Email, "
    strSql = strSql & "InvioCarico As InvioDoc, "
    strSql = strSql & "InvA2 As InvA "
    strSql = strSql & "FROM TbEmailFornitori " 
 
buon anno Mat.


mi chiedo se è corretto fare cosi all'apertura
 
    Dim strSql As String
 
    strSql = vbNullString
    strSql = strSql & "SELECT "
    strSql = strSql & "IdEmailFornitore, "
    strSql = strSql & "IdFornitore, "
    strSql = strSql & "EmailFornitore As Email, "
    strSql = strSql & "InvioCarico As InvioDoc, "
    strSql = strSql & "InvA2 As InvA "
    strSql = strSql & "FROM TbEmailFornitori "
    strSql = strSql & "ORDER BY EmailFornitore;"
 
    DBEngine(0)(0).QueryDefs("Qry_Email").SQL = strSql
    Me!SM_Email.Form.RecordSource = "Qry_Email"
 
    Me!SM_Email.Form.Filter = "IdFornitore IN(" & 0 & ")"
    Me!SM_Email.Form.FilterOn = True
 
perchè in questo modo poi non mi fa applicare il filtro:


Il giorno domenica 31 dicembre 2017 10:29:50 UTC+1, Franco dellavalle ha scritto:
[cut]
Ciao Franco,
scrivi sempre "all'apetrtura", "dentro una combo" ma non scrivi mai una procedura completa:
Sub Il_Nome()
.
.
End Sub
 
Parli di errori ma non indichi in quale punto esatto si verificano (a volte ometti anche la descrizione dell'errore).
 
Chiedi consigli ma non si capisce mai se li segui, se provi a metterli in pratica o se li ignori: almeno scrivi se hai provato a fare quello che ti si dice così si capisce se funziona o no.
 
Fai post a raffica con piccoli pezzi di codice e non si capisce dove e quando vengono eseguiti: chi ti legge non ha la minima idea di cosa sta dietro il tuo codice, devi descrivercelo tu!
 
Due domande: hai provato a comporre il filtro concatenando gli ID come avevo scritto?
Mi spieghi che utilità/significato avrebbe questo: Me!SM_Email.Form.Filter = "IdFornitore IN(" & 0 & ")" 
 
Ciao,
Mat.


ciao Mat e grazie per l'aiuto.
Ti allego un link dove scaricare "Miodb_02.01.18_A1"
https://allegato.org/download/1d42ef0153fa06bd9f739f7d88ed798c.html
 
per favore dagli un'occhiata.
 
grazie
 


Scusa Franco,
non voglio sembrare scortese, ma il newsgroup non funziona così, l'aiuto si da e si riceve in queste pagine.
Le conversazioni sono visibili a tutti anche con lo scopo di essere utili a tutti quelli che leggono e a chi lo farà in futuro.
Tempo addietro mi è capitato di dare aiuto a qualcuno direttamente su db ma ora non più.
 
Ciao
Mat.
 


ciao Mat.
non sei affatto scortese
il db che avevo postato era solo
la risposta alla tua domanda....
