Vado di fretta e quindi non posso testare la procedura per questo ti posto una versione semplificita poi nel caso se non riesci ad ampliarla ti riseguo quando torno dal lavoro:

Lista e dettaglio
codice:
	
page = trim(request.querystring("page")) 
	Dim strLine
	If page = "" Then
	page = 1
	else
	page = cint(page)
	End If

Set oCon = Server.CreateObject ("ADODB.Connection")
	Set Rec = Server.CreateObject ("ADODB.Recordset")

	oCon.Open strCon
	Rec.PageSize = 15
	ID = trim(request.querystring("IDnews"))
	sql = "Select newsletters.titolo, newsletters.ID, ISAAA.data from newsletters 
Rec.Open sql,oCon,3,3
id = Request("id")
if id = "" then id = 0
if id <> 0 then
 'Filtro il recordset solo all'id
 Rs.Filter = "id = " & id %>
 Dettaglio news selezionatata:
 Rs("titolo")
 
 [b]<%=FormatDateTime(Rs("data"),2)%>

 'Altri campi che ti vuoi estrarre per il dettaglio
<%
end if 
' se è id è vuoto lo setto a 0 e quindi essendo numerico va bene
' il controllo non schianta
Rs.Filter = "id <> " & id 
while not Rs.eof %>   
...tua formattazione html .....     
&page=<%=page%>"><%=Rs("titolo")%>
...tua formattazione html .....        
<%
Rs.Movenext
wend

if rec.bof or rec.eof then
response.write("nessun record")
else
count=rec.recordcount
for i = 1 to count
rec.absolutepage=cint(i)
 response.write "<a href=PaginaDettaglio.asp?id="&rec("id")&"  target=nomerame>"&rec("id")&"</a>
"
next
%>
come ti ho detto non è testata il punto è farti capire
che se viene passato id
prima di mostrale la lista totale fai un filter del rs solo se id è diverso da 0 tutto questo in testa al file
subito dopo filtri il recordset per i valore diversi da id,se id è uguale a 0 filtrandolo a id <> 0 ti restituisce il set completo (id è un contatore e quindi numerico)