Newsgroup: it.comp.appl.access
Titolo: Creazione tabella

Buongiorno,
sono nuovo del gruppo ed ho la seguente necessità. Partendo da una
tabella ordinata per punto di campionamento in cui ciascun campo
contiene la concentrazione di un elemento, debbo ottenere una tabella
ordinata per punto di campionamento e nome elemento in cui il terzo
campo contiene la concentrazione dell'elemento.
In altri termini la prima tabella è composta da un campo
id_campionamento e diciamo da 10 campi uno per ciascun elemento; la
seconda tabella è composta da un campo id_campionamento, un campo
nome_elemento ed un campo concentrazione_elemento. Pertanto se nella
prima tabella ho dieci record nella seconda ne dovrò avere 100.
Come posso fare?
Grazie

Dopo dura riflessione, brighela ha scritto :

Prova a vederti le query di unione, poi se hai difficoltà chiedi.
E, ovviamente, basta database non normalizzati :-)
Ciao
-- 
Alberto S

Non capisco come posso passare dalla prima alla seconda tabella con
una query di unione; puoi spiegarmi?
Grazie

 Grazie
Prego
--
ac

 wrote in message 
news:8cf3110d-1c11-4fa8...@i13g2000yqd.googlegroups.com...

Non ho capito.
Prova a scrivere un record della prima tabella
e la sua trasformazione secondo il costrutto della
seconda tabella.
Bruno
 

Premetto, e mi scuso, che non ho provato la query proposta.
Trascrivo di seguito un fax simile delle due tabelle; la prima è
quella che ho la seconda è quella che devo creare per poter imputare
dati in software di modellazione:
tab1:
id_camp	As	Pb	Cd
S1	20	50	10
S2	15	25	30
tab2:
id_cam	elemento	conc
S1	As	20
S1	Pb	50
S1	Cd	10
S2	As	15
S2	Pb	25
S2	Cd	30
Grazie

 S2 Cd 30
============================
Private Sub Transpose_Click()
Dim db As Database, Tab1Name As String
Dim RS1 As Recordset, RS2 As Recordset
Dim i As Integer, n As Integer, Tab2Name As String
' Definizioni
' ------------------
Tab1Name = "Table1"
Tab2Name = "Table2"
' ------------------
Set db = CurrentDb
n = db.TableDefs(Tab1Name).Fields.Count - 1
Set RS1 = db.OpenRecordset(Tab1Name, dbOpenDynaset)
Set RS2 = db.OpenRecordset(Tab2Name, dbOpenDynaset)
Do Until RS1.EOF
    For i = 0 To n - 1
        RS2.AddNew
        RS2(0) = RS1(0)
        RS2(1) = RS1(i + 1).Name
        RS2(2) = RS1(i + 1)
        RS2.Update
    Next
    RS1.MoveNext
Loop
End Sub
=============================
Ti occorrono le solite References:
            Visaul Basic for Applications
            Microsoft Access xxx Object Library
            Microsoft DAO xxx Object Library
relative alla tua versione di Access.
Io ho usato Access 2010-64bit
Bruno
 

 Grazie
Esempio rapido, partendo dai dati che hai dato a Bruno Campanini
SELECT tab1.id_camp, "As" AS elemento, tab1.As
FROM tab1 UNION SELECT tab1.id_camp, "Pb" AS elemento, tab1.Pb
FROM tab1 UNION SELECT tab1.id_camp, "Cd" AS elemento, tab1.Cd
FROM tab1
È da inserire l'ordinamento ed eventualmente l'inserimento in una nuova 
tabella.
Ciao
-- 
Alberto S


Stamattina ero di fretta ... il passaggio dei dati alla tab2 lo fai poi 
con una query di comando:
SELECT * INTO tab2 FROM [nome della query di unione]
Ciao
-- 
Alberto S

 FROM tab1
Bellissima!
Lasciami correggere una piccola imperfezione:
SELECT tab1.id_camp, "As" AS elemento, tab1.As AS Concentrazione
FROM tab1 UNION SELECT tab1.id_camp, "Pb" AS elemento, tab1.Pb
FROM tab1 UNION SELECT tab1.id_camp, "Cd" AS elemento, tab1.Cd
FROM tab1
Bruno 

 Dim i As Integer, n As Integer, Tab2Name As String
[...]
2nd Edition:
===================================
Private Sub Transpose_Click()
Dim db As Database, SourceTableName As String, SQL As String
Dim RS1 As Recordset, RS2 As Recordset
Dim i As Integer, n As Integer, TargetTableName As String
' Definizioni
' --------------------------------------------------------------------
SourceTableName = "Table1"
TargetTableName = "Table2"    ' Se esiste verrà cancellata
' --------------------------------------------------------------------
SQL = "CREATE TABLE " & TargetTableName & _
      "(ID CHAR, " & _
      "Elemento CHAR, " & _
      "Concentrazione SMALLINT);"
Set db = CurrentDb
On Error Resume Next
DoCmd.DeleteObject acTable, "Tab2"
On Error GoTo 0
db.Execute SQL
n = db.TableDefs(SourceTableName).Fields.Count - 1
Set RS1 = db.OpenRecordset(SourceTableName, dbOpenDynaset)
Set RS2 = db.OpenRecordset(TargetTableName, dbOpenDynaset)
Do Until RS1.EOF
    For i = 0 To n - 1
        RS2.AddNew
        RS2(0) = RS1(0)
        RS2(1) = RS1(i + 1).Name
        RS2(2) = RS1(i + 1)
        RS2.Update
    Next
    RS1.MoveNext
Loop
End Sub
==================================
Bruno