Newsgroup: it.comp.appl.access
Titolo: AGGIORNAMENTO O ACCODAMENTO TABELLA DA COMBO BOX

Ciao a tutti,
in una sottomaschera ho una combo box dove posso inserire dati in elenco e non.
Vorrei che se non fossero in elenco mi chiedesse se voglio inserirli nella tabella di riferimento. Io ho fatto così ma non funziona
 
Private Sub CmbDescrizione_NotInList(NewData As String, Response As Integer)
 
If IsNull(PrezzoUnitario) Then
Me.PrezzoUnitario.SetFocus
End If
 
If IsNull(TxtUnitaMisura) Then
Me.UnitaMisura.SetFocus
End If
 
If MsgBox("Verrà aggiunto l'articolo nella tabella materiali. Continuare? ", vbYesNo) = vbYes Then
    Dim stDocName As String
 
    stDocName = "QMaterialeBefAggiungiRecord"
    DoCmd.OpenQuery stDocName, acViewNormal, acEdit
End If
 
End Sub
 
Io provo a scrivere nella combo un testo fuori dall'elenco ma è come se non leggesse niente del codice...
 
Sapete dove sto sbagliando?
Thanks for collaboration!


L'evento NotInList si verifica soltanto se hai imposto alla combo di accettare solo valori in elenco.
Poi nell'evento gestisci il comportamento della casella tramite il parametro Response.

Scusa ma usi l'evento in modo inutile...
Apri la guida e leggi come si usa... i mod o sono 2:
1 sfrutti i parametri NewData che corrisponde al digitato non trovato e fai un AddNew via VBA nella tabella di origine... questo se ti basta inserire il singolo testo tipo tabelle di elenco selezione.
 
2 Apri una maschera di inserimento.... ma devi sempre passare quel DIGITATO altrimenti mo deve inserire 2 volte... quindinsi passa al parametro ARGS di OpenForm che andrà aperta in modalità acDialog o SINCRONA al ritorno della quale farai il Requery della combo sapendo che il NewData è il valore da riposizionare.
 
Non devi dimenticare di valorizzare correttamente il parametro errore altrimenti non va.
 
Quello che hai fatto tu è sbagliato perché controlli inutilmente altri 2 campi che eventualmente si controllano su evento BeforeUpdate...e non valorizzi il parametro errore dell'evento.
 
@Alex


Aiuto!!! Ho capito di aver sbagliato ed entrambi mi avete dato ottimi suggerimenti, ma io sono uno scimpanzè con vba, dunque provo a spiegarmi meglio...
in questa combo devo poter inserire sia campi liberi che quelli dell'elenco. Se scelgo un campo dell'elenco automaticamente mi aggiorna i campi UnitaMisura e PrezzoUnitario in questo modo:
 
Private Sub CmbDescrizione_AfterUpdate()
Me.UnitaMisura = Me.CmbDescrizione.Column(2)
Me.PrezzoUnitario = Me.CmbDescrizione.Column(3)
End Sub
 
Se inserisco un testo non in elenco vorrei che mi chieda se voglio inserirlo nella tabella materiali, a cui però devono seguire i campi UnitaMisura e PrezzoUnitario... e per questo che facevo il controllo nel caso siano nulli...
Ora ho fatto una prova e mi sta iniziando a funzionare solo se metto il blocco solo in elenco...
If MsgBox("Aggiungere l'articolo nella tabella materiali. Continuare? ", vbYesNo) = vbYes Then
    Dim stDocName As String
    Dim stLinkCriteria As String
 
    stDocName = "Materiali"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    DoCmd.GoToRecord , , acNewRec
End If
 
Però in questo modo non ho alternavite e ho l'obbligo di inserire il nuovo articolo anche se non voglio...
Con il mio sistema però sono incappata nel problema due... dover riscrivere due volte perché non sono riuscita diversamente...
 
Il ragionamento della mia prima versione era quello di dirgli se non è in elenco aprimi una query di accodamento dove mi prende i campi appena inseriti e li riporta anche nella tabella materiali...
Spero abbiate capito... non è facile spiegarlo...
Thanks
 


una domanda:
nella (credo io) tabella che è sottostante a codesta form (continua ?)
ti puoi (davvero) permettere l'inserimento di materiali NON dichiarati in una loro specifica (anche minimale) tabella anagrafica ?