+ Rispondi alla Discussione
Risultati da 1 a 12 di 12

problemi con relazioni tra tabelle

Ultimo Messaggio di Dantesco il:
  1. #1
    User Newbie
    Data 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&#40;"foto_id"&#41;
    Dim Conn
    
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41;
    
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/db2.mdb"&#41;
    
    Dim rs
    
    Set rs = Server.CreateObject&#40;"ADODB.Recordset"&#41;
    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&#40;"[img]images/" & RS&#40;"fotogrande"&#41; & "[/img]"&#41; %></td>
            </tr>
            <tr>
              <td width="100%" colspan="4"><font face="Verdana" size="1">Descrizione&#58;<% response.write"" & RS&#40;"descrizione"&#41; & " "%></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&#40;"categoria"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">dimensioni</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"formato"&#41; & " "%></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&#40;"viaggio"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">voto</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"categoria"&#41; & " "%></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&#40;"titolo"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">desktop</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"categoria"&#41; & " "%></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&#40;"data"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">prezzo</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"categoria"&#41; & " "%></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&#40;"foto_id"&#41;
    Dim Con
    
    Set Con = Server.CreateObject&#40;"ADODB.Connection"&#41;
    
    con.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/db2.mdb"&#41;
    
    Dim rss
    
    Set rss = Server.CreateObject&#40;"ADODB.Recordset"&#41;
    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&#40;"nome"&#41; & " "%>"</font></td>
              <td width="33%"><font size="2" face="Verdana">"<% response.write"" & RSS&#40;"email"&#41; & " "%>"</font></td>
              <td width="34%">3</td>
            </tr>
            <tr>
              <td width="100%" colspan="3"><font size="2" face="Verdana">"<% response.write"" & RSS&#40;"commento"&#41; & " "%>"</font></td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
    
    
    <% 
    RSS.MoveNext 
    Loop 
    RSS.Close 
    Set RSS = Nothing 
    con.Close 
    Set con=Nothing 
    %>

  2. #2
    sms
    sms è offline
    Non iscritto
    Data Registrazione
    Oct 2004
    Messaggi
    784
    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. #3
    sms
    sms è offline
    Non iscritto
    Data Registrazione
    Oct 2004
    Messaggi
    784
    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?

  4. #4
    User Newbie
    Data Registrazione
    Jul 2005
    Messaggi
    7
    Grazie per le risposte ed i consigli, sempre ben accetti.


    Citazione Originariamente Scritto da 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&#40;"foto_id"&#41;

    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&#40;"foto_id"&#41; 
    Dim Conn 
    
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/db2.mdb"&#41; 
    
    Dim rs 
    
    Set rs = Server.CreateObject&#40;"ADODB.Recordset"&#41; 
    rs.Open "select * from viaggi where foto_id like "&id1, conn 
    
    Do while NOT RS.EOF 
    
    
    Dim Con 
    
    Set Con = Server.CreateObject&#40;"ADODB.Connection"&#41; 
    
    con.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/db2.mdb"&#41; 
    
    Dim rss 
    
    Set rss = Server.CreateObject&#40;"ADODB.Recordset"&#41; 
    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

  5. #5
    sms
    sms è offline
    Non iscritto
    Data Registrazione
    Oct 2004
    Messaggi
    784
    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&#40;"foto_id"&#41;
    non sono sicuro soprattutto con il WHERE. se dà errore prova a spostarlo qua e là prima dell'INNER JOIN

  6. #6
    User Newbie
    Data 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&#40;"foto_id"&#41;
    Dim Conn
    
    Set Conn = Server.CreateObject&#40;"ADODB.Connection"&#41;
    
    conn.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/db2.mdb"&#41;
    
    Dim rs
    
    Set rs = Server.CreateObject&#40;"ADODB.Recordset"&#41;
    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&#40;"[img]images/" & RS&#40;"fotogrande"&#41; & "[/img]"&#41; %></td>
            </tr>
            <tr>
              <td width="100%" colspan="4"><font face="Verdana" size="1">Descrizione&#58;<% response.write"" & RS&#40;"descrizione"&#41; & " "%></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&#40;"categoria"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">dimensioni</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"formato"&#41; & " "%></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&#40;"viaggio"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">voto</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"categoria"&#41; & " "%></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&#40;"titolo"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">desktop</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"categoria"&#41; & " "%></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&#40;"data"&#41; & " "%></font></td>
              <td width="25%"><font face="Verdana" size="1">prezzo</font></td>
              <td width="25%"><font face="Verdana" size="1"><% response.write"" & RS&#40;"categoria"&#41; & " "%></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&#40;"foto_id"&#41;
    Dim Con
    
    Set Con = Server.CreateObject&#40;"ADODB.Connection"&#41;
    
    con.Open "driver=&#123;Microsoft Access Driver &#40;*.mdb&#41;&#125;;dbq=" & server.mappath&#40;"/mdb-database/db2.mdb"&#41;
    
    Dim rss
    
    Set rss = Server.CreateObject&#40;"ADODB.Recordset"&#41;
    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&#40;"nome"&#41; & " "%>"</font></td>
              <td width="33%"><font size="2" face="Verdana">"<% response.write"" & RSS&#40;"email"&#41; & " "%>"</font></td>
              <td width="34%">3</td>
            </tr>
            <tr>
              <td width="100%" colspan="3"><font size="2" face="Verdana">"<% response.write"" & RSS&#40;"commento"&#41; & " "%>"</font></td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
    </div>
    
    
    <% 
    RSS.MoveNext 
    Loop 
    RSS.Close 
    Set RSS = Nothing 
    con.Close 
    Set con=Nothing 
    %>

    Grazie ancora

  7. #7
    sms
    sms è offline
    Non iscritto
    Data Registrazione
    Oct 2004
    Messaggi
    784
    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.

  8. #8
    User Newbie
    Data 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' 
    
    &#91;Microsoft&#93;&#91;ODBC Microsoft Access Driver&#93; Syntax error in ORDER BY clause. 
    
    /scheda11.asp, line 419
    altri sistemi non ne vedo anche se ...... mai dire mai

    grazie in anticipo

  9. #9
    sms
    sms è offline
    Non iscritto
    Data Registrazione
    Oct 2004
    Messaggi
    784
    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

  10. #10
    User Newbie
    Data 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' 
    
    &#91;Microsoft&#93;&#91;ODBC Microsoft Access Driver&#93; Syntax error &#40;missing operator&#41; 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

  11. #11
    sms
    sms è offline
    Non iscritto
    Data Registrazione
    Oct 2004
    Messaggi
    784
    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

  12. #12
    User Newbie
    Data 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

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.