Newsgroup: it.comp.appl.access
Titolo: forzare l'inserimento di record correlati

Buona sera a tutti.
ho due maschere sincronizzate legate a due tabelle in relazione uno-a-molti.
la seconda maschera si apre con un pulsante.
vorrei fare in modo che, dopo aver inserito i dati nella maschera principale 
collegata alla tabella lato uno, prima di uscire sia fatta una verifica 
affinchè sia stato inserito almeno un record nella tabella lato molti, 
impendendo ovviamente l'uscita nel caso in cui tale condizione non si 
verifichi. 

 ha scritto nel messaggio 
news:478a781c$0$17954$4faf...@reader1.news.tin.it...

Ciao Singer
uno dei modi possibili è di mettere un controllo nascosto nella form 
principale
con origine controllo: =Nomesottomaschera.Form!NomeControllo
e su uscita della maschera vedere se è nullo, in questo caso devi 
cancellare
il record del lato uno che è già stato salvato quando il focus passa 
alla subform.
su uscita della form:
Dim sql As String
If IsNull(Me.NomeControllo) Then
    If MsgBox("vuoi chiudere, non hai inserito nessun record?", vbYesNo) 
= vbYes Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE tuatabella.ID FROM tuatabella  WHERE 
(((tuatabella.ID)=Forms!nomemascheraprincipale![ID]));", 0
        DoCmd.SetWarnings True
           Exit Sub
    Else
        Cancel = True
   End If
End If
naturalmente devi adattare i nomi dei tuoi controlli.
Daniele 

 ha scritto nel messaggio 
news:478b1ef5$0$37207$4faf...@reader3.news.tin.it...

c'è un solo problema!
io ho una maschera collegata che si apre con un clic su un pulsante
quindi se imposto un'origine record di questo tipo
credo non trovi nessun valore poichè la maschera è chiusa 

 credo non trovi nessun valore poichè la maschera è chiusa
puoi sempre testare la maschera(popup?) ed eliminare i modi di 
chiuderla,
mettendo un pulsante per la chiusura, che renderai visibile solo se
uno dei controlli(tutti) hanno dati. ma se vuoi annullare l'inserimento 
dei dati
dovrai cancellare il record dal lato uno.
Daniele 

 ha scritto nel messaggio 
news:478c8e35$0$10615$4faf...@reader2.news.tin.it...

io non ho ben capito!
pero tuttavia credo, a questo punto, che sia meglio fare un controllo
sulle tabelle piuttosto che sulle maschere
avevo pensato ad una query in cui metto le chiavi delle due tabelle
poi con un dlookup cerco nella query se c'è la chiave esterna in 
corrispondenza
dell'id chiave primaria della tabella lato uno
non so se sono stato chiaro!!!!! 

 ha scritto nel messaggio 
news:478cf7fb$0$10629$4faf...@reader2.news.tin.it...

neanche io ho ben capito cosa vuoi fare...   :<))
cmq non costa nulla fare una prova. facci sapere se hai risolto.
Daniele 

 Daniele
Dim link As Integer
link = DLookup("IDSEGN", "LINK", "ID= " & Me!ID)
If IsNull(link) Then
MsgBox "INSERISCI UN FATTO"
Cancel = True
'Else
'MsgBox "hai inserito un fatto"
End If
questo è il codice che ho inserito sull'evento su chiusura della maschera
"link" è la query in cui c'è l'ID della tabella principale e il campo IDSEGN 
chiave esterna della tabella
lato molti
col dlookup dovrei trovare il corrispondente valore nel record che 
corrisponde all'id corrente della maschera
se c'è corrispondenza si prosegue (msgbox è solo una prova)
se no ci si ferma
ho pensato che se il valore del dlookup è nulla vuol dire che non c'è record 
correlato
non so se la logica è giusta

 ha scritto nel messaggio 
news:478e7c67$0$4795$4faf...@reader4.news.tin.it...

bene, hai provato la chiusura della maschera senza inserire record?
se funziona sei a posto.
Daniele 


mi ero dimenticato di precisare questa cosa!!
non funziona
esegue sempre il codice della seconda condizione dopo else
in ogni caso, anche quando non ho inserito il recordo
aiuto!!!

 ha scritto nel messaggio 
news:478f16cc$0$36452$4faf...@reader5.news.tin.it...

prova così assicurandoti che i nomi siano giusti, e che gli ID ci siano
nella query.
If IsNull(DLookup("IDSEGN", "LINK", "ID= " & Me!ID)
MsgBox "INSERISCI UN FATTO"
Cancel = True
end if
me.nomecontrollo.setfocus
Daniele

 ha scritto nel messaggio 
news:478f3c90$0$10629$4faf...@reader2.news.tin.it...

avevo già provato in queso modo e per questo che avevo aggiunto la variabile
non funziona
ovvero la maschera si chiude come se la condizione fosse eseguita e 
verificata
eppure nella query l'ID c'è ed è vuoto il campo IDSEGN corrispondete
che faccio!!?? 


So qual è il problema, ma non ho la soluzione.
in pratica il valore che viene assegnato al dlookup rimane sempre uguale, 
ovvero corrisponde sempre
all'id del primo record
siccome al primo record corrisponde già un record correlato la funzione 
passa alla seconda condizione
se infatti apro la maschera direttamente per l'inserimento in un nuovo 
record funziona e mi dice che nonc'è il record
correlato.
perchè accade questo??
come faccio riferimento all'id corrente? non dovrebbe essere automatico? 

 ha scritto nel messaggio 
news:478f5d65$0$37198$4faf...@reader3.news.tin.it...

credo che ci sia confusione nel confronto degli id.
cmq puoi sempre testare se i controlli della seconda maschera sono null
oppure su unload:
Cancel=Me.RecordsetClone.RecordCount=0
ma resta sempre il problema che così non potrai annullare il record, 
leggi il
mio primo post.
Daniele