![]() |
![]() |
|
| Condividi questo contenuto nei Social Network: |
|
Tweet |
|
|
|
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito. |
||||
|
|||||||||
Hey Amico Visitatore, Condividi con noi le tue idee e la tua conoscenza Aprendo una nuova discussione nella sezione Asp & Asp.net |
|
|
LinkBack | Strumenti di discussione |
|
|
#1 (permalink) |
|
User Newbie
Data di registrazione: Jul 2005
Messaggi: 7
|
problemi con relazioni tra tabelle
ciao a tutti,
nel mio sito ho una galleria immagini, cliccando sulle miniature si accede alla pagina con la foto grande , i dettagli ed adesso vorrei inserire anche eventuali commenti lasciati dagli utenti. Per questo motivo mi sono organizzato con due database: nel primo (viaggi.db) ho i dati relativi alle immagini foto_id titolo categoria foto fotogrande data formato nel secondo (commenti.db) invece commento_id commento nome foto_id Da entrambe i database poi scrivo a video quanto mi serve, la prima parte della pagina dedicata alla foto+ dettagli , la seconda parte invece dedicata ai commenti. La parte relativa all'immagine funziona con un qualcosa del tipo scheda.asp?foto_id=xxxx , quindi pensavo di usare lo stesso concetto anche per i commenti. L'utente attraverso il form per il commento invia nel database commenti anche foto_id , che mi serve dopo per dividere i commenti a seconda dell'immagine a cui sono riferiti Spero di non essermi perso, comunque il problema è che LA PARTE RELATIVA AI COMMENTI non funziona !!!! Mi continua a rendere questo errore .. ADODB.Recordset error '800a0e7d' The connection cannot be used to perform this operation. It is either closed or invalid in this context. /scheda2.asp, line 375 Posto il codice per una migliore comprensione , sperando che qualcuno possa aiutarmi . Grazie in anticipo.. Codice:
<%
Dim id1
id1=request.querystring("foto_id")
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/db2.mdb")
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select * from viaggi where foto_id like "&id1, conn
Do while NOT RS.EOF
%>
<html>
<head>
</head>
<body link="#000000" vlink="#000000" alink="#000000">
<div id="content">
<table border="0" width="410px">
<tr>
<td width="100%" bgcolor="#CCCCCC">
<table border="0" width="100%">
<tr>
<td width="100%" colspan="4"><%Response.Write("[img]images/" & RS("fotogrande") & "[/img]") %></td>
</tr>
<tr>
<td width="100%" colspan="4"><font face="Verdana" size="1">Descrizione:<% response.write"" & RS("descrizione") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">viaggio</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">dimensioni</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("formato") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">tema</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("viaggio") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">voto</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">titolo</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("titolo") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">desktop</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">data</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("data") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">prezzo</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
</tr>
</table>
</td>
</tr>
</table>
<%
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
conn.Close
Set conn=Nothing
%>
<%
Dim id2
id2=request.querystring("foto_id")
Dim Con
Set Con = Server.CreateObject("ADODB.Connection")
con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/db2.mdb")
Dim rss
Set rss = Server.CreateObject("ADODB.Recordset")
rss.Open " SELECT commento FROM commenti, viaggi WHERE commenti.foto_id=viaggi.foto_id AND viaggi.foto_id= "&id2, con
Do while NOT RSS.EOF
%>
<P align= "center" >
<table border="0" width="410px">
<tr>
<td width="100%">
<table border="0" width="100%">
<tr>
<td width="33%"><font size="2" face="Verdana">"<% response.write"" & RSS("nome") & " "%>"</font></td>
<td width="33%"><font size="2" face="Verdana">"<% response.write"" & RSS("email") & " "%>"</font></td>
<td width="34%">3</td>
</tr>
<tr>
<td width="100%" colspan="3"><font size="2" face="Verdana">"<% response.write"" & RSS("commento") & " "%>"</font></td>
</tr>
</table>
</td>
</tr>
</table>
<%
RSS.MoveNext
Loop
RSS.Close
Set RSS = Nothing
con.Close
Set con=Nothing
%>
|
|
|
|
|
|
|
|
#2 (permalink) |
|
Non iscritto
Data di registrazione: Oct 2004
Messaggi: 767
|
un po' di consigli:
1. quando devi scrivere del codice utilizza il tag 2. evidenzia qual è la riga incriminata! 3. potrebbe non essere necessario avere due db. per te sarebbe identico utilizzare due tabelle dello stesso db? |
|
|
|
|
|
#3 (permalink) |
|
Non iscritto
Data di registrazione: Oct 2004
Messaggi: 767
|
la select mi sembra sbagliata
Codice:
rss.Open " SELECT commenti.commento, viaggi.commento FROM commenti, viaggi WHERE commenti.foto_id=viaggi.foto_id AND viaggi.foto_id= "&id2, con ah: per il primo codice (quello delle foto), sei sicuro che non ti stampi più volte anche il body? |
|
|
|
|
|
#4 (permalink) | |
|
User Newbie
Data di registrazione: Jul 2005
Messaggi: 7
|
Grazie per le risposte ed i consigli, sempre ben accetti.
Quote:
infine , riguardo alla select, io avevo già provato con l' INNER JOIN ma senza fortuna. Piuttosto dopo tante prove, mi sono convinto che il problema potrebbe essere nella definizione della variabile id Codice:
Dim id2
id2=request.querystring("foto_id")
infatti ne uso una identica ad inizio pagina e quando arrivo ai commenti non sembra riconoscerla, mi chiedo: è possibile aprire la connessione e le 2 stringhe direttamente ad inizio pagina , senza doverle chiudere entrambi sino a fine pagina, qualcosa che concettualmente dovrebbe essere così : Codice:
<%
Dim id1
id1=request.querystring("foto_id")
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/db2.mdb")
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select * from viaggi where foto_id like "&id1, conn
Do while NOT RS.EOF
Dim Con
Set Con = Server.CreateObject("ADODB.Connection")
con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/db2.mdb")
Dim rss
Set rss = Server.CreateObject("ADODB.Recordset")
rss.Open " SELECT commento FROM commenti, viaggi WHERE commenti.foto_id=viaggi.foto_id AND viaggi.foto_id= "&id1, con
Do while NOT RSS.EOF
%>
per poi restituire a video i dati secondo la struttura originaria e chiudere tutto a fine pagina con un qualcosa così: Codice:
<% RS.MoveNext Loop RS.Close Set RS = Nothing conn.Close Set conn=Nothing RSS.MoveNext Loop RSS.Close Set RSS = Nothing con.Close Set con=Nothing %> grazie ancora ciao | |
|
|
|
|
|
#5 (permalink) |
|
Non iscritto
Data di registrazione: Oct 2004
Messaggi: 767
|
in realtà non è necessario avere due connessioni e due recordset.
ti basterebbe aprire una unica connessione con probabilmente un altro inner join. una cosa: il campo ID è numerico, vero? se non fosse numerico dovresti aggiungere gli apostrofi: cioè, al posto di Codice:
foto_id=2 Codice:
foto_id='2' stringa sql potrebbe essere del tipo (occhio che è fatta senza provarla, per cui vedi tu di rimischiarla in caso di errore) Codice:
"SELECT viaggi.*,commenti.* FROM viaggi INNER JOIN commenti ON viaggi.foto_id = commenti.foto_id WHERE viaggi.foto_ID=" & Request.QueryString("foto_id")
![]() |
|
|
|
|
|
#6 (permalink) |
|
User Newbie
Data di registrazione: Jul 2005
Messaggi: 7
|
GRAZIE SMS
dopo aver letto il tuo suggerimento sul campo numerico, sono andato a ricercarmi una delle prime prove, mi ricordavo esser riuscito a far funzionare la pagina senza nessuna JOIN, ma avevo il problema che il db non mi riconosceva il campo foto_id nella restituzione dei commenti..... ebbene è bastato impostare il campo foto_id come numerico direttamente nel db , che per magia tutto FUNZIONA !!!!!Infatti mi riconosce questa stringa: rss.Open "select * from commenti where foto_id like "&id2, con senza dover ricorrere alle JOIN . Grande prova !!!!!!!!!!!!!!! Posto il codice per completezza, Codice:
<%
Dim id1
id1=request.querystring("foto_id")
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/db2.mdb")
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select * from viaggi where foto_id like "&id1, conn
Do while NOT RS.EOF
%>
.................................
<table border="0" width="410px">
<tr>
<td width="100%" bgcolor="#CCCCCC">
<table border="0" width="100%">
<tr>
<td width="100%" colspan="4"><%Response.Write("[img]images/" & RS("fotogrande") & "[/img]") %></td>
</tr>
<tr>
<td width="100%" colspan="4"><font face="Verdana" size="1">Descrizione:<% response.write"" & RS("descrizione") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">viaggio</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">dimensioni</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("formato") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">tema</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("viaggio") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">voto</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">titolo</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("titolo") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">desktop</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
</tr>
<tr>
<td width="25%"><font face="Verdana" size="1">data</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("data") & " "%></font></td>
<td width="25%"><font face="Verdana" size="1">prezzo</font></td>
<td width="25%"><font face="Verdana" size="1"><% response.write"" & RS("categoria") & " "%></font></td>
</tr>
</table>
</td>
</tr>
</table>
<%
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
conn.Close
Set conn=Nothing
%>
<%
Dim id2
id2=request.querystring("foto_id")
Dim Con
Set Con = Server.CreateObject("ADODB.Connection")
con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/db2.mdb")
Dim rss
Set rss = Server.CreateObject("ADODB.Recordset")
rss.Open "select * from commenti where foto_id like "&id2, con
Do while NOT RSS.EOF
%>
<div id="middleleft" >
<table border="0" width="410px">
<tr>
<td width="100%">
<table border="0" width="100%">
<tr>
<td width="33%"><font size="2" face="Verdana">"<% response.write"" & RSS("nome") & " "%>"</font></td>
<td width="33%"><font size="2" face="Verdana">"<% response.write"" & RSS("email") & " "%>"</font></td>
<td width="34%">3</td>
</tr>
<tr>
<td width="100%" colspan="3"><font size="2" face="Verdana">"<% response.write"" & RSS("commento") & " "%>"</font></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<%
RSS.MoveNext
Loop
RSS.Close
Set RSS = Nothing
con.Close
Set con=Nothing
%>
Grazie ancora |
|
|
|
|
|
#8 (permalink) |
|
User Newbie
Data di registrazione: Jul 2005
Messaggi: 7
|
sicuramente lo script si può migliorare, credo abbia una forma decisamente elemetare, che rispecchia peraltro il mio intendere di asp, tuttavia sono soddisfatto perchè lo script funziona e questo mi permette di passare al "problema " succesivo
. Di problema in problema , spero di farmi l'esperienza per affinare la tecnica. Infine riguardo a like non c'è una ragione che mi abbia fatto propendere per like piuttosto di = , speravo per qualche strana sensazione di poter regolare meglio il order by ..... desc, invece così non è stato..... se faccio così Codice:
rss.Open "select * from commenti where foto_id like "&id2 and ORDER BY commento_cod desc, con Codice:
Microsoft VBScript compilation error '800a0401' Expected end of statement /scheda112.asp, line 419 rss.Open "select * from commenti where foto_id like "&id2 and ORDER BY commento_cod desc, con --------------------------------------------------------------------^ invece se faccio così: Codice:
rss.Open "select * from commenti order by commento_id desc where foto_id ="&id2 , con mi rende questo errore Codice:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error in ORDER BY clause. /scheda11.asp, line 419 grazie in anticipo |
|
|
|
|
|
#9 (permalink) |
|
Non iscritto
Data di registrazione: Oct 2004
Messaggi: 767
|
la query giusta è strutturata cosi:
Codice:
rss.Open "select * from commenti where foto_id=" & id2 & " and ORDER BY commento_cod desc", con |
|
|
|
|
|
#10 (permalink) |
|
User Newbie
Data di registrazione: Jul 2005
Messaggi: 7
|
ciao , ho provao la query così:
Codice:
rss.Open "select * from commenti where foto_id ="& id2 &" and ORDER BY commento_cod desc", con Codice:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'foto_id =10 and'. /scheda11.asp, line 425 sembrerebbe che , avendo usato il riferimento id2 come indice della pagina, tutto quello che trova dietro id2 , si aspetta di trovarlo nella url della pagina . Almeno credo. oppure non riesce a vedere la queri come interrotta ed allora si aspetta di trovare altre informazioni relative al where mentre in realtà io impartisco già ordini diversi sul risultato della query. La butto così come viene: potrei in qualche modo dividere le due righe, pensavo a qualcosa del genere Codice:
rss.Open "select * from commenti where foto_id ="& id2 &" and ORDER BY commento_cod desc", con qualcosa del tipo RIGA 1 dove specifico i criteri di ricerca RIGA 2 dove ordino i risultati trovati . adesso mi mostra i records seguendo il campo commento_id dal 1,2,3, questo però comporta che il record nuovo si aggiunge in coda, a me basterebbe invertire questa tendenza, magari con qualche stratagemma ........ grazie in anticipo |
|
|
|
|
|
#12 (permalink) |
|
User Newbie
Data di registrazione: Jul 2005
Messaggi: 7
|
Grazie ancora !!! mitico !!!! Adesso funziona che è una meraviglia.
praticamente il codice in neretto mi divide la query , come se fosse su due righe rss.Open "select * from commenti where foto_id=" & id2 & " ORDER BY commento_cod desc", con perfetto. Ciao ![]() |
|
|
|