Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2005
JavierO JavierO is offline
Miembro
 
Registrado: jul 2005
Ubicación: Pachuca, Hidalgo, México
Posts: 38
Poder: 0
JavierO Va por buen camino
Question Manejo de errores en un procedimiento

Hola a todos:

Mi situación es la siguiente, como puedo capturar el error que genera un procedimiento, este es el codigo que estoy generando

procedure Tpr0002.PERIODO_ACTIVO (pw_plan_clave, pw_tipo :string;
var pw_anio, pw_numero :integer; pw_error :variant);
begin
pw_error := NULL;
try
Q_Consulta.Close;
Q_Consulta.SQL.Clear;
Q_Consulta.SQL.Add(' SELECT cipl_anio AS pw_anio, MIN(cipla_numero) AS pw_numero ');
Q_Consulta.SQL.Add(' FROM sil_cierres_planta ');
Q_Consulta.SQL.Add(' WHERE cipl_plan_clave = w_plan_clave ');
Q_Consulta.SQL.Add(' AND cipl_tipo = w_tipo ');
Q_Consulta.SQL.Add(' AND cipl_estatus = ''A'' ');
Q_Consulta.SQL.Add(' AND cipl_anio = (SELECT MIN(cipl_anio) ');
Q_Consulta.SQL.Add(' FROM sil_cierres_planta ');
Q_Consulta.SQL.Add(' WHERE cipl_plan_clave = w_plan_clave ');
Q_Consulta.SQL.Add(' AND cipl_tipo = w_tipo ');
Q_Consulta.SQL.Add(' AND cipl_estatus = ''A'') ');
Q_Consulta.SQL.Add(' GROUP BY cipl_anio ');
Q_Consulta.ParamByName('pw_plan_clave').Value := pw_plan_clave;
Q_Consulta.ParamByName('pw_tipo').Value := pw_tipo;
Q_Consulta.Open;
pw_anio := Q_Consulta.FieldValues['pw_anio'];
pw_numero := Q_Consulta.FieldValues['pw_numero'];
Q_Consulta.Close;
except
pw_error := 'Se produjo un error';
on E: Exception do
begin
pw_error := E.Message;
if (E is EDBEngineError) then
with EDBEngineError(E).Errors[0] do
pw_error := ErrorCode;
end;
end;
end;


lo que necesito es atrapar el error si es que hubiese en la variable pw_error pero no me asigna nada, ya probe pasandole directamente el mensage, utilizando el EDBEngineError, pero cuando sale del excep la variavle sale sin asignación, alguien tendra alguna sugerencia de como puedo hacerle para obtener ese dato y posteriormente utilizarlo

gracias de antemano
Responder Con Cita
  #2  
Antiguo 23-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Es de suponer que tengas declarada una variable global cuyo identificador es "pw_error" y su tipo "Variant". Pues bien, cuando pasas dicha variable al procedimiento que nos ocupa lo haces por valor y no por referencia. De este modo, cualquier cambio en la variable "pw_error" dentro del procedimiento quedará en el propio procedimiento, es decir, la variable "pw_error" no cambiará su contenido original.

Prueba a pasar por referencia la misma variable "pw_error", es decir, añade en el procedimiento (tanto en su declaración como en la implementación del mismo), antes del identificador de la variable la palabra reservada "var". Así, cualquier cambio que se llevara a cabo en la variable "pw_error" dentro del procedimiento afectaría a la propia variable "pw_error", quiere decirse que conseguirías lo que pretendes.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 23-08-2005
JavierO JavierO is offline
Miembro
 
Registrado: jul 2005
Ubicación: Pachuca, Hidalgo, México
Posts: 38
Poder: 0
JavierO Va por buen camino
Gracia David por dedicar tiempo a responder a mi duda.

lo que quiero aclarar es que ya tiene un "var" en la declaracion,.... debo ponerle otro?
Responder Con Cita
  #4  
Antiguo 24-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Echa un vistazo a la cabecera del procedimiento:

Código Delphi [-]
procedure Tpr0002.PERIODO_ACTIVO (pw_plan_clave, pw_tipo: string;
   var pw_anio, pw_numero: integer; pw_error: variant);
Las variables que pasas por referencia son "pw_anio"y "pw_numero", de tipo integer las dos. Pero, "pw_error" no se pasa por referencia. Tendrás que añadir la palabra reservada "var" antes del identificador de la variable, tal que así:

Código Delphi [-]
 procedure Tpr0002.PERIODO_ACTIVO (pw_plan_clave, pw_tipo: string;
   var pw_anio, pw_numero: integer; var pw_error: variant);
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 24-08-2005
JavierO JavierO is offline
Miembro
 
Registrado: jul 2005
Ubicación: Pachuca, Hidalgo, México
Posts: 38
Poder: 0
JavierO Va por buen camino
Muchas gracias David, lo hice como me indicaste y ya tengo el error.

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:34:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi