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

Trabajo sobre Base de datos

Estas en el tema de Trabajo sobre Base de datos en el foro de ASP Clásico en Foros del Web. Hola a todos! Soy nuevo en el foro y un autentico novato en esto de ASP. Estoy en una empresa haciendo practicas como programador, y ...
  #1 (permalink)  
Antiguo 01/12/2008, 11:06
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Trabajo sobre Base de datos

Hola a todos!

Soy nuevo en el foro y un autentico novato en esto de ASP. Estoy en una empresa haciendo practicas como programador, y precisamente aquí trabajan con ASP 3. Es la primera vez que programo en este lenguaje y me estoy leyendo un manual bastante completo, pero me han mandado un trabajito que me esta tocando las narices un poco.

Resulta que tengo que hacer una web en ASP 3 que lleve el mantenimiento de una base de datos Access, la cual tiene informacion de los clientes de la empresa. La base de datos ya la tengo creada, solo tiene una tabla (Clientes) que contiene los campos para almacenar los datos de los clientes.

La pagina debe recoger los datos del cliente mediante un formulario y meterlos en la base de datos cuando se pulse el boton "insertar". Ademñas de esto, tambien tiene que permitir mostrar el contenido de la base de datos, borrar un registro concreto y modificarlo.

He conseguido que la pagina se conecta a la BD, pero ahora el problema lo tengo en que no inserta los datos del formulario en la BD. Alguien me puede echar una mano con esto? La verdad es que ya estoy desesperado porque llevo dias sin que me salga nada y no encuentro ejemplos que se parezcan a lo que yo quiero en internet. Si alguien me puede orientar un poco o pasarme algun ejemplo parecido se lo agradecería.

Un saludo a todos y gracias de antemano ;)
  #2 (permalink)  
Antiguo 01/12/2008, 11:19
Avatar de GUAPOBEN  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico DF
Mensajes: 204
Antigüedad: 22 años, 5 meses
Puntos: 1
De acuerdo Respuesta: Trabajo sobre Base de datos

Espero te Sirva:

<%

Dim oConn,strSQL,rs,ultimo

Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("MiBase.mdb"))

strSQL = "insert into clientes (Nombre, Puesto, Telefono) values ('" & Request.Form("Nombre") & "','" & Request.Form("Puesto") & "','" & Request.Form("Telefono") & "')"
oConn.Execute(strSQL)

strSQL = "SELECT MAX(ID) FROM clientes"

Set rs = oConn.Execute(strSQL)
ultimo= rs.Fields(0)

rs.close
oConn.Close
set oConn = nothing

Response.Redirect("see.asp?ID="& ultimo &"")

%>

Te comento rapidamente lo que hace, cacha los datos de los campos te fu formulario previamente llenado en los Request.Form y los inserta a la base MiBase en la tabla clientes.

La Parte de -strSQL = "SELECT MAX(ID) FROM clientes"- lo que hace es una consulta para arrojarte el ID del ultimo registro insertado.

El -Response.Redirect("see.asp?ID="& ultimo &"")- te direcciona a una pagina la cual debera de cachar el ID del ultimo registro para mostrar los datos insertados.

Ahora bien el Response.Redirect tambien puede ser solo una pagina de Bienvenida o de gracias, de igual forma puedes elimiar que te arroje el ultimo registo insertado.

Por otro lado existe otras maneras de hacerlo, yo realizo de esta forma los inserts y tal vez no sea la mas adecuada pero para poder salir del paso creo que te funcionara.

Saludos cordiales.
__________________
Guapo Ben
Servidor y Amigo :adios:
  #3 (permalink)  
Antiguo 02/12/2008, 02:31
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Trabajo sobre Base de datos

Muchas gracias por tu ayuda GUAPOBEN :)

Voy a probar el codigo ahora a ver si de una vez consigo insertar algun registro en la BD. Te comento como tenía yo programada la pagina html del formulario y la pagina ASP que gestionaba la inserción:

Formulario en ".html":

