20 messaggi dal 24 luglio 2001
Salve a tutti
Ho sviluppato un poco i consigli ricevuti in merito ad un db con tanti campi (150) e ho diviso il db in tre tabelle.
Per l'aggiunta dei dati creo un modulo che mi invia i dati ad una pagina ASP.
Il modulo invia i dati tramite il metdoo POST alla pagina AGGIORNA.ASP. Questa pagina si inciarica di aggiungere i dati al db.
In pratica prendo i primo 50 campi e li aggiungo alla prima tabella. Prendo poi i successivi 50 e li metto nella secondas tabella e cosi' via.

Semplificando molto si potrebbe fare un cosa del tipo:

Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("mio_database.mdb")

'AGGIUNGO I DATI NELLA PRIMA TABELLA
sql = "PRIMA_TABELLA"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3

rs.addnews
rs.fields("primo_campo") = request.form("primo_campo")
rs.fields("secondo_campo") = request.form("secondo_campo")
request.form...=...
rs.update

'AGGIUNGO I DATI NELLA SECONDA TABELLA
sql = "SECONDA_TABELLA"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3

rs.addnews
rs.fields("primo_campo") = request.form("primo_campo")
rs.fields("secondo_campo") = request.form("secondo_campo")
request.form...=...
rs.update

'AGGIUNGO I DATI NELLA TERZA TABELLA
sql = "TERZA_TABELLA"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3

rs.addnews
rs.fields("primo_campo") = request.form("primo_campo")
rs.fields("secondo_campo") = request.form("secondo_campo")
request.form...=...
rs.update

Quando ho finito l'aggiunta di tutto chiudo il recordset e la connessione.

rs.close
set rs=nothing
conn.close
set conn=nothing

In questo modo con un unico modulo aggiungo i dati a piu' tabelle.
Dove è il problema direte voi ??
Il problema è che quando passo i dati con il form alle tre tabelle, ognuna delle quali ha chiaramente un ID personale, non passo nessun campo di collegamento.
Mi spiego: se passo dati alla tabella due, dovrei teoricamente passare anche l?ID della tabella uno e cosi se passo i dati alla tabella tre dovrei passare l?ID della tabella uno in modo che quando voglio visualizzare i dati ci sia una relazione fra i record delle tre tabelle.
A questo punto non so se sono io che sono fuso ma come studente ASP non so se ho scritto delle cav..ate oppure se non le ho scritte non so comunque passare questi ID per unire le tabelle.

Spero di non rompervi con troppa frequenza ma è il mio primo lavoro serio e vorrei realizzarlo bene.

Ciao e grazie a tutti


499 messaggi dal 14 luglio 2001
IL campo da passare è il campo che hanno il valore in comune, di conseguenza.. non importa se non hai un JOIN tra le tabelle durante l'immissione, ma è importante che il dato che le unisce siano uguali in modo che in una tabella succesiva, richiamando i dati nella TAB1, sia collegata alla TAB2 con un campo che abbia un valore univoco ed in comune... ora sta a te individuare quale sia questo campo... e durante l'immisione dei dati inserire lo stesso valore nelle differenti tabelle...
per cui.. fai l'update nella prima tabella per poi ricavarti il suo ID dell'ultima immissione che diventa punto di riferimento da inserire nelle altre due tabelle.... che vengono aggiornate successivamente alla Prima, in modo che tu hai un ID univoco nella prima tabella che è punto di riferimento di JOINT nelle altre due....

se non sai come ricavarti l'ID dell'ultima immissione posta , altrimenti segui il consiglio....

ciao..




enzo
www.dnetware.it

enzo
www.dnetware.it
20 messaggi dal 24 luglio 2001
Innanzi tutto grazie a te Enzo

Effettivamente non so come ricavare l'ID dell'ultima immissione.
Penso che poi dovrei metterlo nell'UPDATE della seconda tabella

'AGGIUNGO I DATI NELLA SECONDA TABELLA
sql = "SECONDA_TABELLA"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3

rs.addnews

***** qui ??? *****

rs.fields("primo_campo") = request.form("primo_campo")
rs.fields("secondo_campo") = request.form("secondo_campo")
request.form...=...
rs.update

Abbi pazienza ma sono ancora un pivello con ASP perchè prima usavo Frontpage e di codice non se ne vedeva mai.

Grazie di tutto



499 messaggi dal 14 luglio 2001
Non è un problema di asp quanto di una buona progettazione del DB, ora non so come mai hai Ben 150 Campi suddivisi in tre tabelle, ma a colpo d'occhio, per intuizione, c'è qualche cosa che non va... nella progettazione del tuo DB, non per farmi gli affari tuoi, ma i 150 campi cosa contengono?, nel frattempo di faccio un piccolo schemino su come relazionare le tre tabelle, ma ripeto, secondo me dovresti riprogettarlo...

allora..

TAB1

IDTab1
Nome
Cognome
Indirizzo

TAB2
IDTab2
IDTab1
Telefono
Fax
Email

TAB3
IDTab3
IDTab1
Hobby
età

Come vedi la TAB2 e la TAB3 hanno in comune un campo con la TAB1 che è l'IDTab1, questo schemino ti fa capire come poter relazionare in modo classico le tre tabelle, creando un joint con il campo univoco in comune e cioè IDTab1

strSQL="SELECT * FROM TAB1, TAB2, TAB3 WHERE TAB1.IDTab1=TAB2.IDTab1 AND TAB1.IDTab1=TAB3.IDTab1 ORDER BY TAB1.IDTab1"

questa piccola stringa ti relaziona le tre tabelle con l'unico e ti seleziona tutti i campi delle tre tabelle organizzate per IDTab1

come vedi è molto semplice ma toglimi il dubbio che ti ho esposto prima..

Per qunto riguarda il ricavarsi dell'ultimo ID inserito...
basta fare cosi..
inserisci i dati nella TAB1 subito dopo l'UPDATE (Sempre se l'ID è un contatore numerico) lo richiami in questo modo:
Rs.Requery
Rs.MoveLast
IDUnivoco=Rs("IDTab1")
Rs.Close
Set Rs=Nothing

ed hai nella variabile IDUnivoco il Valore dell'ultimo Dato Inserito che lo inserisci a sua volta nelle altre due tabelle nel IDTab1..

Spero di essere stato chiaro....

ciao..


enzo
www.dnetware.it

Modificato - conidi - 03 Set 2001 13:32:10

enzo
www.dnetware.it
20 messaggi dal 24 luglio 2001
Il problema è che il db conterrà i dati di uno studio multicentrico medico.
Sto riuscendo a fatica a contenere nelle 3 tabelle i campi.
Considera che le tabelle ad esempio potranno essere chiamate anagrafica, clinica, followup. Se pensi che ad esempio la clinica significa che di quel paziente magari devo memorizzare valori di :
HDL, LDL, ALT, AST , GLICEMIA, ecc. e questi sono i più banali e non sto ad annoiarti con i termini medici.
Tra parentesi io mi sto laureando in medicina ed è anche per questo che mi hanno proposto questo lavoro.
Pensa a che casino sarebbe spiegare i controlli da applicare al form che dicevamo qualche post prima non conoscendo ad esempio il massimo ed il minimo per la glicemia, ecc.
Ecco perchè ho tanti campi.
Comunque la mia preoccupazione non è nella visualizzazione dei dati (li vediamo in locale downlodando il db) quanto l'invio dei dati.
Tra l'altro, se nel frattempo lo script passa dalla prima tabella alla seconda qualcuno inserisce altri dati non è che io vado a recuperare il suo id e non il mio ?
Che casotto?
Mi sa che la prossima volta non accetto lavori che hanno db con più di un campo

Scherzavo
Ti ringrazio e provo il tuo ultimo consiglio

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.