Verificacion de Keys al meter datos con ASP.

19/10/2004 - 23:11 por JimmySlam | Informe spam
Hola tengo una preguntilla.
Cómo hago para verificar datos antes de meter datos en una tabla?

Es decir quiero evitar que la página me de error diciendome ke hay una key
duplicada yblablabla.
Los datos los meto por un formulario y van a un asp, en ese asp kiero meter
la identificacion. Quiero que al ir a esa pagina ASP, ponga "su cliente ya
existe" (o algo asi) y no meta los datos en la BD.

Muchas Gracias.

Preguntas similare

Leer las respuestas

#6 Miguel Gonzalez
21/10/2004 - 09:20 | Informe spam
De nada Jaime! :-)

Si quieres comenzar a "pelearte" con el SQL, mírate esta página:

http://programacion.com/tutorial/sql/

Saludos!
Miguel



Jaime wrote:
Lo voy a intentar a ver que consigo.Pero escucha , yo los datos los meto por
record set.
Tengo que empezar a usar SQL que esto no puede ser...
Weno yo o hago y te cuento.


Muchas gracias por tu dedicacion de verdad!




"Miguel Gonzalez" escribió en el mensaje
news:%
Hola Jaime/Jimmy ;-)

Me parece que el código que adjuntas no es muy "operativo"...

Intentaré comentártelo:


dim conConexion, rs, campos
campos=0




La variable campos supongo que la utilizarás más adelante...


set conConexion=server.CreateObject("adodb.connection")
conConexion.Provider="Microsoft.Jet.OLEDB.4.0"
conConexion.Open Server.MapPath("clientes.mdb"),"Admin",""
set rs=server.CreateObject("adodb.recordset")




Esto de arriba "ok", salvo que no me parece recomendable que tengas la base
de datos en el mismo
directorio que la página asp (la base de datos podría descargarse desde
internet)


sql1="select" & Request.Form("ID") & " from cliente where dni = " &
Request.Form("ID")




Si en el valor "ID" que se recoge del "post" viene el "dni" a buscar la
sentencia sql1 debería ser:

<%
sql1 "select dni from cliente where dni = " & Request.Form("ID")
%>

O bien, si el valor del dni incluye letras, el sql debería encerrar el dato
entre comillas:

<%
sql1 "select dni from cliente where dni = '" & Request.Form("ID") & "'"
%>

Para ejecutar este sql debes abrir el objeto recordset "rs":

<%
rs.Open sql1, conConexion
%>

...y comprobar si devuelve registros (lo que indica que el usuario ya
existe):

<%
If rs.RecordCount = 1 Then
' Si devuelve un registro es que el usuario existe
' Cierro el recordset
rs.Close
' Y aviso de la circunstancia:
Response.Write("El usuario ya existe")
Else
' Si no devuelve nada es que el usuario no existe.
' Cierro el recordset
rs.Close
' Preparo el sql de inserción:
sql1 = "insert into cliente(dni) values(" & Request.Form("ID")
' Si el dni tiene letras, recuerda poner el dato "ID" entre comillas, con lo
que la sentencia sería:
sql1 = "insert into cliente(dni) values('" & Request.Form("ID") & "'"
' Se ejecuta el sql que inserta el nuevo usuario:
conConexion.Execute(sql1)
' Y aviso de la circunstancia
Response.Write("Se ha agregado un nuevo usuario")
End If
%>

sql2="select * from cliente,asociacion,proyecto"
rs.open "select * from cliente,asociacion,proyecto" ,conConexion,2,3,1




No entiendo este sql2, me parece que no está bien construido. Por otro lado,
si ya tienes la
sentencia almacenada en la variable "sql2" no hace falta que la repitas al
abrir el recordset y
basta con lo realices así: <%rs.Open sql2, conConexion%>

rs.execute(sql1)
If rs.RecordCount = 1 Then
error_=4
Else
error_=0
hot=0
End If

rs.execute(sql2)




Esto de arriba sobra, puesto que ya has comprobado lo del nuevo usuario y
has abierto un nuevo recordset


... y aki el programa sigue...




... Pues sigue

Recuerda también cerrar la conexion y destruir los objetos al final de la
página:

<%
Set rs = Nothing
conConexion.Close
Set conConexion = Nothing
%>

Saludos!
Miguel


Respuesta Responder a este mensaje
#7 Jaime
24/10/2004 - 20:23 | Informe spam
Nada, no funciona como dices. Mira te pongo el codigo. Esta como me dijiste
tu casi.
Deberia funcionar.

set conConexion=server.CreateObject("adodb.connection")
conConexion.Provider="Microsoft.Jet.OLEDB.4.0"
conConexion.Open Server.MapPath("clientes.mdb"),"Admin",""
set rs=server.CreateObject("adodb.recordset")

sql0= "select dni from cliente where dni = '" & Request.Form("ID") & "'"
rs.open sql0,conConexion,2,3,1

If rs.RecordCount = 1 Then
' Si devuelve un registro es que el usuario existe
' Cierro el recordset

rs.Close
' Y aviso de la circunstancia:
error_=4
Else
' Si no devuelve nada es que el usuario no existe.
' Cierro el recordset
rs.Close
error_=0

end if

if error_=0 then

date_hoy=Date()
dia_hoy=Mid(date_hoy,1,2)
mes_hoy=Mid(date_hoy,4,2)
anno_hoy=Mid(date_hoy,7,4)

codigoproyecto=cstr(dia_hoy & mes_hoy & anno_hoy & Mid(strID,1,2))
sql3= "insert into asociacion values ('" & strID & strIDL & "','" &
codigoproyecto & "',0)"
sql1= "insert into
cliente(dni,pass,nombre,apellidos,entidad,telefono,email,calle,tipovia,escalera,numero,piso,cp,localidad,provincia,pais,comentarios)
values('" & strID & strIDL & "','" & strPass & "','" & strNombre & "','" &
strApellidos & "','" & strEntidad & "','" & strTelefono & "','" & stremail &
"','" & strNombreV & "','" & T_via & "','" & strescalera & "'," & Intnum &
",'" & strpyl & "','" & strcp & "','" & strlocalidad & "','" & strprovincia&
"','" & strpais & "','No comentarios')"
sql2= "insert into
proyecto(codigo_proyecto,proyecto,fecha_inicio,tipo_proyecto) values ('"&
codigoproyecto & "','" & strTexto & "','" & date_hoy & "','" & strServicio &
"')"

' Se ejecuta el sql que inserta el nuevo usuario:
conConexion.Execute(sql3)
conConexion.Execute(sql1)
conConexion.Execute(sql2)
Set rs = Nothing
conConexion.Close
Set conConexion = Nothing


Me dice ke las claves estan repetidas cuando ejecuto: SQL3

Puedes ayudar???

GRACIAS pero estas chorradas le vuelven a uno loco.
Respuesta Responder a este mensaje
#8 Sashka
25/10/2004 - 00:29 | Informe spam
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Tu problema está en el recordcount... te devuelve -1 porque estas usando
cursosType=2 (adOpenDynamic) http://support.microsoft.com/kb/q194973/

Si usaras adOpenKeyset o adOpenStatic podrias hacer lo que quieres... pero
no se me hace eficiente estás abriendo un recordset que en realidad no
necesitas y si usas esos cursortype encima estarías abriendo un recordset
poco eficiente...
Te propongo lo siguiente comienza tu código (obviando la apertura del
recordset) en...

date_hoy=Date()
dia_hoy=Mid(date_hoy,1,2)
mes_hoy=Mid(date_hoy,4,2)
anno_hoy=Mid(date_hoy,7,4)
...
...
' Generas tus sql...
' Se ejecuta el sql que inserta el nuevo usuario:

ON ERROR RESUME NEXT
conConexion.Execute(sql3)
if err >0 then
' LA CLAVE YA EXISTE!!!
' Avisas de la circunstancia:
error_=4
err.clear
' lo que debas hacer
else
conConexion.Execute(sql1)
conConexion.Execute(sql2)
end if
conConexion.Close
Set conConexion = Nothing

Si no me equivoco... el error que debería dar es el -2147467259 (pruebalo
haciendo un response.write)

Sashka
MS MVP Access
MCP ASP.Net
Respuesta Responder a este mensaje
#9 Jaime
26/10/2004 - 09:33 | Informe spam
Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida