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

validar que un registro no esté duplicado antes de insertar datos

Estas en el tema de validar que un registro no esté duplicado antes de insertar datos en el foro de ASP Clásico en Foros del Web. Hola a todos, otra vez yo... Tengo un código que inserta los datos de un formulario perfectamente en la tabla, pero quiero que antes de ...
  #1 (permalink)  
Antiguo 29/10/2008, 04:09
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 17 años, 3 meses
Puntos: 0
validar que un registro no esté duplicado antes de insertar datos

Hola a todos, otra vez yo...

Tengo un código que inserta los datos de un formulario perfectamente en la tabla, pero quiero que antes de que inserte dichos datos, valide si un registro específico no esté duplicado en esa tabla, y si lo está informe de que no puede seguir el proceso por ese motivo.

El procedimiento es este:

- Declaración de variables
- definición de variables

sql = "insert into .....
conn.execute sql
------------------------------------------------------------------------------------------
hasta allí todo bien, ahora intentando validar ese campo he tratado de hacer esto:

dim existe, todas las demás variables

existe = false
todas las demás variables = request.form("todas las demás variables")

Set rs7=Server.CreateObject("ADODB.RecordSet")
Ssql="select * from tabla order by ref"
rs7.open Ssql,conn,1,2

rs7.MoveFirst
DO until existe OR rs7.EOF
if Request.Form("ref") = rs7("ref") then
existe = true
end if
rs7.MoveNext
Loop

if not existe then

sql = "insert into .....
conn.execute sql

end if
if existe then
Response.write ("La información introducida ya existe")
else
Response.write ("agregado")
end if

rs7.MoveFirst
%>
<%
Do until rs7.EOF
%>
<%
rs7.MoveNext
Loop

rs7.close
set rs7=nothing
conn.close
set conn=nothing

El resultado es que inserta perfectamente, no le importa si está repetido o no.

Gracias por la ayuda
  #2 (permalink)  
Antiguo 29/10/2008, 07:07
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: validar que un registro no esté duplicado antes de insertar datos

Hola

¿Has pensado en usar Ajax?

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;" />
  #3 (permalink)  
Antiguo 29/10/2008, 11:38
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 20 años, 6 meses
Puntos: 27
Respuesta: validar que un registro no esté duplicado antes de insertar datos

Cita:
Iniciado por Cameron_2006 Ver Mensaje
Hola a todos, otra vez yo...

Tengo un código que inserta los datos de un formulario perfectamente en la tabla, pero quiero que antes de que inserte dichos datos, valide si un registro específico no esté duplicado en esa tabla, y si lo está informe de que no puede seguir el proceso por ese motivo.

El procedimiento es este:

- Declaración de variables
- definición de variables

sql = "insert into .....
conn.execute sql
------------------------------------------------------------------------------------------
hasta allí todo bien, ahora intentando validar ese campo he tratado de hacer esto:

dim existe, todas las demás variables

existe = false
todas las demás variables = request.form("todas las demás variables")

Set rs7=Server.CreateObject("ADODB.RecordSet")
Ssql="select * from tabla order by ref"
rs7.open Ssql,conn,1,2

rs7.MoveFirst
DO until existe OR rs7.EOF
if Request.Form("ref") = rs7("ref") then
existe = true
end if
rs7.MoveNext
Loop

if not existe then

sql = "insert into .....
conn.execute sql

end if
if existe then
Response.write ("La información introducida ya existe")
else
Response.write ("agregado")
end if

rs7.MoveFirst
%>
<%
Do until rs7.EOF
%>
<%
rs7.MoveNext
Loop

rs7.close
set rs7=nothing
conn.close
set conn=nothing

El resultado es que inserta perfectamente, no le importa si está repetido o no.

Gracias por la ayuda
el planteamiento creo que es el incorrecto

por ejemplo

MiTabla
1 campo llamado NombrePersona

Formulario
Mando el nombre de la persona a insertar, pero no permitiré repetidos al insertar


+ recupero la variable
++ nombreainsertar = nombrepersona
+ select * from mitabla where nombre = '"& nombreainsertar &"'"
+ si trae registros existe
+ si no trae no existe y lo inserto

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
  #4 (permalink)  
Antiguo 29/10/2008, 15:18
Avatar de alberto_gc  
Fecha de Ingreso: septiembre-2008
Mensajes: 152
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: validar que un registro no esté duplicado antes de insertar datos

<%
Nombre = Request.Form("Nombre")

if Nombre = "" then Nombre = "Desconocido"

Dim oConn,strSQL

Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\mibase.mdb")


strSQL ="insert into tutabla (Nombre) values ('" & Request.Form("Nombre") & "',')"

oConn.Execute(strSQL)
oConn.Close
set oConn = nothing
%>

creo que mas o menos, es asi lo que quieres o bueno por lo que dijo el maestro.. suerte..
  #5 (permalink)  
Antiguo 30/10/2008, 06:08
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: validar que un registro no esté duplicado antes de insertar datos

alberto, me alegra que te animes a aportar ideas, pero en esta ocasión estas confundido. Según tu script, lo único que haces es insertar en la bd sin validar si ya esta ocupado ese "nick". De cualquier manera continua así

Con usar Ajax me refería a esto

formulario.html

Código:
<STYLE TYPE="text/css">
.vink {
font:11px verdana;
}

.vink a:link, .vink a:visited {
color: #ff6600;
text-decoration: none;
}

.vink a:hover, .vink a:active  {
color: #ff6600;
text-decoration: underline;
}

.capa {
background: #FFFFFF;
font: 1.1em lucida sans unicode;
color: #333333;
border:1px solid rgb(120,120,120);
width: 132px;
text-align: left;
padding-left: 6px;
padding-right: 6px;
padding-top: 2px;
padding-bottom: 2px;
position: absolute;
top: 30px;
left: 117px;
}
</STYLE>
<script language="javascript" type="text/javascript">
var ns4 = (document.layers)? true:false
var ie4 = (document.all)? true:false
var ns6 = (document.getElementById)? true:false

function captura_objeto(idnombre) {
    if (ns6)
    {
    return document.getElementById(idnombre);
    }
    else if (ie4)
    {
    return document.all[idnombre];
    }
    else if (ns4)
    {
    return document.layers[idnombre];
    }
    else
    {
    return null;
    }
}

function copiar(c) {
var obj = captura_objeto('txtHint')
    document.getElementById("txt1").value = c;
    if (obj.style.visibility == 'hidden')  obj.style.visibility= "visible";
            else obj.style.visibility= "hidden";
    }


var xmlHttp
function showHint(str) {
    if (str.length==0) { 
          document.getElementById("txtHint").innerHTML="";
         return;
      }
xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null) {
          alert ("Your browser does not support AJAX!");
          return;
      } 
var url="AJAXprueba.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
} 


function stateChanged() { 
    if (xmlHttp.readyState==4) { 
        document.getElementById("txtHint").innerHTML=xmlHttp.responseText;

var obj = captura_objeto('txtHint')
    if (obj.style.visibility == 'hidden')  obj.style.visibility= "visible";
    }
}


function GetXmlHttpObject() {
var xmlHttp=null;
    try
      {
  // Firefox, Opera 8.0+, Safari
      xmlHttp=new XMLHttpRequest();
      }
    catch (e)
      {
  // Internet Explorer
          try
            {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
          catch (e)
            {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
      }
    return xmlHttp;
}
</script> 
</head>
<body>
<form> 
Nombre Usuario:
<input type="text" id="txt1" onkeyup="showHint(this.value)" />
<div class="vink" style="margin:5px 0px 0px 10px"><div id="txtHint" class="capa" style="visibility:hidden;"><p></p></div></div> 
</form>
ajaxprueba.asp

Código asp:
Ver original
  1. <&#37;
  2. Dim SQL, rs, oConn
  3. Dim usuario
  4. usuario = Request.QueryString("q")
  5. set oConn = Server.CreateObject("ADODB.Connection")
  6. oConn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("./database.mdb")&";"
  7. SQL="Select nombre FROM usuarios WHERE nombre LIKE '"&usuario&"%'"
  8. set rs = oConn.Execute(SQL)
  9. if not rs.eof then
  10. Response.Write "ocupado"
  11. else
  12. Response.Write "libre"
  13. end if
  14. rs.Close
  15. set rs = nothing
  16. oConn.Close
  17. set oConn = nothing
  18. %>

Edita, cambia, etc.. para adaptarlo a tus necesidades

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;" />
  #6 (permalink)  
Antiguo 31/10/2008, 04:49
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: validar que un registro no esté duplicado antes de insertar datos

Gracias a todos por ayudarme en este caso, ya está solucionado. con esta función:


<% function Existe (NroRef)
dim sSql
dim RsK
dim Rpta
Rpta=False
set RsK=server.CreateObject("ADODB.RecordSet")
Ssql="select COUNT(*) from inmuebles where ref_inmueble='" & NroRef &"'"
rsK.open Ssql,conn,1,2
if not rsK.EOF then
if not isnull(RsK(0)) then
if cint(RsK(0))>0 then
Rpta=true
end if
end if
end if
Existe = Rpta
end function%>

La cual llame antes de insertar los datos, así:
if not Existe(ref_inmueble) then
  #7 (permalink)  
Antiguo 16/10/2011, 17:24
Avatar de mft
mft
 
Fecha de Ingreso: abril-2003
Ubicación: *
Mensajes: 239
Antigüedad: 21 años
Puntos: 4
Busqueda Respuesta: validar que un registro no esté duplicado antes de insertar datos

Hola, sé que el tema es un poco viejo, pero me ha servido de maravilla, sobre todo como lo hizo Adler.

El detalle aquí, si alguien tiene el mismo problema, es que deseo validar un registro con nombre , apellido paterno y apellido materno, todos se encuentran en campos diferentes. En el ejemplo, se valida solo un campo......en mi caso como puedo validar 3 campos diferentes que no se repitan en la base de datos?

Muchas gracias de antemano. Saluods!!
__________________
Lo que haces, determina lo que eres.
Saludos!
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 10:54.