Jump to content


Photo

Adaptar Um Script Php Para Asp


  • Faça o login para participar
1 reply to this topic

#1 graffdesign

graffdesign

    Turista

  • Usuários
  • 28 posts
  • Sexo:Não informado
  • Localidade:Rio de Janeiro

Posted 05/10/2006, 03:50

Oi gente eu tenho um script de seleção de banners randomicos em PHP e em ColdFusion e eu gostaria de criar um igual em ASP para seguir um mesmo padrão em meus sistemas, vejam o script e abaixo dele vou botar minha dúvida.

<%
	'declaração das variáveis
	Dim qBanner_square_list, qBanner_square_getBanner, getItem, TRBS
	' TRBS = Total Records Banner Square
	Dim sql_cList, sql_getBanner
	
	'Query que populará a lista de banners
	sql_cList = "SELECT" _
				&	" id_banner" _
				& " FROM" _
				&	" smo_banner" _
				& " WHERE" _
				&	" tamanho = 2" _
				& " AND"_
				&	" roles = 1" _
				& " ORDER BY" _
				&	" id_banner" _
				& " ASC;"
			
	'abrir conexão com o banco de dados
	conn.open "sdsn" , "username" , "senha"  ' "datasourcename" , "username" , "senha"
	'criar recordset e fazer a consulta
	set qBanner_square_list = conn.Execute (sql_cList) 
	'Cria o valor total de registros menos 1 para criar o tamanho do array
	TRBS = cint(qBanner_square_list.RecordCount + 1)
	'Define e cria o array
	Dim lista_square()
	reDim preserve lista_square(TRBS)
	
	Dim itemLoopSquare 'Define o contador
	itemLoopSquare = 0 'Cria o contador
	
	'Faz o loop  até o fim da consulta e até o contador chegar ao tamanho do total de registros
	DO UNTIL qBanner_square_list.EOF
		'Grava o id no array
		lista_square(itemLoopSquare) = qBanner_square_list("id_banner")
		'Incrementa o contador em + 1
		itemLoopSquare = itemLoopSquare + 1
		'Pula para o próximo registro
		qBanner_square_list.Movenext
	Loop 'Termina o loop
	
	'pega um banner randomizado
	Dim randASquare
	randomize
	randASquare = int(Rnd * uBound(lista_square)) + 0
	
	getItem = cint(lista_square(randASquare))
	
	'Query que populará a lista de banners
	sql_getBanner = " SELECT " _
					&	"id_banner, " _
					&	"src, " _
					&	"formato, " _
					&	"url " _
					& "FROM " _
					&	"smo_banner " _
					& "WHERE " _
					&	"id_banner = " & getItem & ";"
	
	set qBanner_square_getBanner = conn.Execute(sql_getBanner)
	'pega os dados do banner e guarda em variáveis
	
	Dim banner_square, banner_square_formato, banner_square_url
	
	[b]banner_square = qBanner_square_getBanner("src") 'nome do banner[/b]
	banner_square_formato = cint(qBanner_square_getBanner("formato"))
	banner_square_url = qBanner_square_getBanner("url")
	
		'começar as expressões
	IF banner_square_formato = 1 THEN 'SWF
%>
		<table width="150" border="0" align="center" cellspacing="0" cellpadding="0">
		  <tr>
			<td>
			 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
					codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" 
					width="150" 
					height="150">
				  <param name="movie" value="_img_externas/_publicidade/<%= banner_square %>" />
				  <param name="quality" value="high" />
				  <embed src="_img_externas/_publicidade/<%= banner_square %>" 
							quality="high" 
							pluginspage="http://www.macromedia.com/go/getflashplayer" 
							type="application/x-shockwave-flash" 
							width="150" 
							height="150">
				 </embed>
				</object>
			  </td>
		  </tr>
		</table>
<%
	ELSEIF banner_square_formato =  2 THEN 'IMG
%>
		<table width="150" border="0" align="center" cellspacing="0" cellpadding="0">
		  <tr>
			<td><a href="<%= banner_square_url %>"><img name="Banner_square" alt="" src="_img_externas/_publicidade/<%= banner_square %>" 
			border="0" /></a></td>
		  </tr>
		</table>
<%
	ELSE
%>
		<table width="150" border="0" align="center" cellspacing="0" cellpadding="0">
		  <tr>
			<td><%= banner_square %></td>
		  </tr>
		</table>
<%
	END IF
%>

Bom funciona de boa, só que agumas vezes a variável: getItem = cint(lista_square(randASquare)) retorna vasia ae a quaery naum funciona e retorna o erro:

Tipo de erro:
ADODB.Field (0x800A0BCD)
BOF ou EOF são verdadeiros, ou o registro atual foi excluído. A operação solicitada pelo aplicativo requer um registro atual.
/asp_sites/smo/web/_includes/_inc_banners/banner_square.asp, line 68


A linha 68 é a que esta em negrito no codigo, ou seja a primeira linha depois da query que retornaria o banner!!!

Bom eu sei que o ASP tem um componente de rotação de banners o ADROTATOR, mas como falei preciso seguir um padrão em um sistema e tenho que fazer igual.

O script com essa lógica funciona perfeitamente no PHP e no ColdFusion, alguém sabe o que pode estar acontecendo de errado?

Eu fiz um codigo bobo para testar a função do script e nuam retorna erro nenhum nunca, sempre a variável volta com um valor segue o teste:

<%
	Option Explicit
	Dim random(), cont
cont=4
redim preserve random(cont)

	Dim rand
	random(0) = "item 0"
	random(1) = "item 1"
	random(2) = "item 2"
	random(3) = "item 3"
	 
	randomize
	rand = int(Rnd * uBound(random)) + 0
%>
<%= "<h3>" & random(rand) & "</h3>" %>

Só da erro com a consulta no db.

Alguém ajuda?

Valeu

Edição feita por: graffdesign, 05/10/2006, 03:54.


#2 siola

siola

    Usuário

  • Usuários
  • 894 posts
  • Sexo:Masculino
  • Localidade:SBC - SP
  • Interesses:ASP, .NET, javascript

Posted 05/10/2006, 08:13

A variavel não é vazia, o problema é que o numero gerado não tem um registro correspondente no banco de dados.

Talvez você possa colcoar a rotina de gerar numeros aleatorios dentro de um Sub, e depois da query SQL, fazer a verificação se o registro foi encontrado ou não.

Algo como
Sub GeraNumero()
'codigo de gerar numeros aleatorios
set qBanner_square_getBanner = Conn.Execute("select* from...")
If qBanner_square_getBanner.EOF Then
Call GeraNumero
Else
Exit Sub
'aqui ele encotrou o registro e não vai dar erro
End If
End Sub

Isto é so um exemplo de como você pode fazer.

Se estiver usando banco de dados Access dé uma olhada neste site: http://blog.elcio.co...orio_no_access/

[]s

Edição feita por: siola, 05/10/2006, 08:14.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq