67 messaggi dal 17 luglio 2002
Supponiamo che io abbia una tabella chiamata TabellaUNO con un campo chiamato "id_TabellaUNO" di tipo (contatore) ed un campo chiamato "nomi" di tipo (text). Supponiamo che io abbia anche una tabella chiamata TabellaDUE con un campo chiamato "id_TabellaDUE" di tipo (contatore), un campo chiamato "id_TabellaUNO" di tipo (numerico), [che è il campo di collegamento tra la TabellaUNO e la TabellaDUE] ed un campo chiamato "nome" di tipo (text). La relazione tra le due tabelle è di uno a molti e cioè un record di TabellaUNO e molti records di TabellaDUE.
Se io volessi accodare a TabellaUNO, nel campo chiamato "nomi" tutti i dati contenuti nel campo chiamato "nome" di TabellaDUE che avessero come "id_TabellaUNO" lo stesso numero (ad esempio 22), quale sarebbe la corretta sintassi?

Faccio un esempio:

TabellaDUE, campo "id_TabellaUNO"=22, campo "nome"=Mario
TabellaDUE, campo "id_TabellaUNO"=22, campo "nome"=Gigi
TabellaDUE, campo "id_TabellaUNO"=22, campo "nome"=Fulvio

Ho bisogno di ottenere quanto segue:

TabellaUNO, campo "id_TabellaUNO"=22, campo "nomi"=Mario, Gigi, Fulvio

Spero di essere stato chiaro e sopratutto spero che qualcuno mi aiuti.
Suppongo che ci voglia un recordset, ma io non sono abbastanza esperto da
saperlo fare.
Grazie a chi vorrà aiutarmi.
25 messaggi dal 19 febbraio 2007
www.idioblast.it
Ciao, se ho capito bene come è strutturato il Database, facciamo un esempio:

Nella Tabella TabellaUNO, abbiamo 4 record fittizzi illustrati qui sotto:

id_TabellaUNO | Nomi

1 | NomiGruppoA
2 | NomiGruppoB
3 | NomiGruppoC
4 | NomiGruppoD


Nella TabellaDUE Abbiamo invece i seguenti Record tutti associati all'ID 1 (NomiGruppoA):

id_tabellaDUE | id_tabellaUNO | Nome

1 | 1 | Mario
2 | 1 | Gigi
3 | 1 | Fulvio


Ora vogliamo recuperare i Dati di tutti i nomi sotto NomiGruppoA (ID=1), quindi creeremo una query SQL che ci restituira tutti i record associati a NomiGruppoA (nel nostro esempio, restituirà quindi i 3 nomi Mario, Gigi, Fulvio.

La soluzione piu' rapida è quella di effettuare una Query SQL utilizzando un LEFT JOIN, la cui sintassi è:
SELECT campi FROM prima_tabella LEFT JOIN seconda_tabella ON prima_tabella.chiave_primaria = seconda_tabella.chiave_esterna


Creiamo allora la connessione e eseguiamo la query SQL (si suppone l'utilizzo un DB Access)

Dim Conn, RS
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("Database.mdb")
Set RS = Server.CreateObject("ADODB.Recordset")

'CREO LA QUERY DOVE VOGLIO OTTENERE TUTTI I NOMI DELLA TABELLA 2 DOVE TabellaDUE.id_TabellaUNO E' = a 1

'ATTENZIONE AL WRAPPING
SQL = "SELECT TabellaUNO.id_TabellaUNO, TabellaUNO.nomi, TabellaDUE.nome FROM TabellaUNO LEFT JOIN TabellaDUE ON TabellaUNO.id_TabellaUNO =  TabellaDUE.id_TabellaUNO WHERE TabellaUNO.id_tabellaUNO = 1;"

Set RS = Conn.Execute(SQL)


Quindi come risultato otteniamo quello che cercavi ossia:
id_TabellaUNO | Nomi | Nome
1 | NomiGruppoA | Mario
1 | NomiGruppoA | Gigi
1 | NomiGruppoA | Fulvio


Spero di esserti stato d'aiuto.
Ciao, Daniele

Azione, Reazione.
67 messaggi dal 17 luglio 2002
Grazie Daniele,
a me purtroppo non funziona.
Probabilmente dovrebbe esserci una query di aggiornamento che prenda
i tre nomi dai tre records della tabellaDUE, li converta (non so come)
in un insieme "Mario, Gigi, Fulvio" e aggiorni il campo "Nomi" della tabellaUNO avente id_TabellaUNO=1
25 messaggi dal 19 febbraio 2007
www.idioblast.it
Ciao, forse non avevo ben inteso quello che volevi. Questa funzioncina dovrebbe (non l'ho testata) fare quello che ti interessa.

Prende tutti i Nomi dalla tabellaDUE dove id_TabellaUNO è un determinato ID, li raggruppa e poi aggiorna il campo "nomi" nella TabellaUNO con questa serie di nomi.

SQL = "SELECT nome FROM TabellaDUE WHERE id_TabellaUNO = 1;"
Set RS = Conn.Execute(SQL)

If Not RS.EOF Then
  Do While Not RS.EOF
    ListaNomi = ListaNomi & RS("Nome") & " "
    RS.MoveNext
  Loop
End If

RS.Close()

SQL = "UPDATE TabellaUNO SET nomi = '" & ListaNomi & "' WHERE ID_tabellaUNO = 1;"
Set RS.Conn.Execute(SQL)


Ma a cosa ti serve una cosa cosi' scusa? per curiosità
Ciao Daniele

Azione, Reazione.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.