Discussione:
Dividere i dati di una tabella in due tabelle e collegarle
(troppo vecchio per rispondere)
åre 27
2004-12-05 13:17:02 UTC
Permalink
Ho un foglio excel con tutti i libri che ho a casa mia e voglio trasformarlo
in db access in quanto il numero di libri è diventato molto grande.

Il mio file excel è composto da queste colonne: nome autore, cognome autore,
nazione autore, titolo libro, anno, lingua, casa editrice.

io ho importato tutto in una tabella access che ho chiamato libri e fin qui
nessun problema.

Ora però per una migliore gestione vorrei dividere la tabella libri in due
tabelle collegate e cioè autori con solo i campi nome autore, cognome
autore, nazione autore e una seconda tabella libri in cui rimangono le
informazioni sui libri.

Come posso fare senza dover reinserire 700 libri o 700 autori?
Esiste qualche procedura per suddividere i dati della tabella e generare una
relazione tra le due nuove tabelle?

Naturalmente il problema è che ci sono molti autori di cui ho più di un
libro e quindi vorrei che questa relazione fosse 1 a molti.


Grazie mille
Carlo Costarella
2004-12-05 14:33:09 UTC
Permalink
Post by åre 27
Ho un foglio excel con tutti i libri che ho a casa mia e voglio trasformarlo
in db access in quanto il numero di libri è diventato molto grande.
Il mio file excel è composto da queste colonne: nome autore, cognome autore,
nazione autore, titolo libro, anno, lingua, casa editrice.
io ho importato tutto in una tabella access che ho chiamato libri e fin qui
nessun problema.
Ora però per una migliore gestione vorrei dividere la tabella libri in due
tabelle collegate e cioè autori con solo i campi nome autore, cognome
autore, nazione autore e una seconda tabella libri in cui rimangono le
informazioni sui libri.
Come posso fare senza dover reinserire 700 libri o 700 autori?
Esiste qualche procedura per suddividere i dati della tabella e generare una
relazione tra le due nuove tabelle?
Naturalmente il problema è che ci sono molti autori di cui ho più di un
libro e quindi vorrei che questa relazione fosse 1 a molti.
Grazie mille
Ciao,
la cosa si può fare ma è molto lunga da spiegare.
In sintesi:
hai bisogno di contrassegnare ogni autore con un numero univoco:
soluzione...una query raggruppata con i soli nomi, cognomi e nazione la fai
diventare una query di accodamento ad una tabella con ID (contatore),
Autore (testo 150 caratteri) e Nazione (Testo 100 caratteri). La tabella la
crei prima ovviamente.
Nella tabella originale aggiungi un campo numerico (IDAutore) senza indici e
la lasci vuota. Con una query ma molto meglio da codice inserisci l'ID della
nuova tabella nel nuovo campo della vecchia tabella, lo stesso id per ogni
Autore (cognome e nome) presente nella nuova tabella.
Risultato fino ad ora: Una tabella Autori con ID univoco e una tabella
(vecchia) con IDAutore ora pieno.
A questo punto collega con relazione uno a molti la nuova tabella con la
vecchia utilizzanto l'ID comune. Puoi eliminare i campi Cognome, Nome e
Nazione dalla vecchia tabella.

Questo è solo uno spunto.
Ricorda di fare sempre una copia di riserva prima di lavorare col db.

