Newsgroup: it.comp.lang.visual-basic
Titolo: Importare dati in un DB senza avere duplicati

Visto che sono sempre prolisso nello scrivere cercherò di essere conciso
cosi mi leggete in tanti :-)
Importo dei dati dentro un DB ( Access) in pratica sono delle attività
giornaliere
Es. Importo Attività mese Dicembre
1/12/05 RIPOSO
2/12/05 RIPOSO
3/12/05 LAVORO1
4/12/05 LAVORO2
[CUT]
30/12/05 LAVORO3
31/12/05 LAVORO4
Ora mettiamo il caso che l'utente si sbagli e apra il file Dicembre e
rimportora il file dentro il DB.
Succede che nel DB ci sarà l'attività raddoppiata.
Leggendo vari 3d ho visto dovrei fare dei controlli prima di fare l'update
GIUSTO?
Io ho pensato di seguire questo ragionamento:
Ricerco tramite un Select tutti i dati relativi al mese che si stà
importando, li cancello e poi dopo faccio l'update.
Sbaglio?
Nel caso invece ci sia solo una variazione di un periodo definito del mese
in questione sempre tramite un select vado a prendere i record relativi a
quel giorno li cancello e faccio l'update dei nuovi
Se avete altre idee.. sono tutte orecchie!

 GIUSTO?
Giusto: al momento di importare un singolo record effettui una ricerca nella
tabella destinazione in base al campo che deve essere univoco (la data,
immagino). Se non trovi nulla allora puoi accodare il nuovo record,
altrimenti aggiorni quello trovato con gli altri campi letti da file.
Così risparmi cancellazioni e riaccodamenti a ripetizione.
Es.
    rs.Find "Data=#" & Format(MiaData, "yyyy/mm/dd") &"#"
    If rs.EOF Then
        ' Non esiste: aggiungi nuovo record e imposti data
        rs.AddNew
        rs!Data = MiaData
    End If
    ' In tutti i casi aggiorni gli altri campi
    rs!Campo1 = Campo1
    ...
    rs.Update
Bye & Happy New Year!!!
Raf

 Così risparmi cancellazioni e riaccodamenti a ripetizione.
Raf mi sa però che come ragionamento è sbagliato perchè mi sono venuti dei
dubbi.
Non faccio prima a richiamare tutti i dati relativi a quel mese, cancellarli
e scrivere di nuovo
i dati che sto importando? Cosi eviterei i doppioni di quel mese no?
Mi sorge questa domanda perchè ci sono solo 2 motivi per il quale si
potrebbero
creare duplicati
1) Quando l'utente si sbaglia e re-importa un mese già importato
2) Quando per motivi operativi di lavoro si va a cambiare la scheda lavoro
     che il datore di lavoro da a inizio mese
Nel primo caso io ( mi ripeto) penso sia meglio richiamare il mese in
questione, cancellarlo e riscriverlo
Nel secondo ( l'eventuale variazione della tavola di lavoro) Si richiamano i
dati relativi a quel giorno
( il giorno da variare), si cancellano tutti i dati nel database relativi a
quel giorno, si riscrivono i dati nuovi
Non è piu lineare così?
PS
Io alla fine l'ho tolto il campo chiave ( integer) tanto a che mi serve, io
quando devo richiamare i dati lo
faccio tramite la data. Sbagliato?
Stefano

 faccio tramite la data. Sbagliato?
Credo di no, purché Data sia la chiave primaria.
Ciao e Buon Anno
Raf

 Stefano
Andrea

 Dipende. Se il mio timore è giusto, è sbagliatissimo.
Forse è qui che non ci siamo capiti. Io ho tolto la chiave primare che era 
un contatore intero e basta e la chiave non era la
data bensi un numero intero
Stefano

 Stefano
Andrea

 RIMETTI QUEL RAZZO DI CONTATORE!
Fatto fatto ma please aiutami a capire perchè sbaglio...
Tra l'altro ora sono fermo sull'organizzazione logica, poi mi faccio quattro 
risate quando incomincio a
scrivere codice
:-))
Grazie Andrea comunque per i tuoi consigli e grazie a Raf per i suoi
A proposito ora che ci penso Raf mi ha dato ragione sul ragionamento :-))))
Stefano 

 il turno presenti esempio 4 attività nello stesso giorno.