<HTML>
<HEAD>
<TITLE>Gestion Clientes</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Insertar un cliente</h1>
<br>
<FORM METHOD="POST" ACTION="insertarasp.asp">
DNI<br>
<INPUT TYPE="TEXT" NAME="DNI"><br>
Nombre<br>
<INPUT TYPE="TEXT" NAME="Nombre"><br>
Apellidos<br>
<INPUT TYPE="TEXT" NAME="Apellidos"><br>
Direccion<br>
<INPUT TYPE="TEXT" NAME="Direccion"><br>
Teléfono<br>
<INPUT TYPE="TEXT" NAME="Telefono"><br>
Email<br>
<INPUT TYPE="TEXT" NAME="Email"><br>
Fax<br>
<INPUT TYPE="TEXT" NAME="Fax"><br>
<INPUT TYPE="SUBMIT" value="Insertar">
</FORM>
</div>
</BODY>
</HTML>


"insertar.asp":

<%@LANGUAGE="VBSCRIPT"%>
<%Option Explicit%>
<html>
<head>
<title>Procesar Datos</title>
</head>

<body>
<%
'Se recogen los datos del formulario

DNI=Request.Form("DNI")
Nombre=Request.Form("Nombre")
Apellidos=Request.Form("Apellidos")
Direccion=Request.Form("Direccion")
Telefono=Request.Form("Telefono")
Email=Request.Form("Email")
Fax=Request.Form("Fax")

'Declaro el objeto de conexion y abro la base de datos
Dim Conex
Set Conex = Server.CreateObject("ADODB.Connection")
Conex.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("C:\WebClientes\Clientes.mdb"))

'Creo la sentencia SQL
sSQL="Insert Into Clientes (DNI,Nombre,Apellidos,Direccion,Telefono,Email,Fax ) values ('" & DNI & "','" & Nombre & "','" & Apellidos & "','" & Direccion & "','" & Telefono & "','" & Email & "','" & Fax & "')"

'Ejecuto la orden
Set RS=Conex.Execute(sSQL)

%>

<h1><div align="center">Cliente Insertado</div></h1>

<%
'Cierro la conexion
Conex.Close
%>
</body>
</html>

Esto simplemente se conecta a la base de datos, pero no consigue almacenar datos porque dice que los campos no están declarados :S Luego para borrar y listar el contenido tendre que hacer otras paginas para cada funcion, no?

Weno, voy a intentarlo. Salu2 y muchisimas gracias de nuevo, iré informando de como va el asunto ;)

Edit: He de decir que los campos del formulario son los mismos que los que hay en la base de datos :S

Última edición por Salamander; 02/12/2008 a las 02:32 Razón: BD
  #4 (permalink)  
Antiguo 02/12/2008, 10:12
Avatar de GUAPOBEN  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico DF
Mensajes: 204
Antigüedad: 22 años, 5 meses
Puntos: 1
Respuesta: Trabajo sobre Base de datos

Hola !.

Estaba viendo tu codigo y no le veo problema, la diferencia entre tu sentencia sql y la mia es que la mia cacha directo lo que envia tu formulario a diferencia que al tuya primero lo crea en variables y despues los agrega a la sentencia. pero no le veo fallas.

Por otro lado no es necesario que pongas la ruta completa (C:\WebClientes\Clientes.mdb) si esta dentro del mismo root con que le indiques que es a esa base es mas que suficiente.

para borrar y listar el contenido tendre que hacer otras paginas para cada funcion, no?

Pues si lo quieres si, yo en lo personal nunca he hecho alguna que tenga todas las funciones en una sola pagina pero se que se puede hacer. igual si eso te interesa solo seria cuestion que lo preguntes y alguno de los multiples sabios de este foro te respondera.

Y pues estamos al pendiente por si te puedo ayudar en algo mas.

Saludos.
__________________
Guapo Ben
Servidor y Amigo :adios:
  #5 (permalink)  
Antiguo 04/12/2008, 05:58
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Trabajo sobre Base de datos

Hola de nuevo!

Antes de nada, Muchas gracias por tu ayuda GUAPOBEN, gracias a tus consejos ya he conseguido que la pagina me inserte, borre clientes y muestre el contenido de la base de datos :) Solo que ahora vuelvo a tener un problemilla, y es que resulta que programando la ultima funcion que tiene que hacer la pagina (modificar datos de los clientes existentes en la BD) me sale el siguiente error en el IE:

Tipo de error:
Error de Microsoft VBScript en tiempo de ejecución (0x800A01A8)
Se requiere un objeto: 'Nombre'
/WebClientes/modificar1.asp, línea 34

A continuación pego el codigo de "modificar1.asp":

<%@LANGUAGE="VBSCRIPT"%>
<%Option Explicit%>
<html>
<head>
<title>Modificar Datos</title>
</head>

<body>
<div align="center"><h1>Modificar Datos de Cliente</h1>
<br>

<%
'Declaro y abro el objeto de conexion a la BD
Dim Conex, rs, strSQL
Set Conex = Server.CreateObject("ADODB.Connection")
Conex.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Clientes.mdb"))
%>

<Form method="post" action="modificar2.asp">
Nombre<br>
<%
'Creamos la sentencia SQL y la ejecutamos
strSQL="Select Nombre From Clientes Order by Nombre"
Set rs=Conex.Execute(strSQL)
%>

<select name="Nombre">
<%
'Generamos el menú desplegable
Do While Not rs.Eof
%>
<option><%rs=("Nombre")%></option>
<%
rs.MoveNext
Loop
%>
</select>
<br>
DNI<br>
<input type="text" value="DNI"><br>
Direccion<br>
<input type="text" value="Direccion"><br>
Telefono<br>
<input type="text" value="Telefono"><br>
Email<br>
<input type="text" value="Email"><br>
Fax<br>
<input type="text" value="Fax"><br>
<input type="submit" value="Modificar">
</Form>
</div>

</body>
</html>

La pagina lo que hace es mostrar todos los nombres de la BD en una lista desplegable y, al escoger el nombre, puedes modificar el resto de los datos del cliente. Lo he hecho con el nombre, a pesar de que la clave principal de la tabla es el DNI, porque suelo insertar en ella a personas que conozco pero con DNI falso xD puede tener algo que ver esto? Porque me parece muy raro que me salte ese error cuando el objeto Nombre no es un objeto en sí, sino un campo de la tabla de la BD... es decir, no tendría sentido declarar un objeto "Nombre" dentro de la pagina porque realmente no existe dentro de ella... no?

Bueno os dejo a los expertos que me asesoreis que sois los que sabeis xD de todas formas, me he dejado la vista en el monitor y no he encontrado ningun error de sintaxis ni nada... y la sentencia SQL parece que está bien...

Espero vuestra respuesta, y muchas gracias de antemano ;)

Salu2!
  #6 (permalink)  
Antiguo 04/12/2008, 08:01
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
Respuesta: Trabajo sobre Base de datos

Hola

El error lo tienes aquí

<option><%rs=("Nombre")%></option>

has de cambiarlo por

<option><%=rs("Nombre")%></option>

PD: Estaría bien que en la consulta dijeras si el orden es asc o desc

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #7 (permalink)  
Antiguo 04/12/2008, 09:29
Avatar de GUAPOBEN  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico DF
Mensajes: 204
Antigüedad: 22 años, 5 meses
Puntos: 1
De acuerdo Respuesta: Trabajo sobre Base de datos

Hola.

El Amigo Adler ya hiso favor de encontrar la falla en tu codigo, ahora solo aplicalo y cualquier cosa por aca andamos.

Saludos.
__________________
Guapo Ben
Servidor y Amigo :adios:
  #8 (permalink)  
Antiguo 04/12/2008, 09:40
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Trabajo sobre Base de datos

Nas!

Gracias a los dos, Adler y GUAPOBEN, sois unos cracks! la verdad es que era una tontería y no me daba cuenta jejeje Pero cambiandolo ya me funciona y puedo meter los datos en el formulario :)

Ahora bien, otro problema me ha surgido (que raro), y este basicamente no lo entiendo... me dice lo siguiente:

Tipo de error:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Controlador ODBC Microsoft Access] No coinciden los tipos de datos en la expresión de criterios.
/WebClientes/modificar2.asp, línea 18


