Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
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.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Asp & Asp.net
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti

Asp & Asp.net Active Server Pages e tecnologia Microsoft.NET

Hey Amico Visitatore,
Condividi con noi le tue idee e la tua conoscenza Aprendo una nuova discussione nella sezione Asp & Asp.net


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 21-07-05, 20:07   #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
email
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 
%>
Dantesco non in linea   Rispondi citando
Vecchio 21-07-05, 21:29   #2 (permalink)
sms
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?
sms non in linea   Rispondi citando
Vecchio 21-07-05, 21:34   #3 (permalink)
sms
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
in alternativa prova ad utilizzare l'inner join

ah: per il primo codice (quello delle foto), sei sicuro che non ti stampi più volte anche il body?
sms non in linea   Rispondi citando
Vecchio 22-07-05, 10:16   #4 (permalink)
User Newbie
 
Data di registrazione: Jul 2005
Messaggi: 7
Grazie per le risposte ed i consigli, sempre ben accetti.


Quote:
sms
un po' di consigli:
3. potrebbe non essere necessario avere due db. per te sarebbe identico utilizzare due tabelle dello stesso db?
effettivamente ho utilizzato due tabelle dello stesso db, una svista...


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 
%>
non essendo molto pratico, mi trovo spesso in difficoltà nello stabilire se l'errore lo commetto a livello di concetto oppure di sintassi



grazie ancora
ciao
Dantesco non in linea   Rispondi citando
Vecchio 22-07-05, 10:48   #5 (permalink)
sms
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
ci andrebbe
Codice:
foto_id='2'
cerca però di mettere i campi primari sempre come numerici.

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")
non sono sicuro soprattutto con il WHERE. se dà errore prova a spostarlo qua e là prima dell'INNER JOIN
sms non in linea   Rispondi citando
Vecchio 22-07-05, 12:48   #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
Dantesco non in linea   Rispondi citando
Vecchio 22-07-05, 13:02   #7 (permalink)
sms
Non iscritto
 
Data di registrazione: Oct 2004
Messaggi: 767
prego.
ultima domandina per il miglioramento dello script.
perchè usi like al posto di = in una delle due query?
lo script cmq potrebbe essere ottimizzato, però questo ti viene con un po' di esperienza.
sms non in linea   Rispondi citando
Vecchio 22-07-05, 18:15   #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
mi rende questo errore
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
altri sistemi non ne vedo anche se ...... mai dire mai

grazie in anticipo
Dantesco non in linea   Rispondi citando
Vecchio 22-07-05, 18:53   #9 (permalink)
sms
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
ti mancavano il "ripristino" del contenuto stringa (= scritto tra " e ") dopo id2
sms non in linea   Rispondi citando
Vecchio 22-07-05, 20:36   #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
e mi rende questo errore, strano inoltre che il numero di riga che indica sia in realtà vuoto ??


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
anche se ovviamente questo mi rende un errore del tipo Expected statement sulla seconda riga della query.

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
Dantesco non in linea   Rispondi citando
Vecchio 22-07-05, 21:12   #11 (permalink)
sms
Non iscritto
 
Data di registrazione: Oct 2004
Messaggi: 767
errore tuo di scrittura e mio di non rilettura:
l'and non ci va:
Codice:
rss.Open "select * from commenti where foto_id=" & id2 & " ORDER BY commento_cod desc", con
sms non in linea   Rispondi citando
Vecchio 23-07-05, 00:13   #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
Dantesco non in linea   Rispondi citando
Rispondi
Tags: ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 19:05.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.