Vedi che non sapevo tutto?! O meglio, non mi ricordavo...
Comunque Andrea ti ha già suggerito cosa è meglio fare in questo caso.
Ciao
Raf

 Comunque Andrea ti ha già suggerito cosa è meglio fare in questo caso.
Letto e riletto il messaggio di Andrea, mi sono andato a cercare anche 
qualche post riguardo
il Select Count con il Distinct ma non mi viene nulla in mente, o meglio 
essendo la prima volta
che mi imbatto nei database sto cercando altri post che hanno parlato della 
stessa cosa ( anche
in inglese)
Seguire come un caprone i consigli di chi è più esperto di me non mi è mai 
piaciuto, mi piace capire
i concetti logici anche perchè sono sicuro che appena mi metto a scrivere 
altro codice alla prima "buca"
mi rifermo.
Per esempio il comando Distinct da me mai usato ( non ho avuto di queste 
fortune :) ... ) me lo sono andato
a cercare nell'MSDN online e mi ha tirato fuori che è un comando che serve 
ad escludere le righe duplicate.
Quindi deduco che queste righe duplicate le trovi nel DB.. Giusto? Ma io nel 
DB non voglio nulla di duplicato
voglio un DB sempre pulito con dati non duplicati, perchè se do questa 
possibilità dopo 2 - 3 mesi avrei un database
pieno di dati doppioni visto che chi userà questo programma è imbranato.
L'idea di fulminarlo quando sbaglia non è male... :-)))))
Il Select Count invece non saprei proprio come usarlo specie avendo una 
chiave primaria (integer) totalmente slegata
(logicamente) dai record presenti nella tabella...
Ancora in alto mare vi ringrazio come sempre...

Forse sto sbagliando ancora ma voglio condividere con voi questa porzine di 
codice che ho scritto
Io ho seguito il mio pensiero ( lo so, sò de coccio) ma per ora mi sembra di 
essere sulla strada giusta
Ho provato ad importare lo stesso mese inziando con un DB vuoto
Poi ho re-importato di nuovo lo stesso mese per 3-4-5 volte e il database 
non si duplica
Vorrei sapere:
1) Cosa cambia rispetto a quello che mi diceva Andrea e dove ( per 
migliorare questa porzione di codice
andrebbe messo il comando Distinct) Forse un idea ce l'ho e mi tornerà utile 
quando scriverò il codice che
mi servirà per confrontare i record tra loro nella caso il database abbia 
records con la data in esame... Vero?
2) Mi guardate, se è possibile se ho messo bene le proprietà del comandi 
rs.Open?
3) Ad ogni fine ciclo è meglio impostare a Nothing l'oggeto rs2 oppure è 
uguale visto che ad ogni ciclo si crea una nuova istanza?
Penso sia meglio impostarlo a nothing però mi sa che allungo i tempi o dico 
un'altra bagianata?
4) Ho letto di problemi con le date con i database e se non ricordo male nei 
database le date vanno scritte in questo
formato mm/dd/yyyy. Perchè invece a me funziona mettendo la data così 
dd/mm/yy?
5) Lo so che il codice così com'è non accetta variazioni di turno ma sono 
sempre il mono-cerebrale di ieri e riesco
a fare una cosa alla volta :-P
Il codice che ho scritto con il vostro aiuto e con i 3d letti su questo NG è 
questo:
-----------------------------------------------
Public Sub ScriviTurno(Turno As CTurno)
'Scrive i dati nella tabella del DataBase Archivio.mbd
Dim rs As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim cn As New ADODB.Connection
Dim cn2 As New ADODB.Connection
Dim strSQL As String
Dim strSQL2 As String
'Si assicura che la connessione non sia gia aperta
If cn.State <> 0 Then cn.Close
'Apre la Connessione
ConnDB "Turni.mdb"
cn.Open strCnn
With Turno
    Set rs = New ADODB.Recordset
    rs.Open "[Turni]", strCnn, adOpenDynamic, adLockOptimistic, adCmdTable
       For Each Giornata In Turno.Giornate
                ' Se è un giorno di riposo la classe d'insieme Attività è 
vuota
                If Giornata.Attività.Count > 0 Then
                            rs.MoveLast
                            For Each Attività In Giornata.Tratte
                                    Set rs2 = New ADODB.Recordset
                                    With rs2
                                                strSQL2 = "SELECT * FROM 
