Newsgroup: it.comp.appl.access
Titolo: inserire nuovi valori in combobox

Salve a tutti 
Ho una form singola di inserimento dati denominata "Magazzino" con origine 
record una tabella denominata "TbMagazzino".
All'interno di questa form ho una subform continua denominata 
"SmMagazzino" con origine record la stessa tabella "TbMagazzino".
Questa subform ha due caselle di testo denominate "Def" e "Val". A seconda 
del magazzino scelto attraverso una combobox della mainform, la 
subform (attraverso la casella di testo "Def") mostra un elenco di tutti 
gli articoli presenti mentre la casella di testo "Val" è pronta per 
l'inserimento della quantità/taglia. Per alcuni articoli è comodo, anzichè 
digitare la quantità, poter scegliere il valore da un elenco. Per questo 
ho creato diverse forms che si aprono sull'evento "doppio clic" fatto 
sulla casella di testo "Def"  con la possibilità (dopo aver scelto un 
valore nella combobox della form) di ritrovarmi il valore scelto nel 
controllo "Val". Ovviamente la form che si apre è legata all'articolo. Per 
esempio: se in "Def" ho "maglietta", facendo doppio clic sulla casella di 
testo mi si apre una form (MsTaglie, basata sulla tabella TbTaglie) dove, 
attraverso una combobox (Taglie), io seleziono la taglia (large, 
extralarge ecc ecc) e me la ritrovo nella casella di testo "Val". Andando 
avanti se in "Def" ho "nr taglia", facendo doppio clic sulla casella di 
testo mi si apre una form (MsNrTaglie, basata sulla tabella TbNrTaglie) 
dove, attraverso una combobox (NrTaglie), seleziono un possibile nr della 
taglia corrispondente, ad esempio, alla taglia extralarge e il valore me 
lo ritrovo nella casella di testo "Val". Ora vorrei adattare il codice che 
segue per permettermi di inserire valori nuovi nelle combobox citate sopra 
ed, in particolare, nella combobox "NrTaglie".
Private Sub NrTaglie_NotInList(NewData As String, Response As Integer)
Dim strsql As String, X As Integer
X = MsgBox("VUOI AGGIUNGERE QUESTO NR TAGLIA ALLA LISTA?", vbYesNo)
If X = vbYes Then
    strsql = "Insert Into TbNrTaglie " & "([Taglia], [NrTaglia]) values " 
& "('" & NewData & "','" & InputBox("HAI INSERITO UN NUOVO VALORE NELLA 
SEZIONE...", "ATTENZIONE...E' GIUSTO?", Me!Taglia) & "');"
    'MsgBox strsql
    Response = acDataErrAdded
    CurrentDb.Execute strsql, dbFailOnError
    Me!NrTaglie = NewData
    Me!NrTaglie.Requery
    Else
    Response = acDataErrContinue
End If
End Sub
Però così non funziona. In modo particolare viene segnalato un errore in 
"Me!Taglia"
Io non sono pratico di VBA  e non s'ò come modificarlo.
Spero di essermi spiegato bene.
Un grazie a tutti

Ciao caio,
---cut---
Private Sub NrTaglie_NotInList(NewData As String, Response As Integer)
Dim strsql As String, X As Integer
X = MsgBox("VUOI AGGIUNGERE QUESTO NR TAGLIA ALLA LISTA?", vbYesNo)
If X = vbYes Then
    strsql = "Insert Into TbNrTaglie " & "([Taglia], [NrTaglia]) values "
& "('" & NewData & "','" & InputBox("HAI INSERITO UN NUOVO VALORE NELLA
SEZIONE...", "ATTENZIONE...E' GIUSTO?", Me!Taglia) & "');"
    'MsgBox strsql
    Response = acDataErrAdded
    CurrentDb.Execute strsql, dbFailOnError
    Me!NrTaglie = NewData
    Me!NrTaglie.Requery
    Else
    Response = acDataErrContinue
End If
End Sub
Perň cosě non funziona. In modo particolare viene segnalato un errore in
"Me!Taglia"
Sei sicuro che sia il nome corretto? controllalo
Io non sono pratico di VBA  e non s'ň come modificarlo.
Spero di essermi spiegato bene.
-- 
Ciao
Access 

Ciao, grazie per l'interessamento.
Il nome è corretto. Penso che manchi il riferimento alla maschera in cui è 
contenuta la combobox.
Il codice era nato (e funzionava a meraviglia) per essere utilizzato in 
una form singola dove avevo due combobox sincronizzate.
Adesso le due combobox si trovano in due forms diverse percui il codice 
andrebbe modificato tenendo presente questo fatto.
Solo che io non sò dove andare a modificarlo.
Grazie, ciao

 ha scritto nel messaggio 
news:fcqhb5$p2$1...@balena.cs.interbusiness.it...

Allora se le cose stanno cosi prova a cambiare la stringa di codice ove 
viene segnalato l'errore "me!nrtaglie" con questa:
forms!magazzino.SmMagazzino.form.nrtaglie.requery
-- 
Ciao
Access 

 forms!magazzino.SmMagazzino.form.nrtaglie.requery
