Problemas ASP
Siempre pasa algo que no logro solucionar, y eso que parece sencillo.
Tengo un formulario para añadir un nombre de usuario a una base de datos para posteriormente conectarse. El caso es que quiero que si ya existe este nombre que no me deje insertarlo, yo probé con esto:
If susuario=rs.Fields("Usuario") then
Response.Write ("Este e-mail ya está registrado")
Pero no me funciona, os pongo todo el código resumido por si véis algo:
<%
Dim susuario
Dim oConn, rs, SQL, iCuantos, iRegistro
susuario = Trim(Request.Form("usuario"))
set oConn = Server.CreateObject("ADODB.Connection")
set rs = Server.CreateObject("ADODB.Recordset")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("base.mdb")
SQL="SELECT * FROM Tabla ORDER BY Id"
rs.Open SQL, oConn, 1, 2
If susuario=rs.Fields("Usuario") then
Response.Write ("Este e-mail ya está registrado")
else
rs.AddNew
rs.Fields("Usuario")=sUsuario
rs.Update
End if
rs.Close
set rs = nothing
oConn.Close
set oConn = nothing
%>
meddle
yo cambiaria la select para que devolviera solo el usuario con ese email, luego chequearia que la query tiene 1 resultado (existe el email) y si no es asi lo añadiria. ademas, la select no te hace falta que sea SELECT * porque ya es suficientemente lento Access como para cargarlo de mas. Puedes poner SELECT usuario
leisdesign
Es que en realidad añade muchos más datos aparte del usuario, he puesto sólo usuario para resumir y que lo veáis mejor. Por eso es necesario el select *.
cuboo
En realidad no importa los datos que tengas que añadir, eso no lo haces con la sentencia sql, así que no hay problema en hacerlo como dice meddle, que es lo mas recomendable.
Así como lo haces ahora la consulta te retorna mas de un resultado y tienes que ir uno a uno comprobando que los nombres no coincidan.
Si haces algo asi como SELECT count(usuario) from tabla WHERE usuario like 'tu_nombre_de_usuario' en el rs(0) tendras 0 si no existe el usuario o un número > 0 si ya existe.
Para añadir los datos lo haces con el rs.AddNew, asi que no importa la sentencia sql.
Juanma
Así es, tu cadena de busqueda coincidirá siempre con todos los usuarios por lo que rs("usuario") siempre correspondera al primer registro de la base de datos.
leisdesign
Probaré probaré, aunque no controla mucho, lo intentaré. Gracias.
leisdesign
AAAAAAAAAAAAAAAaaaay, que dificil es programar!!!
He probado lo del count y todo lo que me habéis dicho y no hay manera, la última que he probado es do while en vez de if y tampoco.
No hay ningún método más sencillo?
<%
Dim susuario
Dim oConn, rs, SQL
susuario = Trim(Request.Form("usuario"))
set oConn = Server.CreateObject("ADODB.Connection")
set rs = Server.CreateObject("ADODB.Recordset")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("base.mdb")
SQL="SELECT usuario FROM Tabla ORDER BY Id"
rs.Open SQL, oConn, 1, 2
Do while rsUsuario.EOF
Response.Write ("Este e-mail ya está registrado")
rs.Next
Loop
rs.AddNew
rs.Fields("Usuario")=sUsuario
rs.Update
rs.Close
set rs = nothing
oConn.Close
set oConn = nothing
%>
meddle
prueba
SQL="SELECT usuario,Id FROM Tabla ORDER BY Id"
y luego
Do while rs.EOF
el santo
caray... no es muy dificil.
a mi ver, es mucho mas sencillo si el select busca directamente el usuario que estas tratado de dar de alta, si lo encuentra, entonces el alta no se realiza, si no lo encuentra entonces si... creo q no hay metodo mas sencillo q este...
el codigo quedaria asi...
teoricamente debe funcionar, pruebalo.
<%
Dim susuario
Dim oConn, rs, SQL
susuario = Trim(Request.Form("usuario"))
set oConn = Server.CreateObject("ADODB.Connection")
set rs = Server.CreateObject("ADODB.Recordset")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("base.mdb")
SQL="SELECT usuario FROM Tabla where usuario='" & susuario & "'"
rs.Open SQL, oConn, 1, 2
if not rs.EOF then
Response.Write ("Este e-mail ya está registrado")
else
rs.AddNew
rs.Fields("Usuario")=sUsuario
rs.Update
rs.Close
end if
set rs = nothing
oConn.Close
set oConn = nothing
%>