Newsgroup: it.comp.appl.access
Titolo: Passaggio dati tra sottomaschere

Buongiorno.
Lavoro con A00 su W2000
Ho una maschera Ordini con due sottomaschere, CicloLavorazione e
LavorazioniPianificate collegate ognuna a Ordini, ma senza collegamenti
diretti tra loro. Quando ricevo un ordine dai clienti per produrre un
particolare, genero il record in Ordini, quindi per ogni fase di lavorazione
prevista nel relativo CicloLavorazione (taglio, stampaggio ecc...) devo
produrre un record in LavorazioniPianificate, da inviare in officina per
avviarne la lavorazione.  Quindi facendo clic sulla prima riga della
sottomaschera CicloLavorazione, (esempio: fase 10 , taglio) voglio produrre
un record nella sottomaschera LavorazioniPianificate, controllando nello
stesso tempo di non aver già creato il record. Tenete presente che in
CicloLavorazione la chiave non è solo su FaseLavorazione, ma anche su
IDMacchina (la stessa fase può essere lavorata su macchine diverse, e devo
quindi indicare in officina su quale macchina caricare la lavorazione).
Quindi sul clic in questione memorizzo in due variabili IDFase e IDMacchina,
e chiamo una routine che dovrebbe verificare se già ho fatto la
pianificazione, ed eventualmente crearla.
La routine (che io ho definito public ?) chiama in ballo per forza di cose
la sottomaschera LavorazioniPianificate, ma non la trova (Primo Problema)
Se l'avesse trovata avrei voluto applicare un filtro alla sottomaschera,
(con me.nomesubmask.form.filter) passando le due variabili ed inoltre l'ID
Ordine preso da Ordini. (Anche qui tempo mi servirà il vostro aiuto). Se
trovavo record, la pianificazione era già fatta, quindi msg di avviso,
altrimenti creavo il record e con DLookup popolavo la riga. E' giusta la
logica? C'è di meglio?
Scusate la lunghezza e grazie
Gianluigi Agostini

 Gianluigi Agostini
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Roberto
Grazie infinite. Seguendo i tuoi consigli, e dopo un intero pomeriggio di
tentativi,  ho scritto quanto segue:
_____
Private Sub Fase_Click()
 Dim Ifase As Integer, LLotto As Long, StrCdc As String, Stfiltro As String,
rst As DAO.Recordset, LCodBB, DataConsegna, QtaDaProdurre, Descrizione,
Lavorazione, Dati, DescrizioneFase, DescrizioneOperazione, DisegnoCliente
Ifase = Me.Fase.Value
LLotto = Forms!FrmOrdini!Lotto
StrCdc = Me.CDC
Stfiltro = "[cdc]=" & StrCdc
 If DCount("Lotto", "TblRigheprd", "Lotto=" & LLotto & " And Fase=" & Ifase)
= 0 Then
    If IsNull([CodiceLavEsterna]) Then
        If MsgBox("Premi OK per eseguire la pianificazione", vbOKCancel,
"Avviso pianificazione") = vbOK Then
                '
            Set rst = CurrentDb.OpenRecordset("TblRigheprd", dbOpenDynaset)
            rst.AddNew
            LCodBB = Forms!FrmOrdini!CodBB
            DataConsegna = Forms!FrmOrdini!ConsegnaRichiesta
            QtaDaProdurre = Forms!FrmOrdini!QTaOrdine
            Descrizione = Forms!FrmOrdini!Descrizione
            DisegnoCliente = DLookup("[DisegnoCliente]", "TblArticoli",
"[CodBB] =" & LCodBB)
            DescrizioneFase = Me.DescrizioneOperazione
            DescrizioneOperazione = Me.DatiLavorazione
            rst.Fields("lotto") = LLotto
            rst.Fields("fase") = Ifase
            rst.Fields("cdc") = StrCdc
            rst.Fields("CodBB") = CodBB
            rst.Fields("DataConsegna") = DataConsegna
            rst.Fields("QtaDaProdurre") = QtaDaProdurre
            rst.Fields("DisegnoCliente") = DisegnoCliente
            rst.Fields("Descrizione") = Descrizione
            rst.Fields("DescrizioneFase") = DescrizioneFase
            rst.Fields("DescrizioneOperazione") = DescrizioneOperazione
            rst.Update
            Forms!FrmOrdini!SmTblRigheprdPerPianificazione.Form.Requery
        End If
    Else
        MsgBox ("Non puoi pianificare una lavorazione esterna")
    End If
Else
        MsgBox "Fase già pianificata", vbInformation + vbOKOnly,
"Pianificazioni"
        DoCmd.OpenForm ("SmTblRigheprdPerPianificazione"), acFormDS, ,
"cdc=" & StrCdc, acFormEdit, acDialog
End If
End Sub
_____
La parte di inserimento funziona. Però non sono riuscito a implementare il
RecordsetClone. Sarebbe più veloce? (l'applicazione andrà in rete su vari
client)
Se invece la pianificazione è già fatta, viene eseguita la riga:
DoCmd.OpenForm ("SmTblRigheprdPerPianificazione"), acFormDS, , , acFormEdit,
acDialog
che se scritta così funziona, se inserisco l'espressione filtro, (come nel
codice intero) da l'errore : l'azione open form è stata annullata.
Perchè?
Grazie ancora. Gianluigi Agostini

 Grazie ancora. Gianluigi Agostini


 Roberto
Sě, cosě funziona, non ne dubitavo! Ancora grazie
Gianluigi Agostini