Newsgroup: it.comp.appl.access
Titolo: Inserimento automatico di tot numero di record

Ho una maschera con sottomaschera in foglio dati:
Vorrei che, selezionando "nuovo record" sulla maschera principale, mi si
creassero un certo numero di record automaticamente nella sottomaschera.
Maschera Prelievo                             Sottomaschera DettPrelievo
IDPercorso      ChiaveP                    IDPercorso
DataPrelievo    ChiaveP                     DataPrelievo
                                                         IDCliente
                                                         DatiPrelievo
Per essere preciso vorrei che si aprissero tanti record quanti sono i
clienti relativi al percorso in modo da dover inserire solo i dati dei
prelievi. Il CampoIDPercorso è autoincrementante(nella maschera principale)
mentre DataPrelievo imposta automaticamente il valore della data del giorno.
Grazie

 ha scritto nel messaggio
news:uCbN5.22109$fx4.7...@news.infostrada.it...

Serve qualche chiarimento:
1) Cosa hai messo come proprietà "Collega campi secondari" e "Collega campi
master" del controllo sottomaschera della maschera Prelievo?
2) Quele è la chiave primaria della tabella che è origine record della
sottomaschera DettPrelievo?
3) Esiste una tabella Clienti, se si contiene un campo IDPercorso?
--
Roberto
---------------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

 ha scritto nel messaggio
news:3BiN5.25467$fx4.8...@news.infostrada.it...

Un'altra domanda:
nella maschera Prelievo hai per caso, oltre a IDPercorso e a DataPrelievo,
qualche altro controllo in cui digiti qualcosa?


 wrote in message
OFiN5.25505$fx4.9...@news.infostrada.it...

Chiarimento1:
Ho messo IDPercorso;DataPrelievo
Chiarimento2:
Chiave primaria tabella DettPrelievi: nessuna
Chiarimento3
Esiste una tabella clienti che ha come chiave primaria:
IDCliente e IDPercorso
Chiarimento4:
Si: IDAutista



Prima di vedere come creare automaticamente i record nella tabella
DettPrelievo, č necessario sistemare l'architettura delle tabelle e la loro
struttura.
1) Se non l'hai gią fatto, creati una tabella Percorsi, formata dal campo
IDPercorso (contatore e chiave primaria) e dal campo testo Percorso.
2) Se non l'hai gią fatto, creati una tabella Autisti, formata dal campo
IDAutista (contatore e chiave primaria) e dal campo testo Autista.
3) La chiave primaria della tabella Clienti deve essere solo il campo
IDCliente (che puņ essere di tipo contatore); IDPercorso deve essere
numerico e rappresentare una chiave esterna: definiscilo casella combinata,
tramite l'Autocomposizione Ricerca basata sulla tabella Percorso.
4) IDPercorso della tabella Prelievi non puņ essere un contatore come hai
fatto intendere tu nel primo messaggio, ma numerico e casella combinata
(Autocomposizione Ricerca... basata sulla tabella Percorsi). Se fosse
contatore non potresti relazionarlo con IDPercorso della tabella Cliente.
5) La tabella DettPrelievi DEVE avere una chiave primaria in base alla quale
i record risultino univoci; hai due alternative: o come chiave primaria ti
dichiari l'insieme dei tre campi IDPrelievo, DataPrelievo e IdCliente,
oppure ti dichiari un campo IDDettPrelievi di tipo contatore e lo definisci
come chiave primaria; ti consiglio quest'ultima soluzione.
6) Definisci anche IDAutista della tabella Prelievi come casella combinata,
facendo l'Autocomposizione Ricerca... in base alla tabella Autisti.
Quanto sopra detto č il presuppo per poter realizzare quanto segue.
Ipotizziamo che il controllo sottomaschera della maschera Prelievo si chiami
SottomascheraDettPrelievi.
A fronte dell'evento "Su corrente" della maschera Prelievi genera il
seguente codice VBA:
    Me![DataPrelievo] = Date()
A fronte dell'evento "Dopo aggiornamento" del controllo IDAutista della
maschera Prelievo genera (per la creazione automatica dei record in
DettPrelievi) il seguente codice VBA:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Dim MioDb As Database
Dim rstCli  As Recordset
Dim rstDet As Recordset
Set MioDb = CurrentDb()
Set rstCli = MioDb.OpenRecordset("Clienti")
Set rstDet = MioDb.OpenRecordset("DettPrelievo")
rstCli.MoveFirst
Do Until rstCli.EOF
    If rstCli![IdPercorso] = Me![IdPercorso] Then
        rstDet.AddNew
        rstDet![IdPercorso] = Me![IdPercorso]
        rstDet![DataPrelievo] = Me![DataPrelievo]
        rstDet![IdCliente] = rstCli![IdCliente]
        rstDet.Update
    End If
    rstCli.MoveNext
Loop
rstCli.Close
rstDet.Close
Me![SottomascheraDettPrelievo].Requery
--
Roberto


 Quanto sopra detto è il presuppo per poter realizzare quanto segue.

Ho seguito il tuo consiglio (a proposito, grazie) ma il codice si interrompe
alla riga :
rstDet.Update
Messaggio: Impossibile aggiungere o modificare il record. Nella tabella
prelievi è necessario un record correlato


 >
ma il comando
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
in testa alla routine lo hai scritto?
Adoperi A2000?
Ho provato per scrupolo la routine che ti ho postato: su A97 e funziona.
Comunque il messaggio che hai dice appunto che non č stato preventivamente
salvato il record della tabella Prelievi e che pertanto non puņ registrare i
record nella tabella DettPrelievi.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------


Ho Access 97
Riproverò, comunque la riga che dici in testa alla routine l'ho scritta