Turni WHERE Giorno =" & "#" & Format(Giornata.Giorno, "mm/dd/yy") & "#"
                                                .Open strSQL2, strCnn, 
adOpenDynamic, adLockOptimistic
                                                If .EOF Then
                                                        '   NO RECORD 
TROVATO
                                                        rs.AddNew
                                                        rs!Giorno = 
Giornata.Giorno
                                                        rs!Attività = 
Giornata.TipoAttività
                                                        rs!Firma = 
Giornata.Firma
                                                        [CUT]
                                                Else
                                                        '    RECORD CON 
QUESTA DATA TROVATI
                                                        '---- Scrivere 
codice per vedere se si tratta della stessa attività oppure se si tratta di 
una variazione turno
                                                End If
                                 End With
                            Next
                Else
                            Set rs2 = New ADODB.Recordset
                            With rs2
                                    strSQL2 = "SELECT * FROM Turni WHERE 
Giorno =" & "#" & Format(Giornata.Giorno, "mm/dd/yy") & "#"
                                    .Open strSQL2, strCnn, adOpenDynamic, 
adLockOptimistic
                                    If .EOF Then
                                            '   NO RECORD TROVATO
                                            rs.AddNew
                                            rs!Giorno = Giornata.Giorno
                                            rs!Attività = 
Giornata.TipoAttività
                                    Else
                                            '    RECORD CON QUESTA DATA 
TROVATI
                                    End If
                            End With
                 End If
      Next
    rs.Update
    rs.Close
End With
Set rs = Nothing
Set rs2 = Nothing
End Sub

 Ancora in alto mare vi ringrazio come sempre...
Adesso è più chiaro?
Ciao,
Andrea

 Adesso è più chiaro?
Ehhhhhhhhhhhhhhhh come no!!!  :-))

 End Sub
Ok così si dovrebbe capire *molto* meglio.
I miei dubbi principali li ho espressi prima, quindi eviterò di
ripeterli. Ribadisco l'importanza di una chiave primaria numerica,
specialmente se si vuol mantenere tutto in una sola tabella.
Ciao,
Andrea

 Ehhhhhhhhhhhhhhhh come no!!!  :-))
Eheheheheheh credo che il problema stia nel fatto che io
sono molto "condensato", cioè dò tante cose per "assunte".
Speriamo cmq di capirci, anche perché mi piace come ragioni,
quindi mi scoccerebbe vederti intraprendere una strada scorretta.
Ciao,
Andrea

 Succede che nel DB ci sarà l'attività raddoppiata.
