Foros del Web » Programando para Internet » ASP Clásico »

¿¿¿Dónde está mi error???

Estas en el tema de ¿¿¿Dónde está mi error??? en el foro de ASP Clásico en Foros del Web. Hola a todos, lo que estoy haciendo es algo muy sencillo, pero se ve que tengo el día malo (o que sé muuucho menos de ...
  #1 (permalink)  
Antiguo 09/02/2005, 11:48
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
¿¿¿Dónde está mi error???

Hola a todos, lo que estoy haciendo es algo muy sencillo, pero se ve que tengo el día malo (o que sé muuucho menos de lo que yo pensaba, que fijo que va a ser eso ).

Se trata de un formulario para meter datos en una base de datos access utilizando un asp.

Siguiendo un par de modelos que he encontrado en manuales, he hecho lo siguiente, pero no funciona, devuelve error 500 no encontrado página insertar.asp (que juro que está ahí).

Aquí dejo los códigos:

insertar.htm:

<HTML>
<HEAD>
<TITLE>Insertar.html</TITLE>
</HEAD>
<BODY>
<div align="center">
<FORM METHOD="POST" ACTION="insertar.asp">
Código<br>
<INPUT TYPE="TEXT" NAME="nombre1" size="20"><br>
Nombre<br>
<INPUT TYPE="TEXT" NAME="nombre"><br>
Apellidos<br>
<INPUT TYPE="TEXT" NAME="apellidos"><br>
<INPUT TYPE="SUBMIT" value="Insertar">
</p>
</FORM>
</div>
</BODY>
</HTML>



insertar.asp:

<HTML>
<HEAD>
<TITLE>Insertar.asp</TITLE>
</HEAD>
<BODY>
<%
'Recogemos los valores del formulario
codigo=Request.Form("codigo")
nombre=Request.Form("nombre")
apellidos=Request.Form("apellidos")
'Instanciamos y abrimos nuestro objeto conexion
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../data/base.mdb"))
'Ahora creamos la sentencia SQL
sSQL="Insert Into registro (codigo,nombre,apellidos) values ('" & codigo & "','" & nombre & "','" & apellidos & "')"
'Ejecutamos la orden
set RS = conn.Execute(sSQL)
<div align="center">Registro Insertado</div>
'Cerramos el sistema de conexion
rs.close
%>
</BODY>
</HTML>


MUCHAS GRACIAS A TODOS POR LA AYUDA
  #2 (permalink)  
Antiguo 09/02/2005, 12:21
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola,

Primero, seguro que la pagina "html" esta en el mismo directorio que la "asp"?

lo unico que veo en el codigo asp es que el codigo, lo sacas con:

codigo=Request.Form("codigo")

y en la pagina html tienes como "nombre1"

saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #3 (permalink)  
Antiguo 09/02/2005, 12:23
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 10 meses
Puntos: 0
ademas, agrega despues del rs.close:

set conn = nothing

saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #4 (permalink)  
Antiguo 09/02/2005, 12:24
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 7 meses
Puntos: 0
codigo=Request.Form("codigo")

este no lo veo en el formulario????...
en el formulario hay un campo que se llama "Nombre1", y no lo recuperas...
y para que tu browser te ayude a ver los errores y no te digo solo ERROR 500, en el explorador...

Herramientas > Opciones de Internet > opciones avanzadas > examinar > desactivar errores descriptivos de http....


si no te sige funcionando avisa...

slds.
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #5 (permalink)  
Antiguo 09/02/2005, 13:11
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
Ya he puesto bien el html, he puesto también el set conn = nothing, y he quitado lo de los errores que decía Slash digo... univercity , pero ahora me dice:

ADODB.Recordset error '800a0e78'

La operación no está permitida si el objeto está cerrado.

/insertar.asp, line 20


Y SIN EMBARGO SÍ QUE GUARDA LOS DATOS

¿Cómo hacer que no salga ese error?¿por qué sale?¿Cómo poner algo tipo "los datos han sido enviados con éxito"?

SIGO ESPERANDO AYUDA

Última edición por ludovico2000; 09/02/2005 a las 13:16 Razón: copié mal el error
  #6 (permalink)  
Antiguo 09/02/2005, 13:19
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 9 meses
Puntos: 381
Hola ludovico

no te resultaría más sencillo usar un DSN para conectar con la bd??
  #7 (permalink)  
Antiguo 09/02/2005, 13:22
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 9 meses
Puntos: 381
oño ha cambiado el error

seguramente te da ese error por algo posterior a la inserción de los datos.

Igual le has dicho que cierre el objeto cuando yá estaba cerrado o algo así

¿qué hay en la línea 20?
  #8 (permalink)  
Antiguo 09/02/2005, 13:55
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
En primer lugar, voy a admitir mi ignorancia... ¿Un DSN? ¿lo cualo? yo no he "aprendido" ASP ni programar ni ná, simplemente, cuando he necesitado algo lo he buscado y adaptado "por instinto" a mis necesidades...

En segundo lugar, en la linea 20 pone:

rs.close

Y en tercero... muchísimas gracias por vuestra paciencia y colaboración
  #9 (permalink)  
Antiguo 09/02/2005, 14:03
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
Como dijo aquél...

¡¡¡¡¡¡¡¡¡¡¡ K'pla !!!!!!!!!!


o también...


¡¡¡¡¡¡Eureka!!!!!


He quitado el rs.close y ahora va bien... sospecho que es porque ya hay una sentencia set conn = nothing, y teniendo en cuenta que set RS = conn.Execute(sSQL) pues si cerraba rs ya estaba cerrado conn también ¿no?

Bueno, queda el asuntillo de poner algo como "los datos se han insertado correctamente... cerrar", pero esa es harina de otro costal...

Muchas gracias a todos los que habéis posteado para ayudarme: Claray, univercity y Tunait.

Como digo siempre: COMPARTIENDO, MEJORAMOS TODOS.

Última edición por ludovico2000; 09/02/2005 a las 14:06 Razón: reconocimiento
  #10 (permalink)  
Antiguo 09/02/2005, 14:06
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 7 meses
Puntos: 0
haz la prueba quitando el Rs.close , haber que te dice, y revisa la BD haber si entro el registro...

por siacaso yo trabajo siempre con Ole Db y nunca he tenido problemas, no le veo la necesidad de trabajar con DNS...
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #11 (permalink)  
Antiguo 09/02/2005, 14:08
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
He quitado el rs.close y ahora va bien... sospecho que es porque ya hay una sentencia set conn = nothing, y teniendo en cuenta que set RS = conn.Execute(sSQL) pues si cerraba rs ya estaba cerrado conn también ¿no?
A mi me parece que es porque nunca hiciste un rs.OPEN... osea, no podés hacer un .close a algo que nunca se le hizo un .open ;)
__________________
...___...
  #12 (permalink)  
