18 messaggi dal 31 luglio 2002
Ciao, il mio problema è questo:
ho un recordset suddiviso in pagine nel quale gli utenti si possono spostare selezionando una lettera alfabetica che li porta direttamente al gruppo di record che inizia con quella lettera.
Per fare questo utilizzo il metodo [recordset].find.
Non riesco a fare in modo che, una volta scelta una lettera e raggiunto il punto prescelto, l'utente possa scorrere TUTTO il recordset con i classici tasti avanti/indietro, partendo dal punto in cui si trova.
Ho fatto il codice a mano e provato anche con Dreamweaver.
Se necessario posso postarlo (è lunghetto).
Sto cercando di fare una cosa impossibile?
Grazie
324 messaggi dal 20 settembre 2001
www.iromtek.com
uhm no per nulla si può fare eccome... forse sbagli il link x mandare avanti e indietro la pagina?
Modificato da Sghillo il 17 settembre 2004 21.00 -

"Il problema delle persone è che cercano negli altri qualità che questi non posseggono mentre dovrebbero apprezzare ed esaltare le qualità che gli altri realmente posseggono"
18 messaggi dal 31 luglio 2002
È probabile. Ma non capisco come fare. Ho provato con la proprietà Bookmark ma non riesco ad utilizzarla..

Di seguito posto il codice che sto usando. La parte dei pulsanti è generata da Dreamweaver.

Grazie per l'aiuto!

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="../Connections/scuola.asp" -->
<%
Dim RsLettere_in_DB
Dim RsLettere_in_DB_numRows

Set RsLettere_in_DB = Server.CreateObject("ADODB.Recordset")
RsLettere_in_DB.ActiveConnection = MM_scuola_STRING
RsLettere_in_DB.Source = "SELECT DISTINCT LETTERA_PAGINAZIONE FROM Insegnamenti"
RsLettere_in_DB.CursorType = 0
RsLettere_in_DB.CursorLocation = 2
RsLettere_in_DB.LockType = 1
RsLettere_in_DB.Open()

RsLettere_in_DB_numRows = 0
%>
<%
Dim RsOrario_Lezioni_compl
Dim RsOrario_Lezioni_compl_numRows
Dim lettera
Dim sfoglia
lettera = Request.QueryString("lettera")
sfoglia = Request.QueryString("sfoglia")

if sfoglia = "si" then

Set RsOrario_Lezioni_compl = Server.CreateObject("ADODB.Recordset")
RsOrario_Lezioni_compl.ActiveConnection = MM_scuola_STRING
RsOrario_Lezioni_compl.Source = "SELECT IDINSEGNAMENTO, INSEGNAMENTO, LEZIONI_1_PERIODO, LEZIONI_2_PERIODO,
LEZIONI_3_PERIODO, LEZIONI_4_PERIODO, LETTERA_PAGINAZIONE
FROM Insegnamenti ORDER BY INSEGNAMENTO ASC"
RsOrario_Lezioni_compl.CursorType = 0
RsOrario_Lezioni_compl.CursorLocation = 3
RsOrario_Lezioni_compl.LockType = 3
RsOrario_Lezioni_compl.Open()
RsOrario_Lezioni_compl.Find("LETTERA_PAGINAZIONE='" & lettera & "'")
RsOrario_Lezioni_compl_numRows = 0

else

Set RsOrario_Lezioni_compl = Server.CreateObject("ADODB.Recordset")
RsOrario_Lezioni_compl.ActiveConnection = MM_scuola_STRING
RsOrario_Lezioni_compl.Source = "SELECT IDINSEGNAMENTO, INSEGNAMENTO, LEZIONI_1_PERIODO, LEZIONI_2_PERIODO,
LEZIONI_3_PERIODO, LEZIONI_4_PERIODO, LETTERA_PAGINAZIONE
FROM Insegnamenti ORDER BY INSEGNAMENTO ASC"
RsOrario_Lezioni_compl.CursorType = 0
RsOrario_Lezioni_compl.CursorLocation = 3
RsOrario_Lezioni_compl.LockType = 1
RsOrario_Lezioni_compl.Open()
RsOrario_Lezioni_compl_numRows = 0