Deve necessariamente esistere una qualche regola che ti consenta di definire
se una determinata serie di dati debba essere considerata 'doppia'.
Supponiamo che la combinazione di Data e Attività sia un qualcosa che deve
essere univoco.
A questo punto, anzichè diventare matto con mille controlli, puoi fare la
cosa più banale del mondo:
I nuovi dati li importi in una tabella temporanea (che in Access non credo
esistano in Ram, e dovrai averne una fissa sul disco da svuotare ad inizio
importazione, ma non è un problema, magari usa Truncate anzichè Delete).
Una volta che tutti i record importati sono nella tabella TMP, e chiamando
TAB la tabella da aggiornare/accodare, puoi fare una cosa del tipo:
UPDATE TAB
SET .....
FROM TAB INNER JOIN TMP
ON TAB.CHIAVE=TMP.CHIAVE AND ....
INSERT TAB
(......)
SELECT TMP.CAMPO, TMP.CAMPO,......
FROM TMP LEFT OUTER JOIN TAB
ON TAB.CHIAVE=TMP.CHIAVE AND .....
WHERE TAB.CHIAVE IS NULL
Veloce, ma soprattutto molto molto più transazionale (passami il termine,
perchè le transazioni di Access sono una presa per il culo, quindi per me in
quell'ambiente una cosa è transazionale quando è veloce e monolitica se
guardata dall'applicativo).
Ciao
Alberto

Allora Andrea
rispondo subito ad alcune cose nelle quali non ci siamo capiti ma ti dico
anche che mi prenderò un attimo di pausa per approfondire megli il discorso
se no non ti seguo.
CHe intendo? Semplice oggi sono andato in libreria a comprarmi un libro
sull'accesso ai dati perchè è vero quando dici che dai molte cose per 
scontato
e io non è che ti segua bene bene.  :-(((
Ti ripeto amo imparare con i consigli altrui ma odio fare le cose senza 
capirle! :-P
Ognuno di noi ha un proprio modo di pensare e a me piacerebbe scrivere 
codice
con il mio modo di ragionamento ( sempre che sia giusto)  cosi il debug sarà 
anche
piu veloce e facile e il NG lo vorrei usare per capire "solo" se il mio modo 
è giusto
 poi per le riparazione del codice c'è sempre tempo. e troppo vi romperò!
Raf in questo mi ha molto molto aiutato e con lui sono riuscito a capire un 
infinità
di cose sulla programmazione ad oggetti e anche sul modo di comportarsi con 
le persone
Mi ha aperto un mondo! :-) Grazie RAF
------
Piccola spiegazione riguardo le cose che ci siamo dette.
1) La chiave  primaria l'ho rimessa :-) ma devo capire come usarla visto che 
è un semplice numero
2) La variazione turno cos'è?
Es.
Immagina uno che lavora sugli aerei. In una giornata mica fa solo una 
tratta. Ne farà 1 come ne potrà fare
4 oppure 5.
Avrà una firma, un orario di partenza, uno di decollo, andrà da A a B poi se 
nello stesso giorno fa più tratte
dopo un certo orario ripartirà  da B per andare a C fino ad arrivare a fine 
giornata dove ci sarà un orario
di fine servizio.
Il Giorno dopo ricomincia per "x" tratte etc.etc. e magari starà 
sballottolato per 3 - 4 giorni fuori casa per
stare poi a casa per 2 - 3 giorni di meritato riposo.
Quindi immaginati il turno di questo tipo... Sarà un campo minato o poco ci 
manca.
Una cosa tipo questa:
------------------------------------------------------------------------------------------------------------------
GG           |    ATTIVITA'                |    ORARI LT 
|   TRATTA     |
------------------------------------------------------------------------------------------------------------------
                                                        | FIRMA |  PART. | 
ARR.   |  FINE SERV. |  DA   |    A    |
------------------------------------------------------------------------------------------------------------------
01/01/06   RIPOSO MENSILE
02/01/06    AZ  1475                           1515     1600       1705 
FCO   VCE
                  AZ  1704                                        1835 
1945                             VCE   NAP
                  AZ  1704                                        2040 
2140            2210         NAP   CTA
03/01/06    AZ  1748                           1400     1445       1605 
CTA    FCO
                  AZ  0132                                        1710 
1940                             FCO   AMS
                  AZ  0113                                        2030 
2205           2235          AMS   LIN
04/01/06    AZ  0728                            1225    1325       1650 
MXP    ATH
                  AZ  0731                                        1740 
1915                             ATH    MXP
                  AZ  1051                                        2010 
2125           2155          MXP   FCO
05/01/06    AZ  1161                            2025    2125       2230 
2300          FCO    REG
06/01/06    AZ  1156                            1000    1045       1155 
REG     FCO
                  AZ  1157                                        1250 
1355                             FCO     REG
                  AZ  1158                                        1435 
1545          1615           REG      FCO
07/01/06   RIPOSO MENSILE
08/01/06   RIPOSO MENSILE
[CUT]
31/01/06   ......................
Ora una variazione turno potrebbe essere che il 5 invece di fare 
Roma-ReggioCalabria (FCO-REG) il tipo faccia
Roma-Milano oppure che apra malattia e quindi il 5 e il 6 non lavora ( 
QUINDI DOVRO' DARE MODO ALL'UTENTE
CHE INIZIALMENTE HA IMPORTATO IL TURNO DI FARE UNA VARIAZIONE).
Insomma una variazione turno io la intendo in questo modo.
Ti avevo fatto l'esempio del soldato che attacca servizio e fa le guardie, 
forse questo di esempio è più chiaro :-)
Ora se vuoi mettere questo turno dentro un database lo faresti in questo 
modo
TABELLA
    TURNO
GIORNO
ATTIVITA'
FIRMA
PARTENZA
ARRIVO
DA
A
FINE SERVIZIO
e ovviamente il Giorno è ripetuto perchè nello stesso giorno ci sono più 
tratte quindi CONVENGO CON VOI CHE NON PUO'
ESSERE LA CHIAVE PRIMARIA
Vorrei evitare anche di fare piu tabelle perchè non ne vedo la necessità 
però se voi dite che sbaglio pure qui, please let me know why!!
In tutti i modi stasera e stanotte la dedico al libro e vediamo se riesco a 
capire meglio i vostri consigli.
Grazieeeeeeeeeee di nuovo :-) 

 perchè le transazioni di Access sono una presa per il culo
