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
  #1  
Antiguo 16-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
No entra al evento OnPostError

Hola gente... tengo este código...
Código Delphi [-]
procedure TdmTablas.tblBibliotecaPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 ShowMessage('Hola error');
end;
Al provocar un error en el post jamás sale mi saludito, es como que no existe ese evento...
Alguna sugerencia...
Gracias Pablo
__________________
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
  #2  
Antiguo 16-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues tiene que funcionar, lo que puede pasar es que estés haciendo la prueba en tiempo de diseño y entonces te saldrá antes el mensaje de Delphi, pero si pulsas Aceptar y luego F8 al final se verá tu mensaje.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 16-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 por responder
Cita:
Empezado por marcoszorrilla
Pues tiene que funcionar, lo que puede pasar es que estés haciendo la prueba en tiempo de diseño.-
Te comento que no funciona tanto dentro o fuera de delphi.- (corriendo normal o ejecutando desde delphi)
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
  #4  
Antiguo 16-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Lo cierto es que yo acabo de probarlo y si me funciona, lo que he hecho es duplicar un registro con un campo con clave única.

Primer erro:.......Key violation.
F8
Erroorr

Código Delphi [-]
 procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
   var Action: TDataAction);
 begin
 ShowMessage('Errooor.');
 end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 16-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
Cita:
Empezado por marcoszorrilla
Lo cierto es que yo acabo de probarlo y si me funciona, lo que he hecho es duplicar un registro con un campo con clave única.
Te comento, aunque parezca cosas de brujas, he creado una tabla nueva (paradox) con tres campos uno autoincremental, uno apellido y otro fecha.
En OnPostError de la tabla nueva pongo el ShowMessage y lleno mal el campo fecha (00/00/0000) y dentro o fuera de delphi no sale el mensaje
Gracias por responder tan rápido
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
  #6  
Antiguo 16-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
claro que no da error.

Al campo apellido, en el database desktop, marcale la casilla Required. Despues de eso, añade un registro, deja el apellido en blanco y dale a guardar. Ahora si sale el error.

El BDE solo mostrará los errores cuando:
- Un campo es requerido (lo dicho anteriormente)
- un campo en cuestion, tiene un índice único creado, y se repite el valor en 2 registros.
- La clave primaria de la tabla se repite. En tu caso, es un autoincremento, por tanto, jamás vas a tener problemas de clave primaria ...(salvo errores graves)

Para introducir una fecha correcta, tu aplicación debe tener un TdateTimePicker, por ejemplo, para validar que la fecha que se guarde, sea una correcta.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 16-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
bueno.... en realidad puede dar muchos más errores el BDE. El tema está en que el BDE debe entender si "debe lanzar un error o no", y para ello, se lo tienes que decir tú de alguna forma (indices únicos, requerir un campo, etc.)

Si no pones ninguna restricción, el BDE acepta barco como animal acuático

Un 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
  #8  
Antiguo 16-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
Hola Lepe... gracias por responder... te comento que me parece que si debería capturar el error de la fecha. Mira este código, es de la demo de delphi
Código Delphi [-]
const
  {Declare constants we're interested in}
  eKeyViol = 9729;
  eRequiredFieldMissing = 9732;
  eForeignKey = 9733;
  eDetailsExist = 9734;
  eFechaNoValidad = 10059;


implementation

{$R *.DFM}

procedure TDM.CustomerPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  if (E is EDBEngineError) then
    if (E as EDBEngineError).Errors[0].Errorcode = eFechaNoValida then
    begin
      MessageDlg('Fecha no valida.', mtWarning, [mbOK], 0);
      Abort;
    end;
 end;
A la Const le agrego el 10059 que corresponde a fecha no válida (y esto sacado de delphi, usando la demo, y tampoco me lo captura
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
  #9  
Antiguo 16-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
Hola... hice la prueba de ponerle campo requerido y tampoco sale el error, es como si mi OnPostError no existe, fallecio, crepo, colgo los tenis, se puso el sobretodo de madera, etc, etc...
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
  #10  
Antiguo 16-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
Será la versión de Windows... tengo 2000 prof
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
  #11  
Antiguo 17-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
Bue... este sigo aqui.
comento hice la siguiente prueba... puse un label en el form y en el evento OnPostError el siguiente código
Código Delphi [-]
  
if E is EDBEngineError then
   begin
     form1.label4.Caption := IntToStr((E as EDBEngineError).Errors[0].Errorcode);
Con esto verifico que si entra en el evento y no hay caso (se supone que la propiedad caption del label me daría el número de error)
Errores con que hice pruebas son dos -> 1.- fecha (le ingrese 00/00/0000) y 2.- un campo lo tengo como requerido -> no llene dicho campo y guarde.
En ningún caso el label me acuso el número de error.-
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
  #12  
Antiguo 17-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
El error en la fecha no es del BDE sino de la VCL, mira yo lo he traducido y recompilado.

Const.Pas
Código Delphi [-]
 unit Consts;
 
 interface
 
 resourcestring
   SOpenFileTitle = 'Open';
 ......
   //SMaskEditErr = 'Invalid input value.  Use escape key to abandon changes';
   SMaskEditErr = 'Valor incorrecto de entrada.  Pulse escape para abandonar
 .....

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #13  
Antiguo 17-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Alguna tontería estará pasando, porque eso debe fallar fijo.

Código Delphi [-]
if E is EDBEngineError then
   form1.label4.Caption := IntToStr((E as EDBEngineError).Errors[0].Errorcode)
else 
  raise;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 17-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 ya tenemos el tema de fecha lo hare en el evento exit del dbedit pero el BDE tiene al error $274B (10059) = Invalid Date.
Gracias Lepe seguramente debe ser una tontería pero llevo desde el jueves tratando esa tonteria . Hasta reinstale el delphi. Pero es muy raro que no entre al evento OnPostError. Debe estar faltando algo que no logro verlo.-
Gracias de todos modos
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
  #15  
Antiguo 17-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
Alli adjunto el prg de prueba para tratamiento de errores. si pueden verlo, les agradecería.- (no hay prolijidad ni nada sólo tire los componentes)
Gracias
__________________
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-09-2007 a las 02:53:54.
Responder Con Cita
  #16  
Antiguo 18-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Acabo de ejecutar tu programa y el fallo es el siguiente:

-El campo nombres debes indicar que es REQUERIDO en el Database Desktop, tu lo tienes en delphi, por tanto el error no lo controla el bde, sino delphi, y por tanto, los labels no se actualizan.

Basta con que lo hagas en el database desktop, para ver que ahora, efectivamente los labels si muestran el error 9732 en tu caso.
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(' fecha incorrecta');
        Action := daAbort;
      end;
   end
Con esta modificación, sacas tu mensaje y eliminas el propuesto por el BDE.

Por cierto, una vez modificado el campo en el Database desktop, vete a la tabla en delphi, borra el campo modificado y añadelo de nuevo para que actualice todas sus propiedades.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
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
Hola Lepe... aunque no lo creas sigue sin salir el error... de todos modos ya se ha extendido demasiado este hilo y bue... ya encontraré de que se trata.-
Te agradezco la molestia...
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
  #18  
Antiguo 19-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
El hilo puede y debe extenderse todo lo que seea necesario, por otra parte dices que ya encontraste el error, pues sería conveniente que lo publicaras para que todos aquellos que hayan seguido el hilo sepan cual fue la posible solución.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #19  
Antiguo 19-04-2005
Nelson Polanco Nelson Polanco is offline
Miembro
 
Registrado: abr 2005
Ubicación: Provincia Espaillat, Rep. Dom.
Posts: 15
Poder: 0
Nelson Polanco Va por buen camino
Hola, foristas Soy Nelson Polanco nuevo en este foro, me gusta buscar y compartir ideas.
Disculpenme, mi opinion es que el error si funciona, lo que pasa es que hay que provocar una excepcion que corresponda a este tipo de evento. Ejemplo Key_violation es un tipo de excepcion de EDatabaseError, por eso aparece. Verificas en la ayuda sobre EDatabaseError para ampliar. Suerte.
Responder Con Cita
  #20  
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
Subo el archivo modificado.

Modificaciones:

Hay un error, por defecto Delphi crea un componente Tsession, y tu tenias otro en el datamodule, modificabas 1 parametro del Session1 (el tuyo) y otro parámetro del Session (que crea delphi).

Por tanto la configuración no era correcta. La solución tomada es quitar el que tu pusiste y usar el que propone delphi.

Por otro lado, he puesto Requerido en el Database desktop el campo Nombres y el campo Apellidos, Pero en delphi, haciendo doble clic sobre la tabla le quito la propiedad REquired a ambos campos; ¿por qué? bueno, acabo de ver que si tienes en delphi el campo requerido, el error que se produce no lo controla el BDE, sino el propio delphi, por tanto tampoco se actualizan los campos.

Ahora no tengo tiempo para mirarlo más a fondo, pero el archivo adjunto furula muy bien.

Solo un detalle más. Yo he creado una carpeta en C:\PRUEBA y dentro está todo, las tablas y el proyecto, para que no difiera en tu ordenador, haz lo mismo.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 10-10-2007 a las 20:56:21.
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 01:33:50.


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