dimenticavo stessa cosa per:
forms!magazzino.SmMagazzino.form.nrtaglie = NewData
 -- 
 Ciao
Access 

Ciao, sempre grazie per le risposte.
Ho applicato il tuo consiglio ma non funziona.
Vorrei capire bene il suggerimento perchè non vorrei aver sbagliato 
l'inserimento.
Ricapitolando, questo è il codice:
Private Sub NrTaglie_NotInList(NewData As String, Response As Integer)
Dim strsql As String, X As Integer
X = MsgBox("VUOI AGGIUNGERE QUESTO NR TAGLIA ALLA LISTA?", vbYesNo)
If X = vbYes Then
    strsql = "Insert Into TbNrTaglie " & "([Taglia], [NrTaglia]) values " 
& "('" & NewData & "','" & InputBox("HAI INSERITO UN NUOVO VALORE NELLA 
SEZIONE...", "ATTENZIONE...E' GIUSTO?", Me!Taglia) & "');"
    'MsgBox strsql
    Response = acDataErrAdded
    CurrentDb.Execute strsql, dbFailOnError
    Me!NrTaglie = NewData
    Me!NrTaglie.Requery
    Else
    Response = acDataErrContinue
End If
End Sub
E questi sono i tuoi due suggerimenti:
forms!magazzino.SmMagazzino.form.nrtaglie.requery
forms!magazzino.SmMagazzino.form.nrtaglie = NewData
Domanda: devo inserirli dopo "ATTENZIONE...E' GIUSTO?",
al posto di Me!Taglia?
Ripeto, io non sono pratico di VBA percui "vado per tentativi".....se tu 
fossi così gentile di sistemarmeli all'interno del codice nel punto 
giusto....
Grazie mille per l'aiuto
Ciao

 al posto di Me!Taglia?
    Ma il controllo Me!taglia dove si trova?
 Se non si trova nella form ove hai inserito il codice su menzionato,
allora devi fare riferimento in questo modo:
 forms!NomeAltraMaschera!taglia
 La form ove è posizionato il controllo me!taglia deve essere 
necessariamente aperta.
-- 
Ciao
Access

 Ciao e ancora grazie mille!!!!
-- 
Ciao
Access 

ciao
Io ti ringrazio ancora per tutto l'interessamento al mio caso.
Ho provato ad inserire:
forms!Magazzino.SmMagazzino.form.Val
ma non cambia nulla; il messaggio che mi restituisce Access è sempre lo 
stesso che ti avevo già indicato.
Per caso bisogna inserire un "requery" da qualche parte?
Io non ci capisco più nulla!!
Oltretutto queste due form le vorrei anche sincronizzare.
Vedi "Sincronizzare combobox che si trovano in due form diverse" del 
20/09/07 a cui poi non  mi è più stata data risposta.
Ciao e grazie ancora


con tutta la buona volonta', purtroppo non è facile aiutare senza avere 
davanti il db.
Poi non mi è chiaro una cosa, il controllo Def e Val  (quest'ultimo è meglio 
cambiarlo in quanto è un nome riservato ad una funzione di access), in 
particolare Val come fa a contenere sia la taglia che il numero taglia? O 
meglio se sia la form principale che la subform hanno la stessa origine dati 
, come fai a visualizzare nella subform piu' record inerenti un criterio 
della form principale?
Comunque facciamo un ulteriore tentativo, dopodichè non sarei in grado di 
aiutarti in altro modo, forse perchè non sono in grado di capire come 
funziona il tuo di db:
Private Sub NrtagliA_NotInList(NewData As String, Response As Integer)
Dim strsql As String, x As Integer
x = MsgBox("VUOI AGGIUNGERE QUESTO NR TAGLIA ALLA LISTA?", vbYesNo)
If x = vbYes Then
    strsql = "Insert Into TbNrTaglie " & "([Taglia], [NrTaglia]) values " & 
"('" & NewData & "','" & InputBox("HAI INSERITO UN NUOVO VALORE NELLA 
SEZIONE...", "ATTENZIONE...E' GIUSTO?", 
Forms!tbmagazzino.SmMagazzino.Form.val) & "');"
    'MsgBox strsql
    'Me!nrtaglia.Requery
    Response = acDataErrAdded
    CurrentDb.Execute strsql, dbFailOnError
    Me!nrtaglia = NewData
    Me!nrtaglia.Requery
    Response = acDataErrContinue
End If
End Sub
-- 
Ciao
Access 