Antiguo 09/02/2005, 14:09
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 9 meses
Puntos: 381
Pues no te puedo dar una respuesta muy técnica al respecto pero sí te lo puedo explicar asín en el idioma del pueblo ....

Un DSN (Data Source Name) es un identificador que se le asigna a tu base de datos que conoce el sistema. Contiene la información del driver a usar, la ubicación de la bd y no sé si algo más. Así puedes realizar la conexión a la bd por un simple nombre. Si usas un servidor local debes hacerlo desde el panel de control en orígenes de datos (ODBC). Seguro debe haber info a patadas por los foros.

Respecto al error, debe de ser que en el momento en el que le pides que cierre el objeto yá se encuentra cerrado. Debe de haber alguna línea anterior que lo hace
  #13 (permalink)  
Antiguo 09/02/2005, 14:10
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 7 meses
Puntos: 0
sacale esto al codigo... <div align="center">Registro Insertado</div> (porque no es ASP)
y ponlo antes de cerrar el body

%>
<div align="center">Registro Insertado</div>
</body>
</html>


ahora cada vez que insertes te deberia decir REGISTRO INSERTADO, o cambialo por lo que tu quieras...
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #14 (permalink)  
Antiguo 09/02/2005, 14:13
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 9 meses
Puntos: 381
Cita:
Iniciado por Al Zuwaga
A mi me parece que es porque nunca hiciste un rs.OPEN... osea, no podés hacer un .close a algo que nunca se le hizo un .open ;)
oño pues es verdá, no me había fijado en el detalle

... y la de gente que ha respondido mientras escribía

Cita:
Como dijo aquél...

