Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ADO
 mas de recorsets
 Foro Bloqueado  Tema Bloqueado


Autor Temas
capelo
Starting Member

España
27 Posts
Mensajes - 03 Jul 2002 :  09:54:03  Ver Perfil  Enviar Email
Sigo teniendo problemillas con los recordset, y no se que estoy haciendo mal. Tengo que acceder a unos campos de una tabla mediante un bucle para hacer un ticker de noticias, pero no me saca en el navegador ninguno e los campos cuando accedo dentro del bucle, mientras que fuera si que lo hace, a ver pongo el código y me explico:

<html>
<head>
<title>
titulo_bienvenida
</title>
<style type="text/css">
#divNewsCont{position:absolute; width:350; height:150; overflow:hidden; top:260; left:140; clip:rect(0,350,150,0); visibility:hidden}
#divNewsText{position:absolute; top:0; left:0}
</style>

<script type="text/javascript" language="JavaScript">

function checkBrowser(){
this.ver=navigator.appVersion
this.dom=document.getElementById?1:0
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
this.ie4=(document.all && !this.dom)?1:0;
this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
return this
}
bw=new checkBrowser()

lstart=100
loop=true
// Velocidad
speed=40
pr_step=1

function makeObj(obj,nest){
nest=(!nest) ? '':'document.'+nest+'.'
this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;
this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+'document.'+obj):0;
this.scrollHeight=bw.ns4?this.css.document.height:this.el.offsetHeight
this.newsScroll=newsScroll;
this.moveIt=b_moveIt; this.x; this.y;
this.obj = obj + "Object"
eval(this.obj + "=this")
return this
}
function b_moveIt(x,y){
this.x=x;this.y=y
this.css.left=this.x
this.css.top=this.y
}
function newsScroll(speed){
if(this.y>-this.scrollHeight){
this.moveIt(0,this.y-pr_step)
setTimeout(this.obj+".newsScroll("+speed+")",speed)
}else if(loop) {
this.moveIt(0,lstart)
eval(this.obj+".newsScroll("+speed+")")
}
}
function newsScrollInit(){
oNewsCont=new makeObj('divNewsCont')
oNewsScroll=new makeObj('divNewsText','divNewsCont')
oNewsScroll.moveIt(0,lstart)
oNewsCont.css.visibility='visible'
oNewsScroll.newsScroll(speed)
}
onload=newsScrollInit;
</script>
</head>

<body >
<h1>
Noticias
</h1>
<%
Set Connae = Server.CreateObject("ADODB.Connection")
Connae.Open("Driver={SQL Server}; Description=sqldemo; SERVER=JUSTINE; DSN=demostrador; UID=candido; PWD=candido")

set rse=createobject("ADODB.Recordset")
sqltxt="SELECT * from Noticias"
rse.open sqltxt,connae
%>
<%=rse("Resumen")%>
<div id="divNewsCont">
<div id="divNewsText">
<p><font face="Arial" size="3"><b>Scroll de noticias:</b></font><br><br>
<font face="Arial" size="2"><b>Por Cándido Peña</b> <br></font></p>
<%
rse.movefirst
do while not rse.EOF
%>
<p><font face="Arial" size="3"><b><i>

<A HREF=<%=rse("link")%>> <%=rse("titular")%> </a></i></b></font></p>
<p> <%=rse("resumen")%></p>
<%
rse.movenext
loop
%>
</div>
</div>
<%
rse.Close
Connae.Close
%>
</body>

</html>

La primera vez que pongo rse("resumen") si lo saca, pero cuando lo pongo dentro del bucle (que es lo que me interesa) nada de nada. Alguien sabe que es lo que setoy haciendo mal?. Gracias por adelantado

nicolas
New Member

España
74 Posts
Posted - 03 Jul 2002 :  13:47:07  Ver perfil  Enviar e-mail
De momento, la línea:

set rse=createobject("ADODB.Recordset")

... debería ser:

set rse=Server.createobject("ADODB.Recordset")

... y para recuperar los valores de los campos, mejor pondría:

rse.fields("nombreDelCampo").value

Nicolás Sánchez Ruiz
ESI BarcelonaInicio Pagina

capelo
Starting Member

España
27 Posts
Posted - 03 Jul 2002 :  13:59:53  Ver perfil  Enviar e-mail
gracias, pero no me sirve de nada, en cambio si he notado que si cambio el tipo de datos en la base de datos (en lugar de text pongo varchar) si lo saca sin ningun problema. Sabe alguien que clase de tipo de dato es el text de SQL SERVER? en que se diferencia del varchar??