end if
%>
<%
Dim RsPeriodi_Att_Did
Dim RsPeriodi_Att_Did_numRows

Set RsPeriodi_Att_Did = Server.CreateObject("ADODB.Recordset")
RsPeriodi_Att_Did.ActiveConnection = MM_scuola_STRING
RsPeriodi_Att_Did.Source = "SELECT * FROM Periodi_Att_Did"
RsPeriodi_Att_Did.CursorType = 0
RsPeriodi_Att_Did.CursorLocation = 2
RsPeriodi_Att_Did.LockType = 1
RsPeriodi_Att_Did.Open()

RsPeriodi_Att_Did_numRows = 0
%>
<%
'Set Con = Server.CreateObject("ADODB.Connection")
'Con.Open MM_scuola_STRING
'Set rs = Server.CreateObject("ADODB.Recordset")
'stringa_sql = "SELECT IDINSEGNAMENTO, INSEGNAMENTO,
LEZIONI_1_PERIODO, LEZIONI_2_PERIODO, LEZIONI_3_PERIODO,
LEZIONI_4_PERIODO, LETTERA_PAGINAZIONE FROM Insegnamenti ORDER BY INSEGNAMENTO ASC"
'rs.Open stringa_sql, Con, 3,3
'rs.Find "LETTERA_PAGINAZIONE = 'c'"
'Con.Execute stringa_sql
'Con.Close
'Set Con = Nothing
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = 3
Repeat1__index = 0
RsOrario_Lezioni_compl_numRows = RsOrario_Lezioni_compl_numRows + Repeat1__numRows
%>
<%
' *** Recordset Stats, Move To Record, and Go To Record: declare stats variables

Dim RsOrario_Lezioni_compl_total
Dim RsOrario_Lezioni_compl_first
Dim RsOrario_Lezioni_compl_last

' set the record count
RsOrario_Lezioni_compl_total = RsOrario_Lezioni_compl.RecordCount

' set the number of rows displayed on this page
If (RsOrario_Lezioni_compl_numRows < 0) Then
RsOrario_Lezioni_compl_numRows = RsOrario_Lezioni_compl_total
Elseif (RsOrario_Lezioni_compl_numRows = 0) Then
RsOrario_Lezioni_compl_numRows = 1
End If

' set the first and last displayed record
RsOrario_Lezioni_compl_first = 1
RsOrario_Lezioni_compl_last = RsOrario_Lezioni_compl_first + RsOrario_Lezioni_compl_numRows - 1

' if we have the correct record count, check the other stats
If (RsOrario_Lezioni_compl_total <> -1) Then
If (RsOrario_Lezioni_compl_first > RsOrario_Lezioni_compl_total) Then
RsOrario_Lezioni_compl_first = RsOrario_Lezioni_compl_total
End If
If (RsOrario_Lezioni_compl_last > RsOrario_Lezioni_compl_total) Then
RsOrario_Lezioni_compl_last = RsOrario_Lezioni_compl_total
End If
If (RsOrario_Lezioni_compl_numRows > RsOrario_Lezioni_compl_total) Then
RsOrario_Lezioni_compl_numRows = RsOrario_Lezioni_compl_total
End If
End If
%>
<%
Dim MM_paramName
%>
<%
' *** Move To Record and Go To Record: declare variables

Dim MM_rs
Dim MM_rsCount
Dim MM_size
Dim MM_uniqueCol
Dim MM_offset
Dim MM_atTotal
Dim MM_paramIsDefined

Dim MM_param
Dim MM_index

