Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AndreRO

Loop while parando em valor nulo

Recommended Posts

Bom dia,

 

Já fiz alguns projetos em php, mas hoje estou quebrando um galho aqui em asp... E estou com uma problema

 

Tenho um site que pega as publicações recentes de um banco de dados MSSQL e guarda dentro de um objeto chamado oRs, faz um while not oRs.EOF para listar todos os links:

 

while not oRs.EOF 
		HTMLPubRecente = HTMLPubRecente &_
		"<li><a href=""javascript:void(0);"" onclick=""verPub("&oRs(5)&");"" style=""color:#FFF;"">" & oRs(3) &"</a></li><br/><br/>"
		oRs.MoveNext
	wend

Este código acima está funcionando, mas agora preciso fazer aparecer a ementa que alguns dos artigos têm, e tentei fazer assim:

 

while not oRs.EOF 
		HTMLPubRecente = HTMLPubRecente &_
		"<li><a href=""javascript:void(0);"" onclick=""verPub("&oRs(5)&");"" style=""color:#FFF;"">" & oRs(3) &"</a></li><br/><br/> <span>" & oRs(4) & "</span>"
		oRs.MoveNext
	wend

 

O problema é que se o artigo não tiver ementa ( oRs(4) em branco ), ele para o loop while e não termina de listar os outros artigos... Tentei colocar um if ali, mas não deu certo... Quando coloquei uma váriável nula, ele correu como se não tivesse o if... E quando coloquei nothing, apareceu um erro

 

while not oRs.EOF 
		HTMLPubRecente = HTMLPubRecente &_
		"<li><a href=""javascript:void(0);"" onclick=""verPub("&oRs(5)&");"" style=""color:#FFF;"">" & oRs(3) &"</a></li><br/><br/>"
		if oRs(4) <> nothing then 'também tentei colocar uma váriável nula aqui, mas não deu certo
		HTMLPubRecente = HTMLPubRecente & "<span>" & oRs(4) & "</span>"
		end if
		oRs.MoveNext
	wend

 

erro que aparece quando coloco o nothing:

 

Erro de tempo de execução do Microsoft VBScript erro '800a005b'

 

A variável de objeto não foi definida

 

/ct/novo/Default.asp, linha 94

 

Desculpe se o texto ficou muito grande... Tentei explicar o máximo possível o que eu fiz... Obrigado a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tu criou um array e jogou todos os valores dentro dele foi?

 

Pq?

 

Faça o while, e coloque os valores dentro de uma variável, a cada vez q der um loop.

 

Tipo:

 

<%
while not RS.EOF

VAR1 = RS("CAMPO1")
VAR2 = RS("CAMPO2")
VAR3 = RS("CAMPO3")
%>

Links, endereços, tabelas, listas, etc

<%
if not RS.EOF then
Rs.Movenext
end if

wend
%>

No final do loop feche as conexões. Tenta aí e posta o q deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não fui eu quem fiz o site... Só estou quebrando um galho pq quem mexe com asp aqui está de férias... E ele já fez o site em cima do antigo, que já estava com um banco de dados mto mal modelado... É o tipo de coisa que eu não quero mexer mto se não dá pau, hehehe

 

Pelo que eu entendi, oRs não é um array simples, mas um objeto contendo vários arrays...

 

Eu tentei fazer com base do que você disse... Ainda acho que não está certo, apareceu a ementa apenas do primeiro artigo... Depois parou

 

Set oRs = SQLConnection.Execute(" SELECT T.DTHR_INSERT, T.DTHR_UPDATE, T.DT_PUBOFICIAL, T.NM_TITULODOCUMENTO,"&_
								"        T.MM_EMENTA, T.ID_TEXTO, T.NR_DOC, MST.ID_MENUSITE "&_
								" FROM TEXTO T, "&_
								"      MENUSITETEXTO MST "&_
								" WHERE ( T.DTHR_INSERT >= ( CURRENT_TIMESTAMP - 7 ) "&_
								"       OR T.DTHR_UPDATE >= ( CURRENT_TIMESTAMP - 7 ) ) "&_
								"       AND MST.ID_TEXTO = T.ID_TEXTO "&_
								" ORDER BY T.DTHR_INSERT DESC, "&_
								"       T.DTHR_UPDATE DESC, "&_
								"       T.DT_EDICAO DESC, "&_
								"       T.NR_DOC DESC, "&_
								"       T.ID_TEXTO DESC ")

