Newsgroup: it.comp.appl.access
Titolo: Difficoltà di progettazione (2)

Ciao a tutti
Mi riferisco ai miei post precedenti con lo stesso titolo.
Per motivi di ordine "burocratico" ho dovuto modificare la struttura
"portante" del mio
db in fase di progettazione:
Nominativi:
IDNominativo           Contatore e chiave primaria
Nome                   Testo
AttivitàPrevalente     Testo
StatiServizio:
IDStatoServizio        Contatore e chiave primaria
IDNominativo           Numerico
DataStSe               Data/ora
Attività               Testo
relazione uno-a-molti,integrità referenziale
aggiungendo una nuova tabella
TabellaLocalità:
IDLocalità  Contatore e chiave primaria
Località  Testo
aggiungendo inoltre alla tabella StatiServizio il nuovo campo IDlocalità
per creare una relazione molti-a-molti tra la tabella "TabellaLocalità" la
tabella "Nominativi".
Dovrei adesso modificare il codice sottoriportato che mi consentiva una
determinata operatività (ringraziando ancora  Roberto, che ne è l'autore),
in modo tale che venga aggiornato, nella tabella "StatiServizio", anche il
campo "IDLocalità".
Inutile dire che, sapendo poco o nulla di codice (ma ho cominciato a
studiarlo a capofitto), ho fatto un pò di tentativi ad intuito, naturalmente
infruttuosi.
Credo che il problema sia far lavorare in maniera corretta la funzione
UPDATE nel nuovo contesto.
If Not IsNull(DLookup("[DataStSe]", "StatiServizio", _
"DataStSe=#" & Me!DataCreazione & "#")) Then
    MsgBox "Stati di Servizio con data " & Me!DataCreazione & " già
esistenti."
    Exit Sub
Else
Dim rstStSe As DAO.Recordset
Dim rstNomi As DAO.Recordset
Set rstStSe = CurrentDb.OpenRecordset("StatiServizio")
Set rstNomi = CurrentDb.OpenRecordset("Nominativi")
rstNomi.MoveFirst
Do Until rstNomi.EOF
    rstStSe.AddNew
    rstStSe!IDNominativo = rstNomi!IDNominativo
    rstStSe!DataStSe = Me!DataCreazione
    rstStSe!Attività = rstNomi!AttivitàPrevalente
    rstStSe.Update
    rstNomi.MoveNext
Loop
Set rstStSe = Nothing
Set rstNomi = Nothing
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frmControlloAttività"
stLinkCriteria = "[DataStSe]=" & "#" & Me![DataCreazione] & "#"
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If
PS: x Roberto, con i tuoi ultimi suggerimenti sono riuscito a far lavorare
il DB in maniera corretta.
Saluti a tutti!


A mio avviso la tabella Nominativi va modificata in:
IDNominativo           Contatore e chiave primaria
Nome                     Testo
AttivitàPrevalente     Testo
LocalitàPrevalente    Numerico
e la tabella StatiServizio va modificata in:
IDStatoServizio        Contatore e chiave primaria
IDNominativo           Numerico
DataStSe               Data/ora
Attività                   Testo
IDLocalità               Numerico
E il codice VBA diventa:
If Not IsNull(DLookup("[DataStSe]", "StatiServizio", _
"DataStSe=#" & Me!DataCreazione & "#")) Then
    MsgBox "Stati di Servizio con data " & Me!DataCreazione & " già
esistenti."
    Exit Sub
Else
Dim rstStSe As DAO.Recordset
Dim rstNomi As DAO.Recordset
Set rstStSe = CurrentDb.OpenRecordset("StatiServizio")
Set rstNomi = CurrentDb.OpenRecordset("Nominativi")
rstNomi.MoveFirst
Do Until rstNomi.EOF
    rstStSe.AddNew
    rstStSe!IDNominativo = rstNomi!IDNominativo
    rstStSe!DataStSe = Me!DataCreazione
    rstStSe!Attività = rstNomi!AttivitàPrevalente
    rstStSe!IDLocalità = rstNomi!LocalitàPrevalente
    rstStSe.Update
    rstNomi.MoveNext
Loop
Set rstStSe = Nothing
Set rstNomi = Nothing
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frmControlloAttività"
stLinkCriteria = "[DataStSe]=" & "#" & Me![DataCreazione] & "#"
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:9m115j$51ja$1...@stargate1.inet.it...

 Grazie innanzitutto per la solita gentilezza.
In effetti, non mi sono dilungato sulle ragioni della variazione alla
struttura del DB per non appesantire il post.
Dovrò infatti prevalentemente gestire output di questo tipo:
Data        Nominativo        AttivitàPrevalente        Località
01/05        Bianchi            Presente                        Roma
01/05        Rossi               Presente                        Milano
02/05        Bianchi            Assente                         Roma    <<
02/05        Bianchi            Presente                        Milano   <<
02/05        Rossi               Presente                        Milano
.......          .........               ...........
.........
per i quali come vedi, poichè per una certa data e per un certo nominativo
devono spesso venir tracciate 2 attività diverse in due località diverse, ho
dovuto per forza di cose creare la struttura che ho descritto, anche perchè
ho paura di appesantire troppo il DB (almeno, queste sono le indicazioni
"canoniche" dei manuali).
Tieni anche presente che dovrò aggiungere molti altri attributi (campi) agli
oggetti (tabelle).
Gli eventuali "doppioni" verranno inseriti manualmente giorno per giorno.
Per inciso, anche la tabella "TabellaLocalità" ha circa un centinaio di
records diversi.
Come ti dicevo, ho provato a trafficare sul codice ma non so come gestire il
DO UNTIL, l'UPDATE e il LOOP x le 2 tabelle contemporaneamente (data la
relazione molti-a-molti).
Se non hai altri suggerimenti, e ti riuscisse di aggiornare il codice, ti
pregherei pure di inserire qualche riga di commento nei passaggi "topici",
in modo tale che io possa capire meglio.
PS. Questo NG è veramente una Bibbia!
Sto scaricando tutti i post nella titanica impresa di
stamparmeli............
Ciao