Set MM_rs = RsOrario_Lezioni_compl
MM_rsCount = RsOrario_Lezioni_compl_total
MM_size = RsOrario_Lezioni_compl_numRows
MM_uniqueCol = ""
MM_paramName = ""
MM_offset = 0
MM_atTotal = false
MM_paramIsDefined = false
If (MM_paramName <> "") Then
MM_paramIsDefined = (Request.QueryString(MM_paramName) <> "")
End If
%>
<%
' *** Move To Record: handle 'index' or 'offset' parameter

if (Not MM_paramIsDefined And MM_rsCount <> 0) then

' use index parameter if defined, otherwise use offset parameter
MM_param = Request.QueryString("index")
If (MM_param = "") Then
MM_param = Request.QueryString("offset")
End If
If (MM_param <> "") Then
MM_offset = Int(MM_param)
End If

' if we have a record count, check if we are past the end of the recordset
If (MM_rsCount <> -1) Then
If (MM_offset >= MM_rsCount Or MM_offset = -1) Then ' past end or move last
If ((MM_rsCount Mod MM_size) > 0) Then ' last page not a full repeat region
MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
Else
MM_offset = MM_rsCount - MM_size
End If
End If
End If

' move the cursor to the selected record
MM_index = 0
While ((Not MM_rs.EOF) And (MM_index < MM_offset Or MM_offset = -1))
MM_rs.MoveNext
MM_index = MM_index + 1
Wend
If (MM_rs.EOF) Then
MM_offset = MM_index ' set MM_offset to the last possible record
End If

End If
%>
<%
' *** Move To Record: if we dont know the record count, check the display range

If (MM_rsCount = -1) Then

' walk to the end of the display range for this page
MM_index = MM_offset
While (Not MM_rs.EOF And (MM_size < 0 Or MM_index < MM_offset + MM_size))
MM_rs.MoveNext
MM_index = MM_index + 1
Wend

' if we walked off the end of the recordset, set MM_rsCount and MM_size
If (MM_rs.EOF) Then
MM_rsCount = MM_index
If (MM_size < 0 Or MM_size > MM_rsCount) Then
MM_size = MM_rsCount
End If
End If

' if we walked off the end, set the offset based on page size
If (MM_rs.EOF And Not MM_paramIsDefined) Then
If (MM_offset > MM_rsCount - MM_size Or MM_offset = -1) Then
If ((MM_rsCount Mod MM_size) > 0) Then
MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
Else
MM_offset = MM_rsCount - MM_size
End If
End If
End If

' reset the cursor to the beginning
If (MM_rs.CursorType > 0) Then
MM_rs.MoveFirst
Else
MM_rs.Requery
End If

' move the cursor to the selected record
MM_index = 0
While (Not MM_rs.EOF And MM_index < MM_offset)
MM_rs.MoveNext
MM_index = MM_index + 1
Wend
End If
%>
<%
' *** Move To Record: update recordset stats

' set the first and last displayed record
RsOrario_Lezioni_compl_first = MM_offset + 1
RsOrario_Lezioni_compl_last = MM_offset + MM_size

If (MM_rsCount <> -1) Then
If (RsOrario_Lezioni_compl_first > MM_rsCount) Then
RsOrario_Lezioni_compl_first = MM_rsCount
End If
If (RsOrario_Lezioni_compl_last > MM_rsCount) Then
RsOrario_Lezioni_compl_last = MM_rsCount
End If
End If

' set the boolean used by hide region to check if we are on the last record
MM_atTotal = (MM_rsCount <> -1 And MM_offset + MM_size >= MM_rsCount)
%>
<%
' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters

Dim MM_keepNone
Dim MM_keepURL
Dim MM_keepForm
Dim MM_keepBoth

Dim MM_removeList
Dim MM_item
Dim MM_nextItem

' create the list of parameters which should not be maintained
MM_removeList = "&index="
If (MM_paramName <> "") Then
MM_removeList = MM_removeList & "&" & MM_paramName & "="
End If