if not oRs.EOF then
	Dim HTMLPubRecente
	oRs.MoveFirst
	
	while not oRs.EOF 
	link = oRs(5)
	titulo = oRs(3)
	ementa = oRs(4)
		HTMLPubRecente = HTMLPubRecente &_
		"<li><a href=""javascript:void(0);"" onclick=""verPub("&link&");"" style=""color:#FFF;"">" & titulo &"</a></li><br/><br/>"
		if ementa <> "" then
		HTMLPubRecente = HTMLPubRecente & "<span>" & ementa & "</span>"
		end if
		oRs.MoveNext
	wend

 

o HTML gerado foi esse aqui

 

<li><a href="javascript:void(0);" onclick="verPub(7584);" style="color:#FFF;">PORTARIA SUACIEF Nº 11, DE 29 DE MARÇO DE 2010 - (DOE DE 31/03/2010)</a></li><br/><br/><span>Altera o Anexo III da Portaria SUACIEF nº 07 de 29/12/2010.

Ou seja, parou antes de gerar o </span>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não fui eu quem fiz o site... Só estou quebrando um galho pq quem mexe com asp aqui está de férias... E ele já fez o site em cima do antigo, que já estava com um banco de dados mto mal modelado... É o tipo de coisa que eu não quero mexer mto se não dá pau, hehehe

 

Pelo que eu entendi, oRs não é um array simples, mas um objeto contendo vários arrays...

 

Eu tentei fazer com base do que você disse... Ainda acho que não está certo, apareceu a ementa apenas do primeiro artigo... Depois parou

 

Set oRs = SQLConnection.Execute(" SELECT T.DTHR_INSERT, T.DTHR_UPDATE, T.DT_PUBOFICIAL, T.NM_TITULODOCUMENTO,"&_
								"        T.MM_EMENTA, T.ID_TEXTO, T.NR_DOC, MST.ID_MENUSITE "&_
								" FROM TEXTO T, "&_
								"      MENUSITETEXTO MST "&_
								" WHERE ( T.DTHR_INSERT >= ( CURRENT_TIMESTAMP - 7 ) "&_
								"       OR T.DTHR_UPDATE >= ( CURRENT_TIMESTAMP - 7 ) ) "&_
								"       AND MST.ID_TEXTO = T.ID_TEXTO "&_
								" ORDER BY T.DTHR_INSERT DESC, "&_
								"       T.DTHR_UPDATE DESC, "&_
								"       T.DT_EDICAO DESC, "&_
								"       T.NR_DOC DESC, "&_
								"       T.ID_TEXTO DESC ")

if not oRs.EOF then
	Dim HTMLPubRecente
	oRs.MoveFirst
	
	while not oRs.EOF 
	link = oRs(5)
	titulo = oRs(3)
	ementa = oRs(4)
		HTMLPubRecente = HTMLPubRecente &_
		"<li><a href=""javascript:void(0);"" onclick=""verPub("&link&");"" style=""color:#FFF;"">" & titulo &"</a></li><br/><br/>"
		if ementa <> "" then
		HTMLPubRecente = HTMLPubRecente & "<span>" & ementa & "</span>"
		end if
		oRs.MoveNext
	wend

 

o HTML gerado foi esse aqui

 

<li><a href="javascript:void(0);" onclick="verPub(7584);" style="color:#FFF;">PORTARIA SUACIEF Nº 11, DE 29 DE MARÇO DE 2010 - (DOE DE 31/03/2010)</a></li><br/><br/><span>Altera o Anexo III da Portaria SUACIEF nº 07 de 29/12/2010.

Ou seja, parou antes de gerar o </span>

 

=============================

 

Vamo organizar esse código, que está mt confuso!

 

Tente fazer assim:

 


Set RS = SQLConnection.Execute(" SELECT T.DTHR_INSERT, T.DTHR_UPDATE, T.DT_PUBOFICIAL, T.NM_TITULODOCUMENTO, T.MM_EMENTA, T.ID_TEXTO, T.NR_DOC, MST.ID_MENUSITE FROM TEXTO T, MENUSITETEXTO MST WHERE ( T.DTHR_INSERT >= ( CURRENT_TIMESTAMP - 7 ) OR T.DTHR_UPDATE >= ( CURRENT_TIMESTAMP - 7 ) ) AND MST.ID_TEXTO = T.ID_TEXTO ORDER BY T.DTHR_INSERT DESC, T.DTHR_UPDATE DESC, T.DT_EDICAO DESC, T.NR_DOC DESC, T.ID_TEXTO DESC")

