3 messaggi dal 19 maggio 2001
Ciao a tutti, sono alle primissime armi con ASP e sto construendo un motore di ricerca per il mio sito. Ho usato uno script di partenza trovato su questo sito, e ho modificatio la connessione al database con la seguente stringa: conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("/mdb-database/documenti.mdb")

Tuttavia vi è una linea successiva dello script che richiama la connessione al database stesso come di seguito= 'Riempio con i valori trovati il mio recordset rsDocTrovati
rsDocTrovati.Open stmSQL, "DNS_DATABASE;"
La quale sembra incompatibile con la modifica da me apportata. Tuttavia anche in precedenza, lo scipt portava la linea modificata in questo modo: Conn.Open "DNS_DATABASE;"
Comprendo i miei grandi limiti, ed è per questo che non riesco a trovare il bandolo della matassa. Come posso risolvere il problema, connettendomi al mio database? Qui di seguito voglio esporre lo script completo. Grazie a chiunque voglia aiutarmi.


<!--#include virtual="/scripts/adovbs.inc"-->
<%
'Connessione al database
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DNS_DATABASE;"



'Setta le preferenze
OperatoreBooleano = Request.form("operatore")
RecordsPerPagina = 5


'Recupera la stringa da ricercare
Dim strRicerca
strRicerca = Request.form("StringaDaCercare")


'Recupera ID del documento da ricercare
ID = Request.Form("ID")


'Definisci l'istruzione SQL
Dim stmSQL, tmpSQL
stmSQL = "SELECT * FROM Documenti WHERE "
tmpSQL = "(Descrizione LIKE "


'Suddividi la stringa da cercare
Dim Pos
Pos = 1
While Pos > 0
Pos = InStr(1, strRicerca," ")
If Pos = 0 Then
'Ho trovato una sola parola nella stringa da ricercare
tmpSQL = tmpSQL & "'%" & strRicerca & "%')"
Else
'Ci sono più parole, quindi concateno le istruzioni LIKE SQL
tmpSQL = tmpSQL & "'%" & Mid(strRicerca,1,Pos) & "%' " & OperatoreBooleano & " Descrizione LIKE "
strRicerca = Mid(strRicerca,Pos+1,len(strRicerca))
End If
Wend


'Costruisco la stringa finale dell'istruzione SQL
stmSQL = stmSQL & tmpSQL & " AND Doc_ID > " & ID
stmSQL = stmSQL & " ORDER BY Doc_ID" 'Importante !


'Genero una variabile per stipare il contenuto della mia interrogazione
Dim rsDocTrovati
Set rsDocTrovati = Server.CreateObject("ADODB.Recordset")


'Prendo solo il numero di risultati massimi per pagina
rsDocTrovati.MaxRecords = RecordsPerPagina


'Setto le propietà del recordsets trovato (include ADOVBS.inc per la definizione delle constanti)
rsDocTrovati.CursorType = adForwardOnly


'Riempio con i valori trovati il mio recordset rsDocTrovati
rsDocTrovati.Open stmSQL, "DNS_DATABASE;"


'Comincio a generare il codice HTML per mostrare i risultati
'Ottengo il numero totale di record trovati dallo statements SQL tmpSQL
Dim rsTotalRecords
stmSQL = "SELECT COUNT(*) FROM Documenti WHERE " & tmpSQL
Set rsTotalRecords = Conn.Execute(stmSQL)


'Verifichiamo quanti risultati massimi possiamo avere
Dim rsMaxID
stmSQL = "SELECT MAX(Doc_ID) FROM Documenti WHERE " & tmpSQL
Set rsMaxID = Conn.Execute(stmSQL)
%>


<table width="100%" border="0" cellspacing="2" cellpadding="0">


<% if rsDocTrovati.EOF then 'Nessuna corrispondenza trovata
%>
<tr><td height="59"></td></tr>
<tr><td align="CENTER" valign="TOP">
<font size="+1">Nessun articolo o pagina HTML è stata trovata.</font><P>
<A HREF="javascript:history.back(-1)"><font size="+1">Torna alla pagina precedente</font></A>
</td></tr>
<tr><td height="59"></td></tr>
<% Else
Dim IDCorrente
%>


<tr bgcolor="660033">
<td width="30%" align="CENTER"><font color="White"><b>Titolo</b></font></td>
<td align="CENTER"><font color="White"><b>Descrizione
dell'articolo</b></font></td>
</tr>
<tr><td height="10" colspan="2"></td></tr>
<%


While Not rsDocTrovati.EOF
IDCorrente = rsDocTrovati("Doc_ID")
%>
<tr>
<td align="LEFT" valign="TOP"><A HREF='<%=rsDocTrovati("Doc_URL")%>'>
<font size="2"><%=rsDocTrovati("Titolo")%></font></A></td>
<td><font size="2"><%=rsDocTrovati("Descrizione")%></font></td>
</tr>
<tr><td height="10" colspan="2"></td></tr>
<% rsDocTrovati.MoveNext
Wend %>


<tr bgcolor="660033"><td height="10" colspan="2" align="CENTER">
<% If rsTotalRecords(0)=1 then %>
<b><font color="White">La ricerca sul database ha portato alla luce <b><strong>un
solo</strong></b> documento !!!</font></b>
<% Else %>
<b><font color="white">La ricerca sul database ha portato alla luce <%=rsTotalRecords(0)%> documenti
!!!</b></font>
<% End If %>


</td></tr>
<tr><td height="35" colspan="2"></td></tr>
<tr><td colspan="2" align="CENTER">
<% if IDCorrente < rsMaxID(0) then %>
<!-- Se sono più di 5 documenti produco un tasto per la visualizzazione degli altri documenti -->


<FORM METHOD=POST ACTION='<%= Request.ServerVariables("SCRIPT_NAME") %>'>
<INPUT TYPE=HIDDEN NAME="StringaDaCercare" VALUE='<%=Request.form("StringaDaCercare")%>'>
<input type="Hidden" name="ID" value='<%=IDCorrente%>'>
<INPUT TYPE=SUBMIT VALUE="Successivi Documenti">
</FORM>
<% end if
end if
'Fine dello script
%>

839 messaggi dal 13 febbraio 2001
La voce DNS_DATABASE si riferisce ad una connessione con DSN ODBC e quindi non dovresti usarla. Dovresti invece usare il riferimento all'oggetto Conn creato

<code>
'Connessione al database
Dim Conn, rsDocTrovati
Set Conn = Server.CreateObject("ADODB.Connection")
Set rsDocTrovati = Server.CreateObject("ADODB.Recordset")

Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("/mdb-database/documenti.mdb")
...
'Imposti la clausola sql
'Apri il recordset
rsDocTrovati.Open stmSQL, Conn
...
ecc
</code>


Ciao!
Paolo
3 messaggi dal 19 maggio 2001
grazie, provo subito a mettere in pratica i tuoi consigli.
un saluto

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.