MM_keepURL=""
MM_keepForm=""
MM_keepBoth=""
MM_keepNone=""

' add the URL parameters to the MM_keepURL string
For Each MM_item In Request.QueryString
MM_nextItem = "&" & MM_item & "="
If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then
MM_keepURL = MM_keepURL & MM_nextItem & Server.URLencode(Request.QueryString(MM_item))
End If
Next

' add the Form variables to the MM_keepForm string
For Each MM_item In Request.Form
MM_nextItem = "&" & MM_item & "="
If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then
MM_keepForm = MM_keepForm & MM_nextItem & Server.URLencode(Request.Form(MM_item))
End If
Next

' create the Form + URL string and remove the intial '&' from each of the strings
MM_keepBoth = MM_keepURL & MM_keepForm
If (MM_keepBoth <> "") Then
MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)
End If
If (MM_keepURL <> "") Then
MM_keepURL = Right(MM_keepURL, Len(MM_keepURL) - 1)
End If
If (MM_keepForm <> "") Then
MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)
End If

' a utility function used for adding additional parameters to these strings
Function MM_joinChar(firstItem)
If (firstItem <> "") Then
MM_joinChar = "&"
Else
MM_joinChar = ""
End If
End Function
%>
<%
' *** Move To Record: set the strings for the first, last, next, and previous links

Dim MM_keepMove
Dim MM_moveParam
Dim MM_moveFirst
Dim MM_moveLast
Dim MM_moveNext
Dim MM_movePrev

Dim MM_urlStr
Dim MM_paramList
Dim MM_paramIndex
Dim MM_nextParam

MM_keepMove = MM_keepBoth
MM_moveParam = "index"

' if the page has a repeated region, remove 'offset' from the maintained parameters
If (MM_size > 1) Then
MM_moveParam = "offset"
If (MM_keepMove <> "") Then
MM_paramList = Split(MM_keepMove, "&")
MM_keepMove = ""
For MM_paramIndex = 0 To UBound(MM_paramList)
MM_nextParam = Left(MM_paramList(MM_paramIndex), InStr(MM_paramList(MM_paramIndex),"=") - 1)
If (StrComp(MM_nextParam,MM_moveParam,1) <> 0) Then
MM_keepMove = MM_keepMove & "&" & MM_paramList(MM_paramIndex)
End If
Next
If (MM_keepMove <> "") Then
MM_keepMove = Right(MM_keepMove, Len(MM_keepMove) - 1)
End If
End If
End If

' set the strings for the move to links
If (MM_keepMove <> "") Then
MM_keepMove = Server.HTMLEncode(MM_keepMove) & "&"
End If

MM_urlStr = "prova_orario_lez2.asp?" & MM_moveParam & "="

MM_moveFirst = MM_urlStr & "0"
MM_moveLast = MM_urlStr & "-1"
MM_moveNext = MM_urlStr & CStr(MM_offset + MM_size)
If (MM_offset - MM_size < 0) Then
MM_movePrev = MM_urlStr & "0"
Else
MM_movePrev = MM_urlStr & CStr(MM_offset - MM_size)
End If
%>
<%
Dim Repeat2__numRows
Dim Repeat2__index

Repeat2__numRows = -1
Repeat2__index = 0
RsLettere_in_DB_numRows = RsLettere_in_DB_numRows + Repeat2__numRows
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>