if not RS.EOF then

	Dim HTMLPubRecente

	while not RS.EOF 

	link = RS(T.ID_TEXTO)
	titulo = RS(T.NM_TITULODOCUMENTO)
	ementa = RS(T.MM_EMENTA)

		HTMLPubRecente = HTMLPubRecente + "<li><a href='javascript:void(0);' onclick='verPub(" & link & ");' style='color:#FFF;'>" & titulo &"</a>"
		if ementa <> "" then
		HTMLPubRecente = HTMLPubRecente + "<br><br><span>" & ementa & "</span>"
                else
		HTMLPubRecente = HTMLPubRecente + "<br><br>"
		end if
		RS.MoveNext

	wend
end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamo organizar esse código, que está mt confuso!

 

Tente fazer assim:

 


Set RS = SQLConnection.Execute(" SELECT T.DTHR_INSERT, T.DTHR_UPDATE, T.DT_PUBOFICIAL, T.NM_TITULODOCUMENTO, T.MM_EMENTA, T.ID_TEXTO, T.NR_DOC, MST.ID_MENUSITE FROM TEXTO T, MENUSITETEXTO MST WHERE ( T.DTHR_INSERT >= ( CURRENT_TIMESTAMP - 7 ) OR T.DTHR_UPDATE >= ( CURRENT_TIMESTAMP - 7 ) ) AND MST.ID_TEXTO = T.ID_TEXTO ORDER BY T.DTHR_INSERT DESC, T.DTHR_UPDATE DESC, T.DT_EDICAO DESC, T.NR_DOC DESC, T.ID_TEXTO DESC")

if not RS.EOF then

	Dim HTMLPubRecente

	while not RS.EOF 

	link = RS(T.ID_TEXTO)
	titulo = RS(T.NM_TITULODOCUMENTO)
	ementa = RS(T.MM_EMENTA)

		HTMLPubRecente = HTMLPubRecente + "<li><a href='javascript:void(0);' onclick='verPub(" & link & ");' style='color:#FFF;'>" & titulo &"</a>"
		if ementa <> "" then
		HTMLPubRecente = HTMLPubRecente + "<br><br><span>" & ementa & "</span>"
                else
		HTMLPubRecente = HTMLPubRecente + "<br><br>"
		end if
		RS.MoveNext

	wend
end if

 

=================

 

Nada ainda... Deu erro

 

ADODB.Recordset erro '800a0cc1' 

O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado. 

/ct/novo/default.asp, linha 82

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Vamo organizar esse código, que está mt confuso!

 

Tente fazer assim:

 


Set RS = SQLConnection.Execute(" SELECT T.DTHR_INSERT, T.DTHR_UPDATE, T.DT_PUBOFICIAL, T.NM_TITULODOCUMENTO, T.MM_EMENTA, T.ID_TEXTO, T.NR_DOC, MST.ID_MENUSITE FROM TEXTO T, MENUSITETEXTO MST WHERE ( T.DTHR_INSERT >= ( CURRENT_TIMESTAMP - 7 ) OR T.DTHR_UPDATE >= ( CURRENT_TIMESTAMP - 7 ) ) AND MST.ID_TEXTO = T.ID_TEXTO ORDER BY T.DTHR_INSERT DESC, T.DTHR_UPDATE DESC, T.DT_EDICAO DESC, T.NR_DOC DESC, T.ID_TEXTO DESC")

if not RS.EOF then

	Dim HTMLPubRecente

	while not RS.EOF 

	link = RS(T.ID_TEXTO)
	titulo = RS(T.NM_TITULODOCUMENTO)
	ementa = RS(T.MM_EMENTA)

		HTMLPubRecente = HTMLPubRecente + "<li><a href='javascript:void(0);' onclick='verPub(" & link & ");' style='color:#FFF;'>" & titulo &"</a>"
		if ementa <> "" then
		HTMLPubRecente = HTMLPubRecente + "<br><br><span>" & ementa & "</span>"
                else
		HTMLPubRecente = HTMLPubRecente + "<br><br>"
		end if
		RS.MoveNext

	wend
end if

 

=================

 

Nada ainda... Deu erro

 

ADODB.Recordset erro '800a0cc1' 

O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado. 

/ct/novo/default.asp, linha 82

Deu esse erro pq ele procurou algum campo no banco e não achou.

 

Cole aqui o código INTEIRO da página pra eu verificar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Post a Consulta que é executada na linha 82

 

provavelmente tem algum campo que você digitou errado ou não existe no banco

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.