Parece que hay un problema con la pagina que procesa los datos del formulario y los inserta en la BD (modificar1.asp contenia el formulario y modificar2.asp el codigo que procesa los datos), a continuacion os pego el codigo a ver que le veis de raro:

<%@LANGUAGE="VBSCRIPT"%>
<%Option Explicit%>
<html>
<head>
<title>Modificar Registro</title>
</head>

<body>
<%
'Declaro el objeto de conexion y abro la base de datos
Dim Conex, strSQL, rs
Set Conex = Server.CreateObject("ADODB.Connection")
Conex.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Clientes.mdb"))

'Creamos la sentencia SQL y la ejecutamos
strSQL="Update Clientes Set DNI='" & Request.Form("DNI") & "', Direccion='" & Request.Form("Direccion") & "', Telefono='" & Request.Form("Telefono") & "', Email='" & Request.Form("Email") & "', Fax='" & Request.Form("Fax") & "' Where Nombre='" & Request.Form("Nombre") & "'"

Set rs=Conex.Execute(strSQL)
%>

<h1><div align="center">Datos Modificados</div></h1>
<div align="center"><a href="leer.asp">Mostrar Contenido de la Base de Datos</a></div><br>
<div align="center"><a href="insertar.html">Insertar un nuevo Cliente</a></div><br>
<div align="center"><a href="borrar1.asp">Borrar un Cliente</a></div><br>
<div align="center"><a href="modificar1.asp">Modificar Datos de un Cliente</a></div><br>

<%
'Cerramos la conexion a la Base de Datos
Conex.Close
%>

</body>
</html>

Seguro que es una tontería como lo de <%rs= en vez de <%=rs xDD pero la verdad es que cuando me saltan estos errores en los que no entiendo lo que me dicen me pongo a temblar, ya que no se por donde meterle mano al codigo :S

Weno, esperando vuestras magnificas respuestas me despido, no sin antes daros de nuevo las gracias por ayduarme en este mundo todavía muy desconocido para mi... el del ASP.

Salu2!
  #9 (permalink)  
Antiguo 04/12/2008, 11:10
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Trabajo sobre Base de datos

Reenas!

Ya solucioné el problemilla xDD

Seguro que ya os disteis cuenta... en el formulario, el segundo atributo de los campos estaba mal. No era value="Nombre_del_campo" sino name="nombre_del_campo" jejeje Despues de trastear un poco en las dos paginas me di cuenta de que el error seguía estando en la primera, pues asignaba un valor para el campo que no se correspondía al tipo de datos de la BD... con razon me daba error!

Pero por lo menos estoy aprendiendo, y lo mas importante es que gracias a vuestra ayuda... HE TERMINADO LA WEB! xDD Ya me hace todo lo que me han especificado, ahora supongo que la tendré que adornar un poquito y eso, que todo blanco queda sosa XD

Mil gracias, GUAPOBEN y Adler, ahora mismo estoy muy feliz... esto de que te funcionen las cosas es gratificante jajaja!

Os iré informando de las novedades ;)

Salu2!
  #10 (permalink)  
Antiguo 04/12/2008, 12:24
Avatar de GUAPOBEN  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico DF
Mensajes: 204
Antigüedad: 22 años, 5 meses
Puntos: 1
De acuerdo Respuesta: Trabajo sobre Base de datos

Salamander.

Por mi parte no tenes nada que agradecer en lo que pueda ayudar lo hare con gusto, por otro lado me agrada el hecho de que vos allas resolvido el problema , en la mayoria de los casos solo asi se aprende, para finalizar gracias por llamarme Crack la verdad es que sos igual a vos.

Saludos cordiales.
__________________
Guapo Ben
Servidor y Amigo :adios:
  #11 (permalink)  
Antiguo 05/12/2008, 05:47
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
Respuesta: Trabajo sobre Base de datos

Hola Salamander

Esta actitud tuya es muy positiva. Me alegra que hayas logrado acabar tu primera web.
Por otro lado, estamos aquí para intentar ayudar en lo posible, así que en lo personal y supongo que hablando si se me permite en nombre de todos los demás no tienes nada que agradecer, puesto que yo también aprendo de los problemas que se plantean

Un saludo
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
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 14:05.