Ciao
Grazie ancora per l'aiuto ma anche così non funziona: mi dà sempre il 
solito messaggio di errore.
Ti va di fare un'ultimo tentativo? Non vorrei mandare a monte tutti i post 
precedenti. Ricapitoliamo.
'Val' l'ho già cambiato in 'Val1'.
La Mainform 'Magazzino' ha come origine dati la TbMagazzino. Questa è così 
composta:
IdMag - chiave primaria e contatore
TipoMag - testo
Def - testo
Val1 - testo
quindi avrò, per esempio:
1 - magazzino abiti - taglia - extralarge
2 - magazzino abiti - nr taglia - 56
Attraverso una tabella temporanea (che però non ho ancora creato - a dire 
il vero non sò da che parte iniziare.....vedrò) svuoterò il campo 'Val1' 
ad ogni chiusura della mainform in modo tale che alla riapertura della 
stessa mi trovi compitato soltanto il campo 'def'.
TipoMag è un campo legato (uno a molti) ad un'altra tabella 
(TbTipoMagazzino) così composta:
IdTipoMag - chiave primaria e contatore
Mag - testo
Nella mainform c'è un solo controllo, non associato, che è una combobox 
basata sulla tabella 'TipoMag' che mi permette di selezionare il tipo di 
magazzino (per es:magazzino scarpe, magazzino abiti ecc ecc).
All'interno della mainform c'è una struttura a schede (mi ero dimenticato 
di dirti questo, ma ritengo non abbia importanza) con all'interno della 
prima pagina la subform continua 'SmMagazzino' basata sulla 'TbMagazzino' 
e collegata alla mainform attraverso 'TipoMag' (collega campi secondari , 
collega campi master).
Quando seleziono ad es. 'magazzino abiti' dalla combobox automaticamente 
la subform mi visualizza i seguenti:
[Def] ------[ Val1]
taglia-----campo vuoto
Nr taglia------campo vuoto
Nella casella di testo 'Def' su evento 'disattivato' ho poi inserito il 
seguente codice:
If Me!Def = "taglia" Then
DoCmd.OpenForm "MsTaglie"
End If
If Me!Def = "Nr taglia" Then
DoCmd.OpenForm "MsNrTaglie"
End If
Che mi permette di aprire altre due maschere (te le avevo già indicate nei 
post precedenti) che contengono a loro volta una combobox da cui 
selezionare il valore che poi attraverso il codice (su dopo 
aggiornamento):
Forms!Magazzino!SmMagazzino!Val1 = Me!Taglia
DoCmd.Close acForm, Me.Name
e
Forms!Magazzino!SmMagazzino!Val1 = Me!NrTaglia
DoCmd.Close acForm, Me.Name
viene inserito nel rispettivo campo 'val1'
Su 'non in elenco' della combobox della maschera 'MsTaglie' ho inserito il 
seguente codice:
Private Sub Taglia_NotInList(NewData As String, Response As Integer)
Dim strsql As String, X As Integer
X = MsgBox("VUOI AGGIUNGERE QUESTA TAGLIA ALLA LISTA?", vbYesNo)
If X = vbYes Then
    strsql = "Insert Into TbTaglie ([Taglia]) values ('" & NewData & "')"
    'MsgBox strsql
    CurrentDb.Execute strsql
    Response = acDataErrAdded
    Me!Taglia = NewData
    Me!Taglia.Requery
Else
    Response = acDataErrContinue
End If
End Sub
che funziona, mentre sempre 'su non in elenco' della combobox contenuta 
nella MsNrTaglie ho il codice su cui stiamo discutendo.
Spero di averti dato tutti gli elementi necessari per potermi dare, ancora 
una volta, un aiuto.
Se non ci riuscirai pazienza, ti ringrazio comunque veramente tanto per la 
pazienza.
Ciao

 End If
---cut---
All'interno di un modulo standard scrivi:
Public vTaglia As String
poi prova cosi:
Private Sub NrtagliA_NotInList(NewData As String, Response As Integer)
Dim strsql As String, x As Integer
x = MsgBox("VUOI AGGIUNGERE QUESTO NR TAGLIA ALLA LISTA?", vbYesNo)
If x = vbYes Then
    strsql = "Insert Into TbNrTaglie " & "([Taglia], [NrTaglia]) values " & 
"('" & NewData & "','" & InputBox("HAI INSERITO UN NUOVO VALORE NELLA 
SEZIONE...", "ATTENZIONE...E' GIUSTO?", vTaglia) & "');"
    'MsgBox strsql
    'Me!nrtaglia.Requery
    Response = acDataErrAdded
    CurrentDb.Execute strsql, dbFailOnError
    Me!nrtaglia = NewData
    Me!nrtaglia.Requery
    Response = acDataErrContinue
End If
End Sub
Adesso dovrebbe andare.......speriamo
-- 
Ciao
Access 

Ciao, grazie 1.000.000 per l'aiuto.
Ancora una domanda poi non ti "stresso" più.
Il codice deve essere scritto cosi?
If Me!Def = "taglia" Then
vtaglia = Me!taglia
DoCmd.OpenForm "MsTaglie"
oppure diversamente?
Io di VBA proprio ci capisco poco!!!
ciao e grazie ancora. Sei un santo.
p.s: il modulo standard deve avere lo stesso nome? Cioè "vtaglia"?

 p.s: il modulo standard deve avere lo stesso nome? Cioè "vtaglia"?
No.
-- 
Ciao
Access 

> Io di VBA proprio ci capisco poco!!!
Pero' hai intuito che c'era qualcosa che non andava, per cui fai ottimi 
progressi.
