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

Manejo de error al grabar

Estas en el tema de Manejo de error al grabar en el foro de ASP Clásico en Foros del Web. Utilizo tecnología ASP y javascript tanto en el cliente como en el servidor. Cuando quiero grabar un registro nuevo y encuentra que lo va a ...
  #1 (permalink)  
Antiguo 09/09/2003, 15:34
 
Fecha de Ingreso: mayo-2002
Ubicación: Mar del Plata - Argentina
Mensajes: 21
Antigüedad: 22 años, 10 meses
Puntos: 0
Manejo de error al grabar

Utilizo tecnología ASP y javascript tanto en el cliente como en el servidor.
Cuando quiero grabar un registro nuevo y encuentra que lo va a duplicar me da error en Rs8.Update().
Como utilizo el objeto error para que me avise cuando va a grabar que ese registro ya existe. Y no me corte el programa, enviandome una página de error.
En resumen quiero manejar yo las acciones cuando se produce un error de este tipo.
Parte del código es el siguiente:

----inicio del código
var Rs8 = Server.CreateObject("ADODB.Recordset");
Rs8.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " + Server.MapPath('Datos/bdseadpi.mdb');
Rs8.Source = "SELECT * FROM Revisiones";
Rs8.CursorType = 1;
Rs8.CursorLocation = 2;
Rs8.LockType = 3;
Rs8.Open();

Rs8.AddNew();
Rs8.Fields.Item('Cod_Inst').Value = Inst;
Rs8.Fields.Item('Cod_Car').Value = Car;
Rs8.Fields.Item('Cod_Mat').Value = Mat;
Rs8.Fields.Item('Cod_Tarea').Value = Tarea;
Rs8.Fields.Item('Cod_Alu').Value = Alu;
Rs8.Fields.Item('Cod_Edicion').Value = Edi;
Rs8.Fields.Item('Fecha_Revisión').Value = fechahoy;
Rs8.Fields("Nota_Act").value=Request.Form("Nota");
Rs8.Fields("Resultado_Act").value=Request.Form("Re sultado");
Rs8.Fields("Obs_Act").value=Request.Form("Observa" );
Rs8.Fields("Nota_Ori").value=Nota_Ori;
Rs8.Fields("Resultado_Ori").value=Resultado_Ori;
Rs8.Fields("Obs_Ori").value=Obser_Ori;
Rs8.Fields("Motivo").value=Request.Form("Motivo");

Rs8.Update();
if (Rs8.Error)
{
Rs8.Close();
Rs8.ActiveConnection.Close();
Response.Redirect("Aviso1.asp?MENSA=Error al grabar");
}

Rs8.Close();
Rs8.ActiveConnection.Close();

---fin del código

Lo que esta en rojo no surte efecto
__________________
Cesar51
  #2 (permalink)  
Antiguo 09/09/2003, 16:08
 
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 87
Antigüedad: 22 años, 4 meses
Puntos: 0
no soy experto en asp, pero segun lo que veo estas usando codigo de javascript dentro del codigo asp...

segun creo, deberi ser algo asi...

if (Rs8.Error) then
Rs8.Close();
Rs8.ActiveConnection.Close();
Response.Redirect("Aviso1.asp?MENSA=Error al grabar");
end if

seria mi super aporte... espero que sea algo asi...
__________________
Gigio
  #3 (permalink)  
Antiguo 09/09/2003, 18:43
 
Fecha de Ingreso: mayo-2002
Ubicación: Mar del Plata - Argentina
Mensajes: 21
Antigüedad: 22 años, 10 meses
Puntos: 0
Gracias gigio

La sintaxis que está en rojo es correcta. La tengo probada.
Pero cuando existe la duplicación no llega a ejecutarse. Por eso digo que no surte efecto. No hay error de sintaxis.
El tema igual lo tengo resuelto en forma práctica. Lo que hago es leer puntualmente el registro mediante la clausula Where, filtrando el registro en cuestión. Si el recordset es EOF significa que no existe y puedo dar un alta. Si no es EOF aviso que ya existe.
Pero tiene que existir alguna forma mediante la utilización del objeto error para manejar las acciones posteriori de producirse el error.
En la mayoría de los lenguajes de programación luego de utilizar las sentencias de manejo de archivos, uno puede preguntar si fué con exito o que tipo de error se produjo. Para eso los errores de acuerdo a cada lenguaje responden a un código determinado.

De algunos manuales tengo ejemplos en Visualscript. Pero están referidos a cuando hace la conexion con la base. Y nó cuando va a grabar algún recorset.

Gracias igual por tu atención....
__________________
Cesar51
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 18:45.