Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 19-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Vale, mirando un poco más, el error que se produce es de tipo EDatabaseError

Recordemos que EDBEngineError hereda de EDatabaseError, pero al estar en delphi puesto como Requerido, el error que salta es de tipo EDatabaseError a secas.

Para que se produzca el EDBEngineError, hay que poner el campo requerido en el Database Desktop, y quitar el requerido en delphi.

Creo que ahora me he explicado mejor. (o eso espero )

Y.... ahora si sale.


Todo esto se puede comprobar poniendo un BreakPoint en la linea:
Código Delphi [-]
 if (E is EDBEngineError) then
   begin
     form1.label4.Caption := IntToStr(EDBEngineError(e).Errors[0].Errorcode);
      if EDBEngineError(e).Errors[0].ErrorCode = 9732 then
      begin
        ShowMessage(' Campo Requerido');
        Action := daAbort;
      end
   end
  else if (E is EDatabaseError) then
    ShowMessage('database error');
Y modificando en Delphi las propiedades Required de ambos campos.

otro saludo de nuevo.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #22  
Antiguo 19-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias marcoszorrilla por la paciencia y la extensión... quizas me haya expresado mal pero no he encontrado la solución y de hecho en cuanto sepa que paso (como en todos los hilos que inicie) lo publicaré
Cita:
Empezado por Lepe
Todo esto se puede comprobar poniendo un BreakPoint en la linea:
Gracias Lepe... todo lo básico no tengo problemas... el problema es que por más que ponga un break ni siquiera entra a ese evento... (ponga o no el break... como dije en los anteriores es como si el evento no existiera), cuando se produce el error el cursor se "para" en la línea que hago el ShowModal del formulario que quiero capturar el error.
por ejemplo
Código Delphi [-]
procedure TdmTablas.tblBibliotecaPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
   if (E is EDBEngineError) then
    frmBiblioteca.label4.Caption := IntToStr(EDBEngineError(e).Errors 0].Errorcode); //aqui pongo el breac 
end;
///////////////////
procedure TfrmNivelUno.Biblioteca1Click(Sender: TObject);
begin
 frmBiblioteca := TfrmBiblioteca.Create(Application);
 try
  frmBiblioteca.ShowModal; // aqui se posiciona el cursor cuando da error
 finally
  frmBiblioteca.Free;
 end;
end;
Ahora estará mas claro
Debe haber "algo en delphi" que me anule ese evento y por lo tanto no pueda capturar el error.-
Los errores que intento capturar son varios, fecha, campo requerido, key violation, formato hora, y algún otro por lo que estoy probando con todas esas alternativas
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.

Última edición por Pablo Carlos fecha: 20-04-2005 a las 01:31:30. Razón: sigo recordando
Responder Con Cita
  #23  
Antiguo 20-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino

Señores... cuando el campo es requerido en el desktop (asi lo tenía) en delphi debe estar en "false" aunque cuando lo traes mediante el table se pone requerido = true (es lógico) se debe pasar a false... ya probe de esa manera y funcionó.- (idea, consejo, estudio del Sr. Lepe) en cuanto a la fecha, aunque lo contemple el BDE con el número de error 10059, deberá tratarse en el evento onexit del dbedit.- (idea, consejo, estudio del Sr. marcoszorrilla) y a todos los que participaron de este hilo muuuuuchas gracias. Empezaré a "retocar mi aplicación"
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #24  
Antiguo 20-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Pablo Carlos
en cuanto a la fecha (...) deberá tratarse en el evento onexit del dbedit
No creo que esto te funcione. La validación de la fecha se hace antes de que se genere dicho evento.

// Saludos
Responder Con Cita
  #25  
Antiguo 20-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por Pablo Carlos
Señores... cuando el campo es requerido en el desktop (asi lo tenía) en delphi debe estar en "false" aunque cuando lo traes mediante el table se pone requerido = true (es lógico) se debe pasar a false...
En realidad depende de lo que quieras hacer. EDatabaseError, es una excepción más abstracta, que engloba tanto al BDE, como ADO, como otra tecnología de acceso a Bases de datos, así que podríamos tratar el error directamente para mostrar un mensaje general: " Por favor introduzca todos los campos marcados con asterisco"; y de un plumazo nos quitamos de problemas.

EDBEngineError es más concreto, de hecho, para el acceso a datos mediante BDE, por eso tenemos que hacer ese pequeño truco de quitar el "required en Delphi" ... o al menos eso deduzco yo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #26  
Antiguo 21-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias Roman... ya hare las pruebas para tratar de elegir el mejor evento...
Gracias Lepe y como si esto fuera poco "un postresito"
Lo que más me gusta de este Club es que además de no dejarte sólo es que no te "tiran" el código necesario (en muchos casos) sino que, además, hay una fundamentación, explican el por qué, y eso es muchisimo. En alguna oportunidad he dejado el código que creia correcto y listo, quizas por tiempo (muy tirano) o por comodidad. Prometo tomar el ejemplo de todos ustedes y en la medida que tenga el fundamento lo pondré.- Eso es todo, me despido con este antigüo versito infantil.-
"El club enseña, el club entretiene
y yo les digo contento,
hasta la clase que viene"
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #27  
Antiguo 21-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Pablo Carlos
ya hare las pruebas para tratar de elegir el mejor evento...
Lamento informarte que creo que no lo encontrarás.

Hasta donde he visto la situación es así: cuando intentas pasar el foco a otro control, Delphi genera el mensaje CM_EXIT. El DBEdit maneja este mensaje más o menos así:


Código:
  Validate;
  DoExit;
Es en Validate (el nombre no es exacto) donde se produce la excepción y no es sino hasta DoExit donde se llama al evento OnExit, pero en caso de una excepción nunca se llega a este procedimiento.

Antes de CM_EXIT lo que hay son eventos del DataLink asociado al DBEdit (que es interno) y del DataSource. Quizá pudieras usar este último pero no estoy seguro de que se adaptara a tus necesidades.

Lo que yo posiblemente haría es crear un descendiente de TDBEdit que, o bien redefina el método Validate (no recuerdo si es virtual o no) o bien que reimplemente el manejador del mensaje CM_EXIT.

// Saludos
Responder Con Cita
  #28  
Antiguo 24-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias Roman...
Cita:
Empezado por roman
Lamento informarte que creo que no lo encontrarás.
Tienes razon... (comprobado)
Cita:
Empezado por roman
Antes de CM_EXIT lo que hay son eventos del DataLink asociado al DBEdit (que es interno) y del DataSource. Quizá pudieras usar este último pero no estoy seguro de que se adaptara a tus necesidades.
Vuelves a tener razon
Cita:
Lo que yo posiblemente haría es crear un descendiente de TDBEdit
Creo que sería lo más saludable y terminaríamos el problema de raiz, me pondre en ello.-
Gracias por tus explicaciones.-
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
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 16:42:59.


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