Newsgroup: it.comp.appl.access
Titolo: Problema su modifica della combo

ciao a tutti
Già postato
 
Ho inserito su modifica di una combo questo codice
Dim strText, strFind
Dim strSql As String
 
With Me!CboFornitore
.SetFocus
strText = .Text
 
If Nz(.Column(1), 0) <> strText Then
  strFind = "Fornitore Like '"
  strFind = strFind & "*" & Replace(strText, "'", "''") & "*"
  strFind = strFind & "'"
 
  strSql = vbNullString
  strSql = strSql & "SELECT "
  strSql = strSql & "A.IdFornitore, "
  strSql = strSql & "A.Fornitore, "
  strSql = strSql & "Format(Sum(A.da_Fatturare),'Currency') AS [da Ricevere] "
  strSql = strSql & "FROM Qry_CarichiChiusixFattFo AS A "
  strSql = strSql & "WHERE " & strFind
  strSql = strSql & "GROUP BY A.IdFornitore, A.Fornitore "
  strSql = strSql & "HAVING Sum(A.da_Fatturare)<>0 "
  strSql = strSql & "ORDER BY A.Fornitore"
 
  .RowSource = strSql
  .Dropdown
 
End If
 
End With
 
ma quando nella maschera 'non ci sono record'
come inserisco anche un solo carattere,
ho errore.
 
qui ho inserito un db d'esempio
https://allegato.org/download/beddcb8f643c19c36e388aaab5b70918.html
 
 
grazie


CUT
 
Perdonami ma il tuo codice è un po' una follia, scrivilo così:
 
Dim strFind As String
Dim strSql As String 
    
With Me!CboFornitore 
.SetFocus  
 
If Nz(.Column(1), "0") <> .Text Then 
  strFind = "Fornitore Like '" & "*" & Replace(.Text, "'", "''") & "*" &"'"
        
  strSql = "SELECT A.IdFornitore, A.Fornitore, Format(Sum(A.da_Fatturare),'Currency') AS [da Ricevere] " & _
   "FROM Qry_CarichiChiusixFattFo AS A " & _
   "WHERE " & strFind & _
   "GROUP BY A.IdFornitore, A.Fornitore " & _
   "HAVING Sum(A.da_Fatturare)<>0 " & _
   "ORDER BY A.Fornitore" 
        
  .RowSource = strSql 
  .Dropdown 
 
End If 
 
End With 
 
Poi dovresti dire qual è l'errore che ricevi (Codice e descrizione).
Infine dovresti riportare anche il nome della sub, così vediamo con esattezza in quale evento lo hai inserito.
 
Ciao


grazie Davide
 
questa come la scriveresti..
 
Dim actCTL As Access.Control
Dim strFind As String
Dim strSql As String
 
Set actCTL = Screen.ActiveControl
 
With actCTL
If actCTL.Name = "CboProdotto" Then
  If Nz(.Column(1), "0") <> .Text Then
    strFind = "DescrizioneProdotto Like '" & "*" & Replace(.Text, "'", "''") & "*" & "'"
 
    strSql = "SELECT * FROM TbProdotti" _
     & " WHERE " & strFind _
     & " ORDER BY DescrizioneProdotto;"
 
    .RowSource = strSql
    .Dropdown
 
  End If
 
End If
 
End With
 
considerando che ho
in dopo aggiornamento
del controllo "CboProdotto"
Me!nColli.SetFocus

 
 
Perché non metti mai il nome della sub?
Sapere in quale evento hai inserito il codice è fondamentale per capire cosa fa la routine.
 
Ciao


ciao Davide e grazie
 
Sub TrovaProdotto(frm As Form)
 
' da richiamare con: Call TrovaProdotto(Me)
 
Dim actCTL As Access.Control
Dim strFind As String
Dim strSql As String
 
Set actCTL = Screen.ActiveControl
 
With actCTL
If actCTL.Name = "CboProdotto" Then
If Nz(.Column(1), "0") <> .Text Then
  strFind = "DescrizioneProdotto Like '" & "*" & Replace(.Text, "'", "''") & "*" & "'"
 
  strSql = "SELECT * FROM TbProdotti" _
   & " WHERE " & strFind _
   & " ORDER BY DescrizioneProdotto;"
 
 .RowSource = strSql
 .Dropdown
 
 End If
 
End If
 
End With
 
End Sub

 > > > Il giorno martedì 28 novembre 2017 18:51:34 UTC+1, Franco dellavalle ha scritto:
CUT
 
Quindi non è un evento, ora ho capito perché usi activecontrol
Non sono sicuro però che questa sia la scelta giusta, potresti usare direttamente Me.CboProdotto mettendo il codice nell'evento Modifica:
 
  
Sub CboProdotto_Change() 
 
' si attiva da sola quando digiti nel campo
 
Dim strFind As String 
Dim strSql As String 
  
With Me.CboProdotto
If Nz(.Column(1), "0") <> .Text Then 
  strFind = "DescrizioneProdotto Like '" & "*" & Replace(.Text, "'", "''") & "*" & "'" 
    
  strSql = "SELECT * FROM TbProdotti" _ 
   & " WHERE " & strFind _ 
   & " ORDER BY DescrizioneProdotto;" 
  
 .RowSource = strSql 
 .Dropdown 
 
 End If 
  
End With 
  
End Sub 
 
Ciao


ciao Davide e grazie
 
ho fatto in questo modo e funziona;
ma non so se va bene; 
perchè, a causa di Me!nColli.Setfocus in
dopo aggiornamento del controllo 'CboProdotto'
avevo l'errore: 'impossibile fare riferimento a una
proprietà o a un metodo per un controllo che non
ha lo stato attivo'
e con 'If actCTL.Name = myCBO.Name Then' ecc. ecc.
ho potuto risolvere.
 
Questo è l'intero codice.
 
Sub TrovaProdotto(myCBO As Access.ComboBox)
 
' da richiamare con: Call TrovaProdotto(Me!MiaCombo)
 
Dim actCTL As Access.Control
Dim strFind As String
Dim strSql As String
 
Set actCTL = Screen.ActiveControl
 
With myCBO
If actCTL.Name = myCBO.Name Then



l'evento change non è l'evento afterupdate.
Non devi fare alcun setfocus perché durante l'evento change il focus rimane saldamente sul controllo CboProdotti.
 
Non capisco oltretutto perché dovresti fare un setfocus durante questa operazione.
 
Ciao


ciao Davide
io ho:
1-controllo Cboprodotto dove 'su modifica' ho inserito il codice di cui discutiamo;
2-contollo nColli;
ora su dopo aggiornamento del controllo Cboprodotto
ho inserito me!nColli.setfocus, per spostarmi in nColli all'inserimento del prodotto.
Ed è proprio per questo che ho l'errore



Scusa ma ancora mi sfugge qualcosa.
Durante l'esecuzione dell'evento change (modifica) il focus resta su cboprodotto.
L'evento afterupdate (dopo aggiornamento) NON deve contenere nulla relativamente alla gestione del controllo cboprodotto.
 
Ciao


grazie Davide