Ecco un altro dubbio che mi hai fatto venire in mente. Dovendo fare un 
applicazione da dare ad utenti
singoli io sono obbligato a fare un applicazione che si basa su Access 
oppure ho anche altre strade?
In poche parole io "vorrei" fare un'applicazione dove non devo obbligare 
l'utente a comprare altri
programmi e ho pensato ad Access visto che OFFICE ce l'hanno tutti ( o 
quasi)

Cavolo avevo scritto la tabella bene invece si s-formatta
Ci riprovo
     GG   |ATTIVITA'|FIRMA|PART.|ARR.| FINE|  DA  |   A    |
----------------------------------------------------------------------
01/01/06| RIPOSO
02/01/06|  AZ1475   | 1515   | 1600  |1705|          |FCO|VCE
              |  AZ1704   |            | 1835  |1945|          |VCE|NAP
              |  AZ1704   |            | 2040  |2140| 2210 |NAP|CTA
03/01/06|  AZ1748   | 1400   | 1445  |1605|          |CTA|FCO
              |  AZ0132   |            | 1710  |1940|          |FCO|AMS
              |  AZ0113   |            | 2030  |2205| 2235 |AMS|LIN
 04/01/06|  AZ0728   | 1225   | 1325  |1650|          |MXP|ATH
              |  AZ0731   |            | 1740  |1915|          |ATH |MXP
              |  AZ1051   |            | 2010  |2125| 2155 |MXP|FCO
 05/01/06| AZ1161    |  2025  | 2125  |2230| 2300 |FCO|REG
 06/01/06| AZ1156    |  1000  | 1045  |1155|          |REG|FCO
              | AZ1157    |            | 1250  |1355|          |FCO|REG
              | AZ1158    |            | 1435  |1545|1615  |REG|FCO
07/01/06| RIPOSO   |           |            |        |         |         |
08/01/06| RIPOSO   |           |            |        |         |         |
 [CUT]
 31/01/06   ......................

 
secondo me il problema vero sono le tue conoscenze sui database.
non voglio essere maleducato, ma se non sai a cosa serve una chiave 
primaria o un INNER JOIN, mi sembra chiaro che se vuoi capire quello che 
stai facendo devi avere, almeno, una infarinatura sui database.
ho trovato questa pagina:
http://www.suffritti.it/SQLTutorial.htm
che mi sembra un discreto inizio
comunque se cerchi su google "introduzione database" trovi un sacco di 
pagine da leggere, magari ne trovi una piu' adatta alle tue conoscenze
e che ti aiutera' a capire quello che devi fare.
d'altronde sei tu che hai detto che vuoi capire il perche' delle cose,
bene, allora la soluzione e': studiare un po di teoria ;-)
bye
r

 oppure ho anche altre strade?
Nessuno è obbligato a fare niente.
Access ha l'immenso vantaggio di non installare 'quasi' niente sulle
macchine. Ci sbatti sopra MDAC e Jet, e la macchina è aggiornata. Punto.
Non serve Office, non serve niente, non serve amministrazione, niente
servizi.
Però ha le sfighe di un sistema basato su file: transazioni fantoccio,
performance in rete a livelli bradiposi, memory leak non indifferenti su
aperture/chiusure veloci, ecc...
Ha inoltre la grande sfortuna di essere nato come sistema molto (troppo)
vba-oriented, e quindi ha un Sql tutto suo, troppo legato a VB e troppo
slegato dall'Ansi.
Se vuoi il top, sia quanto a stabilità che a performance, studiati MSDE
(ver. 2000 SP4, SQLExpress aspettiamo ancora un pochino).
Se vuoi la massima semplicità di distribuzione, prosegui su Access. Ma fai
tanti backup...
Entrambe le strade sono completamente gratuite.
Ciao
Alberto

 secondo me il problema vero sono le tue conoscenze sui database.
A me è saltato all'occhio, come prima cosa, un serio problema coi
congiuntivi...
Alberto

 importazione, ma non è un problema, magari usa Truncate anzichè Delete).