<body>
<table border="0" cellpadding="5" cellspacing="3">
<tr>
<% While ((Repeat2__numRows <> 0) AND (NOT RsLettere_in_DB.EOF)) %>
<td><a href="prova_orario_lez2.asp?sfoglia=si&lettera=
<%=(RsLettere_in_DB.Fields.Item
("LETTERA_PAGINAZIONE").Value)%>">
<%=UCase(RsLettere_in_DB.Fields.Item
("LETTERA_PAGINAZIONE").Value)%></a></td>
<%
Repeat2__index=Repeat2__index+1
Repeat2__numRows=Repeat2__numRows-1
RsLettere_in_DB.MoveNext()
Wend
%>
</tr>
</table>
Elenco: <strong><%=UCase(lettera)%></strong><br>
<table border="1" cellpadding="2">
<tr>
<td rowspan="3" align="center" valign="middle">INSEGNAMENTI</td>
<td colspan="4" align="center" valign="middle"><b><span>PERIODI ATTIVIT&Agrave; DIDATTICA</span></b> </td>
</tr>
<tr>
<td width="15%" align="center">1&deg; <%=(RsPeriodi_Att_Did.Fields.Item("DATE_PERIODO1").Value)%>
</td>

<td width="15%" align="center">2&deg; <%=(RsPeriodi_Att_Did.Fields.Item("DATE_PERIODO2").Value)%>
</td>
<td width="15%" align="center">3&deg; <%=(RsPeriodi_Att_Did.Fields.Item("DATE_PERIODO3").Value)%>
</td>
<td width="15%" align="center">4&deg; <%=(RsPeriodi_Att_Did.Fields.Item("DATE_PERIODO4").Value)%>
</td>
</tr>
<tr>
<td colspan="4" align="center" valign="middle"><b><span>GIORNI - ORARIO - AULA</span></b> </td>
</tr>
<% While ((Repeat1__numRows <> 0) AND (NOT RsOrario_Lezioni_compl.EOF)) %>
<tr>
<td align="center"><%=(RsOrario_Lezioni_compl.Fields.Item
("INSEGNAMENTO").Value)%></td>
<%
if not isnull (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_1_PERIODO").Value) or
(RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_1_PERIODO").Value) <> "" then
%>
<td align="center">
<%=Replace(RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_1_PERIODO").Value, Chr(13), "<br>")%></td>
<%
else
%>
<td bgcolor="#C0DDA0"></td>
<%
end if
%>
<%
if not isnull (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_2_PERIODO").Value)
or (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_2_PERIODO").Value) <> "" then
%>
<td align="center">
<%=Replace(RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_2_PERIODO").Value, Chr(13), "<br>")%></td>
<%
else
%>
<td bgcolor="#C0DDA0"></td>
<%
end if
%>
<%
if not isnull (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_3_PERIODO").Value) or (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_3_PERIODO").Value) <> "" then
%>
<td align="center">
<%=Replace(RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_3_PERIODO").Value, Chr(13), "<br>")%></td>
<%
else
%>
<td bgcolor="#C0DDA0"></td>
<%
end if
%>
<%
if not isnull (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_4_PERIODO").Value) or (RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_4_PERIODO").Value) <> "" then
%>
<td align="center">
<%=Replace(RsOrario_Lezioni_compl.Fields.Item
("LEZIONI_4_PERIODO").Value, Chr(13), "<br>")%></td>
<%
else
%>
<td bgcolor="#C0DDA0"></td>
<%
end if
%>
</tr>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
RsOrario_Lezioni_compl.MoveNext()
Wend
%>
</table>

<br>
<A HREF="<%=MM_movePrev%>">Indietro</A>
&nbsp;&nbsp;&nbsp;<A HREF="<%=MM_moveNext%>">Avanti</A>
</body>
</html>
<%
RsLettere_in_DB.Close()
Set RsLettere_in_DB = Nothing
%>
<%
RsOrario_Lezioni_compl.Close()
Set RsOrario_Lezioni_compl = Nothing
%>
<%
RsPeriodi_Att_Did.Close()
Set RsPeriodi_Att_Did = Nothing
%>
Modificato da maxalp il 17 settembre 2004 21.34 -
Modificato da maxalp il 17 settembre 2004 21.55 -
324 messaggi dal 20 settembre 2001
www.iromtek.com
c'è qualcosa che non mi convince.... scusa ma tutti quelle querystring dove te le vai a prendere? sembra che siano sempre vuote

"Il problema delle persone è che cercano negli altri qualità che questi non posseggono mentre dovrebbero apprezzare ed esaltare le qualità che gli altri realmente posseggono"
18 messaggi dal 31 luglio 2002
Se ti riferisci alle variabili "sfoglia" e "lettera" vengono passate alla pagina quando si clicca su una lettera alfabetica per visualizzare i record corrispondenti. In effetti "sfoglia" è inutile e potrebbe bastare "lettera"; è un residuo delle prove che ho fatto.
Le due variabili vengono passate anche dai pulsanti avanti/indietro perché le accoda Dreamweaver. In questo modo i due pulsanti scorrono i record raggiunti con .Find, ma SOLO quelli. Non passando le 2 variabili, però, i pulsanti fanno ripartire lo scorrimento del recordset dall'inizio o, comunque, dal punto in cui si trovava prima della selezione alfabetica.
Quello che non riesco a fare è passare l'informazione dell'esatta posizione del cursore, tramite i pulsanti a/i, dopo una selezione alfabetica ed utilizzare quest'ultima posizione per scorrere tutto il recordset avanti/indietro.
Ho provato con la proprietà Bookmark (RsOrario_Lezioni_compl.Bookmark). Riesco a visualizzare il numero del Bookmark..ma poi non so come utilizzarlo..
11.886 messaggi dal 09 febbraio 2002
Contributi

è un residuo delle prove che ho fatto.


fai una cosa: ricomincia da capo.

Non serve usare il metodo .Find() nè i bookmark.
Una domanda: i tasti Avanti e indietro a cosa servono esattamente? Se ti trovi in B e fai "avanti" dovrebbe portarti a C?

cliccando una lettera semplicemente ricarica la pagina passando la lettera via querystring:
pagina.asp?lettera=a

e fai una query di questo tipo:

SELECT * FROM tabella WHERE camponome LIKE '" & Request.QueryString("lettera") & "%'


per realizzare i tasti indietro/avanti fai:

<a href="pagina.asp?lettera=<%=Chr(Asc(Request.QueryString("lettera"))-1)%>">Indietro</a>
<a href="pagina.asp?lettera=<%=Chr(Asc(Request.QueryString("lettera"))+1)%>">Avanti</a>

ciao

Enjoy learning and just keep making
18 messaggi dal 31 luglio 2002
La tabella che mostra i dati è paginata in modo da avere 3 righe per pagina.
Usando LIKE mi visualizza solo i record che rispondono al criterio: quindi, se della lettera B c'è un solo record, in tabella vedo solo quello mentre io vorrei vedere anche i due record successivi (ad esempio i primi 2 di C).
I tasti Avanti e indietro: se mi trovo in B vorrei poter scorrere tutti i record di B e poi di C ecc. Ma anche all'indietro, verso A ad esempio.
Usando il tuo suggerimento i tasti Avanti e indietro mi fanno saltare da una lettera all'altra senza visualizzare eventuali record successivi della stessa lettera.
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ahhh d'accordo.
comincia comunque nel fare la paginazione, è il problema che merita la priorità. Qui trovi un articolo sul come realizzarla:
http://www.aspitalia.com/liste/usag/script.aspx?ID=208

fatto questo, devi solo aggiungere poche righe di codice (del resto l'avevi già fatto tu).

'Controlli che sia stata passata una lettera
if Request.QueryString("lettera") <> "" then
'e se si, usi il .Find() per spostare il cursore del recordset sul primo record trovato con quella lettera
rs.Find("campo LIKE " & Request.QueryString("lettera") & "*")
end if

for i = 1 to numerodirecorddamostrare
if not rs.Eof then
Response.write(rs("campo") & "<br>")
rs.Movenext
end if
next

ciao

Enjoy learning and just keep making

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.