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-03-2012
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Validar con un DBEDit

Cordial saludo compañeros

estoy pasando mi antiguo programa, que tenia en delphi y paradox, y pasarlo a delphi 2010, usando firebird e IBX como conección.

Estoy usando una tabla pequeña donde hago las pruebas la cual la he creado asi

Código SQL [-]
CREATE TABLE USUARIO (
    CODIGO    CHAR(12) NOT NULL,
    NOMBRE    CHAR(30),
    APELLIDO  CHAR(30),
    CIUDAD    CHAR(20),
    TELEFONO  CHAR(12)
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE USUARIO ADD CONSTRAINT PK_USUARIO PRIMARY KEY (CODIGO);

En el IBDataset en la opción InsertSQL tenemos

Código SQL [-]
INSERT INTO USUARIO
(CODIGO, NOMBRE, APELLIDO, CIUDAD, TELEFONO)
VALUES
(:CODIGO, :NOMBRE, :APELLIDO, :CIUDAD, :TELEFONO)

Para capturar la información estamos usando unos DBEdit y un navegador. Todo funciona muy bien, pero lo que necesito es como poder capturar la información antes de escribir el DBEdit el campo en la tabla, para poder verificarla y que solo este un codigo en la tabla.

Esta opción la podemos hacer con un Edit, pero deseamos hacerlo con un DBEdit, para que el codigo haga el trabajo. Lo hemos tratado de hacer, usando los eventos OnChange y OnDataChange, y no fue posible hacerlo. De no ser posible, cual es la mejor forma de hacerlo.

Agradeciendo de antemano su colaboración
Responder Con Cita
  #2  
Antiguo 09-03-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
La mejor opción:
En los componentes de base de datos seguramente tienes un evento BeforePost. Es este evento deberías poner tu código de validación o buscar el número que le asignarás.
Por ejemplo, en mis programas hago algo parecido a esto:
Código Delphi [-]
OnBeforePost(DataSet)
begin
   // Asigno MAX(CODIGO)+1
   if (DataSet.State = dsInsert) then
   begin
      DataSet.FieldByName('CODIGO').AsInteger := BuscaMaxCodigo + 1;
   end;
end;

Un caso real de clientes en mi aplicación:
Código Delphi [-]
procedure TDMClientes.QMClientesNewRecord(DataSet: TDataSet);
var
  ...
begin
  QMClientesEMPRESA.AsInteger := Entorno.Empresa;
  QMClientesEJERCICIO.AsInteger := Entorno.Ejercicio;
  QMClientesCANAL.AsInteger := Entorno.Canal;
  QMClientesCLIENTE.AsInteger := 0;
  ...

procedure TDMClientes.QMClientesBeforePost(DataSet: TDataSet);
var
  ...
begin
  // Si esta en modo insercion y no le ha asignado a mano un nro de cliente
  if ((DataSet.State = dsInsert) and (QMClientesCLIENTE.AsInteger = 0)) then
     QMClientesCLIENTE.AsInteger := DMMain.Contador_E('CLI');
  ...

Última edición por duilioisola fecha: 09-03-2012 a las 08:49:21.
Responder Con Cita
  #3  
Antiguo 09-03-2012
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Cordial saludo

Primero que todo mis mas sinceros agradeciemientos por tu respuesta, la he tenido encuenta, pero voy a exponer un poco más la necesidad.

Tenemos el DBEdit, donde capturamos el codigo, lo que necesitamos es que al momento que el usuario salga del DBEdit o Pulse la Tecla Enter, Se tome el dato digitado por el usuario, y se lleva a un Query se verifica si el codigo existe y luego se decide que se hara.

Como se puede observa necesitamos validar la información antes que se grabe en el campo del registro la información, para que no cree el error.

Espero haber explicado correctamente el problema

y Agradezco de antemano la atención prestada
Responder Con Cita
  #4  
Antiguo 09-03-2012
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
El evento OnChange del campo persistente parece el lugar más adecuado donde anclar esa comprobación.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 09-03-2012
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
Yo al evento OnChange le veo un problema y es que se lanza por cada caracter que escribes, me parece mejor en el evento OnExit del control.

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
  #6  
Antiguo 10-03-2012
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola Marcos.

Cita:
Empezado por marcoszorrilla Ver Mensaje
Yo al evento OnChange le veo un problema y es que se lanza por cada caracter que escribes, me parece mejor en el evento OnExit del control.

Un Saludo.
No debería. El OnChange del TEdit sí que se dispara por cada carácter escrito, pero el OnChange del campo persistente solo debería dispararse cuando el TEDit termina la modificación y la traslada al Dataset (por ejemplo, al moverte a otro control).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 09-03-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo no usaría un DBEdit, si no un sencillo Edit.
Con esto lo que se escriba no tendrá relevancia hasta que se decida que hacer con el dato.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 09-03-2012
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Con un sencillo Edit, lo tenemos funcionando en el momento, pero queremos llevar la evolución, a usar un DbEdit mi querido amigo.

Para el evento OnExit, lo que sucede es que primero me escribe la información del Campo en la tabla, y luego me dispara el evento, lo que no serviria para el proposito, pues el problema que se presentaría es que saldria un error de SQL.

De antemano les agradezco la atención y sus respuestas, pero sigue el hilo, ya que no he podido resolver el problema.
Responder Con Cita
  #9  
Antiguo 09-03-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me voy por la opción de duilioisola, es la lógica.
Si la tabla esta en modo insert o edit busca el dato por medio del query si lo encuentra entonces envía el mensaje y no graba nada.
Sigo pensando que la mejor opción por seguridad es el edit ya que no esta directamente ligado a la tabla, si lo tienen así no lo modificaría.
Saludos
__________________
Siempre Novato
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
validar dbedit para horario gonza_619 Varios 3 12-12-2010 10:15:03
validar dbedit q muestra horario gonza_619 Varios 9 07-12-2010 19:52:46
validar un dbedit moyo18 Conexión con bases de datos 32 08-01-2009 20:19:11
Validar un Dbedit? kman Varios 10 13-03-2007 04:07:11
validar dbedit yeison Cristman Conexión con bases de datos 1 29-07-2006 21:55:56


La franja horaria es GMT +2. Ahora son las 05:46:02.


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