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

Problema. Me inserta 2 veces el mismo registro

Estas en el tema de Problema. Me inserta 2 veces el mismo registro en el foro de ASP Clásico en Foros del Web. Buenos dias, he estado buscando por el foro algun comentario relacionado y encontre este. http://www.forosdelweb.com/showthrea...ertar+repetido Mi problema es exactamente el mismo, pero no encuentro solucion ...
  #1 (permalink)  
Antiguo 27/06/2005, 05:51
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 22 años
Puntos: 0
Problema. Me inserta 2 veces el mismo registro

Buenos dias,

he estado buscando por el foro algun comentario relacionado y encontre este.
http://www.forosdelweb.com/showthrea...ertar+repetido

Mi problema es exactamente el mismo, pero no encuentro solucion y en este tema tampoco esta resuelto. En algunas ocasiones, no siempre, inserta el registro 2 veces, como si tuviera un bucle, pero no hay ningun bucle.
El Id_proyecto es una variable que busca el ultimo valor en la tabla para sumarle 1 al añadir.
Quien me puede echar una mano. Les pongo el codigo.


En una pagina de funciones tengo este codigo:
Código:
function AddProject(nuevoproyecto, ID_Empresa, Descripcion, FechaInicio)
abre_conexion_admin

set rsproject=CreateObject("adodb.Recordset")

rsproject.open "Proyectos", dbcSuperConexion, 2, 3
  	rsproject.AddNew 
		rsproject.Fields("ID_Proyecto")= nuevoproyecto
   		rsproject.Fields("ID_Empresa")= ID_Empresa
		rsproject.Fields("Nombre_proyecto")= Descripcion
		rsproject.Fields("FechaInicio")= FechaInicio
		rsproject.update 
	rsproject.close
	set rsproject = nothing
		
	If Err then 
	response.write("Error de conexion" & err.description)
	Exit Function
    end if
	
	cierra_conexion 
	  
	AddProject = True
	
End Function
Y en la pagina "insertar" tengo este otro codigo:
Código:
<table width="90%"> <tr><td>
	
	<% 
	ID_Empresa = request.form("Empresa")
	Descripcion = request.form("Descripcion")
	FechaInicio = request.form("txtFechaDesde")
	nuevoproyecto = proyectoactual + 1

	if AddProject(nuevoproyecto, ID_Empresa, Descripcion, FechaInicio) = False then
		cadena_datos_incorrectos
	else
		response.Redirect "verproyecto.asp?busqueda=all"
	end if%>
				  
</td></tr></table>
Gracias.
  #2 (permalink)  
Antiguo 27/06/2005, 07:14
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 8 meses
Puntos: 18
es verdad, no se solucionó. lo único que se me ocurre es que pruebes a insertar el registro mediante SQL, con insert into...

Por cierto, me gusta tu manera de programar, es bastante parecida a la mía
una cosa, ya que has hecho una función para la conexión con la BD, porqué no haces otra para los recordsets?
  #3 (permalink)  
Antiguo 27/06/2005, 08:16
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 22 años
Puntos: 0
Intentare probar con un Insert into, la verdad es que es muy extraño.

Por otra parte, las funciones que uso las cogi de este mismo foro, algunas son magnificas para simplificar el codigo. A medida que programas te dan cuenta que merecen la pena. Al principio somos un poco chapuzas pero con el tiempo...
Gracias a los que las pensaron y compartieron con el resto.
  #4 (permalink)  
Antiguo 27/06/2005, 08:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 22 años
Puntos: 0
Buenas de nuevo,

acabo de probar con una sentencia insert into y tambien me ocurre lo mismo.
Por favor, alguien que pueda dedicarme unos minutillos y darme una solución.
  #5 (permalink)  
Antiguo 27/06/2005, 11:01
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 22 años
Puntos: 0
Algunas veces inserta el registro 2 veces.

Este es el codigo algo cambiado, pero sigue ocurriendo lo mismo.
Puede estar el problema en el tipo de cursor del recordset o el tipo de bloqueo. He probado de varias formas y tambien falla.
Lo raro es que no siempre lo hace. Unas veces mete 2 registros iguales, nunca mas de dos, y otras 1.

Funcion con ADDNEW:
Código:
function AddProject(ID_Empresa, Descripcion, FechaInicio)

    abre_conexion_Admin

	set rsproject=CreateObject("adodb.Recordset")

	rsproject.open "Proyectos", dbcSuperConexion, 2, 3, 2 
  		rsproject.MoveLast
  		nuevoproyecto = cInt(rsproject("ID_Proyecto") + 1)
		rsproject.AddNew 
			rsproject.Fields("ID_Proyecto")= nuevoproyecto
   			rsproject.Fields("ID_Empresa")= ID_Empresa
			rsproject.Fields("Nombre_proyecto")= Descripcion
			rsproject.Fields("FechaInicio")= FechaInicio
		rsproject.update 
	rsproject.close
	set rsproject = nothing
		
	If Err then 
	response.write("Error de conexion" & err.description)
	Exit Function
    end if
			  
	AddProject = True
	
	cierra_conexion
	
End Function
Funcion con INSERT INTO:
Código:
Function AddProject2(nuevoproyecto, ID_Empresa, Descripcion, FechaInicio)

    Dim cmd 
    Dim strSQL 
    Set cmd = CreateObject("ADODB.Command")

    strSQL = "INSERT INTO Proyectos (ID_Proyecto, ID_Empresa, Nombre_proyecto,  FechaInicio)"
    strSQL = strSQL & " VALUES"
    strSQL = strSQL & " (" & nuevoproyecto & ", " & ID_Empresa & ", '" & Descripcion & "', '" & FechaInicio & "')"

    cmd.CommandText = strSQL

    On Error Resume Next

    abre_conexion_admin
    If Err then Exit Function

    cmd.ActiveConnection = dbcSuperConexion

    cmd.Execute
    If Err then Exit Function

    AddProject2 = True
	
	cierra_conexion
    
End Function
Por favor, que alguien me saque de este lio.
  #6 (permalink)  
Antiguo 27/06/2005, 11:13
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Y estas seguro que solamente haces una llamada a esta funcion? para mi que el error es de logica, quizas alguna condicion que haga la llamada y despues venga alguna consecuencia y en la redireccion alguna otra llamada a esta misma funcion...pon un poco mas de codigo(resumido claro) en donde hagas tu proceso.

Ahora esta instruccion se me hace sospechosa:

If Err then Exit Function

Nunca la he probado asi, pero no estoy seguro que regres un booleano, trata cambiandola por:

If Err.number <> 0 then Exit Function

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 11:20.