Inicio Pagina

buho_nero
Moderator

España
1316 Posts
Posted - 03 Jul 2002 :  18:21:07  Ver perfil  Enviar e-mail
La diferencia es el espacio que ocupa, bueno mas bien la forma de ocuparlo, el tipo text es estático, siempre ocupa lo mismo, aunque esté vacío, pero el varchar se supone que es dinámico, que se adapta de alguna forma al contenido.

Inicio Pagina

mtorress8
New Member

Mexico
54 Posts
Posted - 03 Jul 2002 :  20:43:24  Ver perfil  Enviar e-mail  Enviar mtorress8 un Mensaje Yahoo!e
estoy de acuerdo con buho_nero a parte que para leer un tipo de dato Text
es necesario añadir la instruccion ReadText de SQL, un ejemplo:
declare @ptr varbinary(16)
SELECT @ptr = TEXTPTR(campo)
from textos where id= 3
READTEXT textos.campo @ptr inicio,caracteres

donde ptr es un apuntador de texto declarado con la instruccion TEXTPTR
donde inicio = a la posicion inicial
caracteres = cantidad de caracteres a leer

espero te sirva

Inicio Pagina

nicolas
New Member

España
74 Posts
Posted - 04 Jul 2002 :  18:58:07  Ver perfil  Enviar e-mail
El problema puede deberse a un 'bug' que aparece al darse la siguiente combinación (que es tu codigo se da):
1)Conectarse mediante el driver ODBC
2)Utilizar un recordset de tipo 'solo hacia adelante' (adForwardOnly, que se establece por defecto si no indicas expresamente el tipo)
3)Utilizar una "SELECT * " sin indicar expresamente las columnas.
4)Querer acceder dos veces a un campo de tipo "TEXT".

La suma de estas 4 situaciones, dá lugar al problema que mencionas (al menos con ADO 2,5 y SQL Server 7). Cambiando cualquiera de las cuatro cosas de arriba pude funcionar (al menos con ADO 2,5 y SQL Server 7):

1) Por ejemplo, utilizando la sintaxis de conexión OLEDB (recomendable por diferentes razones, además de porque resuelven este 'bug'). En tu caso, sería utilizar el metodo open de la conexión con:

"Provider=SQLOLEDB;Server=justine;Database=tuBaseDeDatos;UID=candido;PWD=candido;"

... así sin cambiar nada más, te debería funcionar.

2) Dejando la conexión como la tienes pero indicando expresamente cualquier tipo de cursor menos el 'adForwardOnly' (valor 0, el que se establece por defecto). Así, podrías poner antes de abrir el recordset:

rse.cursorType= 3

(3 es el valor para el cursor estático, pero quizás tambien te funcione con los valores 1 y 2)

3) Dando nombres a las columnas que quieres recuperar (siempre recomendable, independientemente del 'bug' que nos okupa):

"SELECT link, titular, resumen FROM..."

4) Evitando el uso de campos de tipo TEXT. Bueno, si lo resuelves con los cambios anteriores, ya no haría falta cambiar el tipo.

Espero que lo dicho sí te sea de ayuda. Si te parece, prueba algo y comenta lo obtenido.

Nicolás Sánchez Ruiz
ESI BarcelonaInicio Pagina

nicolas
New Member

España
74 Posts
Posted - 04 Jul 2002 :  19:33:12  Ver perfil  Enviar e-mail
En cuanto a la diferentes tipos para datos alfanuméricos:

1) El tipo CHAR puede almacenar hasta 8k carcteres y es de longitud fija (ocupan es espacio definido aunque el valor contenido sea más pequeño)

2) El tipo VCHAR puede almacenar hasta 8k caracteres y es de longitud variable (ocupan el espacio del valor contenido)

3) El tipo TEXT permite almacenar cadenas de longitud variable de hasta más de dos millones de caracteres. Tiene algunas limitaciones; por ejemplo no puede usarse para variables en parametros de procedimientos y en general es menos eficiente; esto se derivada de que realmente se guarda un apuntador (por eso aparentan una longitud fija de 16) a otra estructura.

Nicolás Sánchez Ruiz
ESI BarcelonaInicio Pagina

capelo
Starting Member

España
27 Posts
Posted - 05 Jul 2002 :  09:26:04  Ver perfil  Enviar e-mail
Increible, has dado en el clavo en todos y cada uno de los puntos, ya había resuelto el problema con el último punto que mencionas (lo de cambiar el tipo de datos), aunque lo demas tambien funciona.

Muchas gracias por la solucion y por los consejos adicionales.

Inicio Pagina

   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar