Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-04-2005
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Angry OnValidate .. No funciona en IB?

Hola amigos:

Leed el siguiente fragmento :

procedure TFichaProveedores.IBProveedoresCCODPROVValidate (Sender : TField);
Var s: String;
begin
// Primero formateo el string para que añada ceros a la izquierda en caso
// de ser inferior a 6 caracteres numéricos.

s:= Format ('%.*d',[6,Strtoint(Sender.AsString)]);

With IBSQLExisteProv do //IBSQL con un Select y el parámetro PROVEEDOR
begin
ParamByName('PROVEEDOR').AsString:= S;
ExecQuery;
If RecordCount > 0 then
DataBaseError ('Código de Proveedor Duplicado') ;
close;
end;
end;

Pues bien : Este método de validación debería mostrar el mensaje de error cuando en la base exista el código duplicado. He comprobado que el IBSQL funciona correctamente, es decir : RecordCount ha llegado a tener valor 1. El problema sobreviene en la ejecución de la excepción, pues ni aparece ningún mensaje de error ni me permite seguir capturando otros datos en la ficha. Por otra parte el estado de inserción de la tabla permanece durante todo el proceso.

¿Puede ser un bug de los IBX?

Gracias de antemano.

Utilizo : IB.7.1 - IBX 7.09 - Delphi 7 y la ficha trabaja con controles DBAware.
Responder Con Cita
  #2  
Antiguo 10-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
Déjame entender. Si en


Código Delphi [-]
If RecordCount > 0 then
  DataBaseError ('Código de Proveedor Duplicado') ;

pones un punto de corte en la primera línea, ¿estás diciendo que al examinar el valor de RecordCount éste es igual a 1 y aún así la ejecución no continúa en la segunda línea?

De ser así sería verdaderamente sorprendente ya que más que un error de los IBX sería un error del compilador, cosa que veo muy difícil.

Según leo en la ayuda, un IBSQL es del tipo de datasets cuya propiedad RecordCount sólo devuelve los registros que hayas recorrido hasta el momento, es decir, mientras no recorras todos los registros, la propiedad no devuelve el número correcto. Esto no es un error sino que simplemente, por el tipo de acceso al servidor no hay manera de conocer el dato hasta no tener todos los registros. Esto lo puedes entonces solucionar simplemente llamando a IBSQLExisteProv.Next antes de consultar el valor de RecordCount.

// Saludos
Responder Con Cita
  #3  
Antiguo 10-04-2005
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Talking Sobre OnValidate

Amigo Roman:

El IBSQL funciona como espero, mi problema es que al asignar un evento OnValidate al campo código, este evento no salta en el momento de recibir el nuevo valor, sino que lo hace al "Postear" la tabla. Me interesaría saber que el código esta duplicado o no en el momento de dejar el control TDBEdit asociado y no al aceptar la grabación del registro en el formulario. El evento OnValidate es gestionado internamente por Delphi y se supone que debe de saltar en el momento de transferir la nueva información al buffer del registro activo, pues bien, . ¿No es eso lo que ocurre cuando modifico el contenido del campo DBEdit saliendo del control con la tecla TAB?. Parece que no.

La posibilidad de gestionar esta comprobación mediante el evento OnExit no es viable para mí, ya que salta en cualquier circunstancia que implique la salida del campo, como, por ejemplo, el intento de pulsar un boton con el ratón, o cuando pulso la tecla Esc del formulario, esto lo hace bastante incómodo a mi forma de ver.

Por tanto, ¿ cual puede ser validación idónea e inmediata para los distintos campos mientras se estan capturando los valores?

Espero haberme hecho entender.
Gracias.
Responder Con Cita
  #4  
Antiguo 12-04-2005
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Otro Apunte más....

Hola :

Siguiendo con esta complicación y esperando que alguien me pueda ayudar os comento que conectando controles BDE , aplicando el evento OnValidate al campo en cuestión, hace saltar el DataBaseError sin problemas.
Responder Con Cita
  #5  
Antiguo 12-04-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Checa Esto...

Checa con esto...
Código Delphi [-]
If not isEmpty then 
  DataBaseError ('Código de Proveedor Duplicado') ;
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 11:05:06.


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