¡¡¡¡¡¡¡¡¡¡¡ K'pla !!!!!!!!!!
K`pla!! lo celebramos con raktajino o con vino de sangre??
  #15 (permalink)  
Antiguo 09/02/2005, 14:52
 
Fecha de Ingreso: octubre-2003
Mensajes: 42
Antigüedad: 20 años, 7 meses
Puntos: 0
yo veo que te faltan unas %>

EJ
<HTML>
<HEAD>
<TITLE>Insertar.asp</TITLE>
</HEAD>
<BODY>
<%
'Recogemos los valores del formulario
codigo=Request.Form("codigo")
nombre=Request.Form("nombre")
apellidos=Request.Form("apellidos")
'Instanciamos y abrimos nuestro objeto conexion
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../data/base.mdb"))
'Ahora creamos la sentencia SQL
sSQL="Insert Into registro (codigo,nombre,apellidos) values ('" & codigo & "','" & nombre & "','" & apellidos & "')"
'Ejecutamos la orden
set RS = conn.Execute(sSQL) %> <------------- AQUI
<div align="center">Registro Insertado</div>
AQUI-----------------> <% 'Cerramos el sistema de conexion
rs.close
%>
</BODY>
</HTML>
__________________
RAL
-----
http://www.raldesign.cl
  #16 (permalink)  
Antiguo 10/02/2005, 03:59
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
OK, ya veo que para lo de escribir registro insertado faltaba "sacarlo" del código ASP, muchas gracias again a tol mundo.
  #17 (permalink)  
Antiguo 10/02/2005, 10:29
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
¿Cómo puedo presentar los datos insertados desde el formulario? Algo así como: (los tomaría desde el formulario, ya que es este mismo asp el que los inserta en la BD)

YA QUE LO HE LOGRADO, LO PONGO PARA EL BIEN COMÚN Y USO GENERAL. EL ASP QUEDA ASÍ:

<HTML>
<HEAD>
<TITLE>Insertar.asp</TITLE>
</HEAD>
<BODY>
<%
'Recogemos los valores del formulario
codigo=Request.Form("codigo")
nombre=Request.Form("nombre")
apellidos=Request.Form("apellidos")
'Instanciamos y abrimos nuestro objeto conexion
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../data/SISTEMA.mdb"))
'Ahora creamos la sentencia SQL
sSQL="Insert Into registro (codigo,nombre,apellidos) values ('" & codigo & "','" & nombre & "','" & apellidos & "')"
'Ejecutamos la orden
set RS = conn.Execute(sSQL)
'hago un response.write para escribir en pantalla en html
Response.Write "<html><head></head><body><table border='1' width='100%'><tr><td width='50%'>El Código</td><td width='50%'>" & codigo & "</td></tr><tr><td width='50%'>El Nombre</td><td width='50%'>" & nombre & "</td></tr><tr><td width='50%'>Los Apellidos</td><td width='50%'>" & apellidos & "</td></tr></table></body></html>"

'volvemos a ASP y cerramos el sistema de conexion
set conn = nothing
%>
</BODY>
</HTML>


Última edición por ludovico2000; 10/02/2005 a las 10:35 Razón: SOLUCIONADO
  #18 (permalink)  
Antiguo 10/02/2005, 10:41
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 7 meses
Puntos: 0
yo que tu los recogeria de la BD, asi me aseguro que esta insertado y correctamente.
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #19 (permalink)  
Antiguo 10/02/2005, 13:24
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
ya, pero para eso tendría que hacerlo en un segundo paso ¿no? ¿o se puede hacer en el mismo asp?
  #20 (permalink)  
Antiguo 10/02/2005, 14:54
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 7 meses
Puntos: 0
Lo puedes hacer ahi mismo...

despues del conn.execute...

conn.close

Set conn = Server.CreateObject("ADODB.Connection")
set Rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../data/SISTEMA.mdb"))

sSQL=" Select top 1 * from registro order by id desc"
Rs.Open sSQL, 3,3
'No tienes para que escribir todo el codigo dentro de el codigo ASP, lo cierro...
%>
<p> <%=rs("codigo")%></p>
<p> <%=rs("Nombre")%></p>
<p> <%=rs("Apellidos")%></p>

<%
'si no colocas esto igual deberia funcionar
rs.close
Conn = Nothing

%>

bueno el arte de HTML es tuyo... slds.
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #21 (permalink)  
Antiguo 11/02/2005, 09:05
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
Pregunta

¿Y no podría...


sSQL=" Select " & codigo & " * from registro"


Lo digo porque el sistema de codigos no es 1,2,3,4, sino alfanuméricos que no son correlativos, y según tu ejemplo, entiendo que el select rescataría el valor de mayor código. ¿Como lo he puesto yo tomaría el valor "código" del que se acaba de insertar desde el formulario? La definición
codigo=Request.Form("codigo")
sigue vigente, ¿no?

P.S.: Einstein debió inspirarse en mí cuando dijo eso "no dejar de hacerse preguntas", empiezo a sentir cómo subo puntos en el ranking de "tío más paliza del foro"

Muchas gracias
  #22 (permalink)  
Antiguo 11/02/2005, 10:34
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola, Me meto otra vez...

la sentencia para recoger ese registro deberia ser:

sSql="SELECT * FROM registro WHERE codigo='" & trim(codigo) & "'"

saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #23 (permalink)  
Antiguo 11/02/2005, 11:28
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
Gracias, una preguntilla... ¿trim? ¿por qué "trim"?
  #24 (permalink)  
Antiguo 11/02/2005, 14:02
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 10 meses
Puntos: 0
hola, solo por si acaso hay espacios en blanco, mas que nada es costumbre.

saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #25 (permalink)  
Antiguo 12/02/2005, 00:08
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 7 meses
Puntos: 0
sorry Claray y que te asegura el Trim, que pasa si hay espacios en blanco.... los rellena??
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:06.