Che io sappia, TRUNCATE TABLE non è un'istruzione supportata dall'SQL di Jet,
quindi purtroppo non la si può usare con DB Access.
Comunque (in SQLServer, ad esempio) sarebbe da preferire a DELETE (quando si
debba "svuotare" una tabella) in quanto molto più veloce.
Bye
Raf

No Nerone non sei maleducato anzi questo genere di critiche penso che 
spronino le persone a studiare di più, benchè fatte con garbo ed 
intelligenza.
Sul Truncate Table ero serio ( mai sentito e mai letto) sull'INNER JOIN 
scherzavo ma comunque è vero che non sono ferrato sui DB come alcuni di
voi, c'ho non toglie che i NG aiutano anche su questo NO! :-)
Con umiltà ma anche con presunzione nel voler capire a tutti i costi tornerò 
sull'argomento appena finisco il libro ( o parte) che ho comprato ( 
preferisco prima i
libri poi INTERNET ma quella pagina me la leggerò sicuramente grazie per 
averla resa nota)
In ultimo, congiuntivi a parte ( a Roma siamo un disastro sia con i 
congiuntivi e sia con le erre nonchè doppie), mica vorrete che deluda 
Andrea?
:-))))))

 le erre nonchè doppie
Apparentemente non solo con quelli :P
Lokar 

 sull'argomento appena finisco il libro ( o parte) che ho comprato ( 
prima di tutto ti dico bravo per la decisione di studiare, poi aggiungo 
che se ti servisse una mano per capire meglio quello che stai studiando 
chiedi pure, qualcuno che ti aiuta lo trovi ;-).
...
bye
r

 ha scritto nel messaggio 
news:422uu9F...@individual.net...


 BRRRRRR!


LEGHISTA ! :PP

 LEGHISTA ! :PP
Spiacente, sono incensurabile... sono di Roma 8)
Lokar.so.mejo.io
 

 
Lokar.so.mejo.io
:)
ma ho conosciuto leghisti che parlavano male dei meridionali pur essendo di
napoli, canosa, enna... l'essere umano e' una cosa assai complessa :)
ciao, a.

 Grazieeeeeeeeeee di nuovo :-) 
Prego,
Andrea

 :-))))))
Tu non devi "deludere me", piuttosto FORMARE TE STESSO!
Sono stato chiaro?
Qui non è questione di deludere qualcuno, il problema è fare le
cose nel modo "migliore"(e ci sarebbe da discutere...) così che:
1) Non stratificano pessime abitudini
2) Tu migliori le tue capacità
3) Acquisisci una mentalità tale da farti migliorare ancora col
    tempo.
Tutto, ovviamente, secondo me.
Ciao,
Andrea

Andrè non entro ancora nel merito di codici e codicilli vari rimango 
sull'organizzazione del DB
( fortunatamente il libro è ben fatto anche se non è il top)
Una "pregunta" (domanda)
In un messaggio di giorni fa mi hai fatto un esempio su più tabelle dove in 
una tu avresti messo
ID(PK)
  Data(Date)
  Attività(varchar)
Nella seconda invece tu metteresti una tabella fatta cosi
IDDettaglio(PK)
   IDTurnante(int, FK)
   IDTurno(Int, FK)
   Firma(int)
   OraInizio(int)
   OraFine(int)
   ecc.....
Scusa se a distanza di una settimana ancora sono qui a rompervi le scatole 
ma ancora non capisco
il perchè creare più tabelle anzichè una.
Prima dubbio. A che serve l'IDTurnante se il programma che sto "cercando" di 
scrivere sarà
personale e quindi nel DB ci saranno solo i turni mensili personali ?
( non ci saranno i turni di pippo, franco e ciccio ma solo di pippo)
Secondo non ho capito cosa intendi per FK. PK sta per Chiave Primaria e FK 
per cosa?
Terzo:In IDTurno che cosa ci dovrebbe essere?
Quarto: Il glio orari nella tabella li ho impostati come date, ho sbagliato? 
A proposito la formattazione
è hh.mm.ss e non riesco a dargli una formattazione cosi 
hh.mm
Non è che in rete c'è qualche esempio su questo genere di collegamenti tra 
tabelle cosi smetto di rompervi
i marroni?
( sono consapevole che a volte sono petulante)
Stefano

 Stefano
Andrea

 Leggere il manuale di Access pare brutto? :)
Si anche ma anche qualche esempio aiuta a capire quello che si studia :-)
Stefano