Buon lavoro
Ciao, Carlo
åre 27
2004-12-05 15:08:32 UTC
Permalink
Questo l'ho fatto ho una nuova tabella chiamata autori in cui ho le voci
nome cognome nazione e idautore che è un contotatore.
Ho eliminato gli autori che comparivano più volte (perchè ovviamente nel
foglio excel originale si inseriva tutte le volte l'autore) e ho quindi
circa 460 autori contro 700 libri.
Post by Carlo Costarella
Nella tabella originale aggiungi un campo numerico (IDAutore) senza indici e
la lasci vuota.
Fatto.

Con una query ma molto meglio da codice inserisci l'ID della
Post by Carlo Costarella
nuova tabella nel nuovo campo della vecchia tabella, lo stesso id per ogni
Autore (cognome e nome) presente nella nuova tabella.
Io avevo già realizzato una casella combinata in cui potevo scegliere
l'autore e inserivo in idautore della tabella libri l'id relativo all'autore
di quel libro.
Però ovviamente in questo modo devo andare per 700 volte a reinserire
l'autore.

Al che io avevo pensato che con del codice potrei automatizzare
l'operazione.
Avevo pensato a una maschera con un pulsante e poi di associare il pulsante
a un po' di codice di questo tipo.

for n=1 to 700 (dove 700 sono i record della tabella libri=
for m=1 to 460 (460 sono i record della tab autori)
if cognome autore del record n della tabella libri=cognome autore del
record m della tabella autore then
idautore del record n della tabella libri= idautore del record m
della tabella autore
endif
next m
next n
Ovviamente non ho la più pallida idea di come fare riferimento al record n
della tabella libri per esempio
Secondo te si può fare una cosa del genere?
Post by Carlo Costarella
Buon lavoro
Ciao, Carlo
Grazie mille
Paolo
Carlo Costarella
2004-12-05 18:26:40 UTC
Permalink
Post by åre 27
Questo l'ho fatto ho una nuova tabella chiamata autori in cui ho le voci
nome cognome nazione e idautore che è un contotatore.
Ho eliminato gli autori che comparivano più volte (perchè ovviamente nel
foglio excel originale si inseriva tutte le volte l'autore) e ho quindi
circa 460 autori contro 700 libri.
Post by Carlo Costarella
Nella tabella originale aggiungi un campo numerico (IDAutore) senza
indici
e
Post by Carlo Costarella
la lasci vuota.
Fatto.
Con una query ma molto meglio da codice inserisci l'ID della
Post by Carlo Costarella
nuova tabella nel nuovo campo della vecchia tabella, lo stesso id per ogni
Autore (cognome e nome) presente nella nuova tabella.
Io avevo già realizzato una casella combinata in cui potevo scegliere
l'autore e inserivo in idautore della tabella libri l'id relativo all'autore
di quel libro.
Però ovviamente in questo modo devo andare per 700 volte a reinserire
l'autore.
Al che io avevo pensato che con del codice potrei automatizzare
l'operazione.
Avevo pensato a una maschera con un pulsante e poi di associare il pulsante
a un po' di codice di questo tipo.
for n=1 to 700 (dove 700 sono i record della tabella libri=
for m=1 to 460 (460 sono i record della tab autori)
if cognome autore del record n della tabella libri=cognome autore del
record m della tabella autore then
idautore del record n della tabella libri= idautore del record m
della tabella autore
endif
next m
next n
Ovviamente non ho la più pallida idea di come fare riferimento al record n
della tabella libri per esempio
Secondo te si può fare una cosa del genere?
Post by Carlo Costarella
Buon lavoro
Ciao, Carlo
Grazie mille
Paolo
Ok. Sei sulla strada giusta.
Un po' di sano e salutare codice.
Scrivi una query semplice mettendo in un unico campo le tre voci
fondamentali: Identificativo:[Cognome] & " " & [Nome] & " " & [Nazione]. In
pratica i tre campi comuni separati da spazi. Aggiungi anche il campo
IDAutore (vuoto per ora), il tutto dalla vecchia tabella. Chiama questa
query per esempio "SQIdentificativo".
Nuovo modulo. Nuova sub. Questo esempio prevede un riferimento a DAO.

Public Sub AccodaIDAutore()
Dim RCS As Recordset, RCSAutori As Recordset, i As Integer, ii As Integer
Dim MiaStringa As String

Set RCS = CurrentDb.OpenRecordset("SQIdentificativo")
Set RCSAutori = CurrentDb.OpenRecordset("Autori")

RCSAutori.MoveLast
RCSAutori.MoveFirst

For ii = 1 To RCSAutori.RecordCount
Do While True
RCS.MoveLast
With RCS

For i = 1 To RCS.RecordCount
MiaStringa = RCSAutori!Cognome & " " & RCSAutori![NomeAutore] & " "
& RCSAutori!Nazione
.FindFirst "Identificativo = '" & MiaStringa & "'" & " And
Isnull([IDAutore])"
If .NoMatch Then
Exit Do
End If
.Edit
!IDAutore = RCSAutori!ID
.Update
RCS.MoveNext
Next i

End With

Exit Do

Loop
RCSAutori.MoveNext
Next ii
RCSAutori.Close
RCS.Close

End Sub

Probabilmente dovrai cambiare qualche nome...ora tocca a te.

Ciao, Carlo

Continua a leggere su narkive:
Loading...