[CUT]

Scusami, ma non sono d'accordo di procedere a questa maniera: a mio modesto
parere un database non è come una palla di plastilina che l'artista plasma a
seconda della creatività del momento.
Prima di passare alla fase di progettazione e di realizzazione del database
occorre effettuare una analisi che precisi cosa voglio ottenere e da quali
presupposti partire. Definita quindi la struttura definitiva del database,
il codice (VBA e/o SQL) non è qualcosa di generalizzabile da rabberciare al
variare della struttura delle tabelle e/o dell'output informativo; va
realizzato in maniere coerente al contesto in cui deve operare.
Forse è meglio cominciare da capo, naturalmente dopo che tu avrai
puntualizzato ciò che ti serve e i dati che hai a disposizione.
Il tutto dedicandoci il tempo necessario e senza fretta: come ho avuto modo
di dire altre volte, a mio avviso l'informatica è un piatto da gustare con
calma, non è un panino da azzannare ad un fast food McDonalds maniera.




Capisco di averti dato questa impressione, ma credimi, ho ben chiaro
in testa quello
che farò DOPO. (non sottovalutarmi troppo!)
Il mio grosso errore è stato di non aver previsto la complicazione che
ti ho esposto.
Del resto credevo che tu avessi capito che stavo lavorando su una
bozza che ho dovuto modificare dopo che ho acquisito ulteriori (e
definitive) informazioni da parte dell'utente finale.
Ne' tantomeno potevo pretendere di sottoporre all' NG l'intero
progetto in tutte le sue ramificazioni!
Neppure prevedo di dover mandare dei post ad ogni successivo
passaggio! -Penso di sapermi arrangiare con quello che so già.
Ho riflettuto a lungo sulla struttura del mio DB, e l'unico punto di
cui proprio non 
riuscivo a intravedere una soluzione con i mezzi che ho era come
automatizzare quei passaggi. Senza di quello,non riuscirei a fare
nulla di decente. Tutto il resto (maschere, query ecc..) sono dettagli
che si risolvono in un modo o nell'altro.
Ciò che affermi è sacrosanto, oltrechè nobile, poichè rivela da parte
tua una disponibilità ancora maggiore, testimoniata dalle centinaia di
risposte che dai sull'NG.
Io però sono condizionato dal pudore di chiedere il meno possibile,
solo quando non posso proprio farne a meno.
Non prevedo ulteriori "rabberciamenti" di codice e, anche se fosse, me
ne guarderei bene
dal chiederli.
Non ho però l'esperienza necessaria per capire se quello che ho
chiesto significhi
poche correzioni oppure riscrivere tutto (cosa che non ti chiedo
affatto).
Valuta tu e regolati di conseguenza.
Ciao e grazie ancora per l'attenzione.