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: 23
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 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
  #7  
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
  #8  
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
  #9  
Antiguo 09-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Estoy de acuerdo con mi amigo Caral que con un TEdit se simplifica el tema. Pero si aún deseas hacerlo con un TDBEdit, creo que el evento indicado para evaluar la existencia (o no) es OnSetText del campo en cuestión.
El evento OnSetText se dispara cuando un valor es asignado a la propiedad Text del TField, pero antes de ser almacenado.

Entonces:
Código Delphi [-]
...
procedure TForm1.DataSetCpoSetText(Sender: TField; const Text: String);
begin
  with TuQuery do
  begin
    Close;
    SQL.Text:= 'SELECT TU_CAMPO FROM TU_TABLA WHERE TU_CAMPO = :DATO';
    ParamByName('DATO').AsString:= Text;  // (o convertir acorde al tipo)
    Open;
    if IsEmpty then
      raise Exception.Create('Dato inexistente');
    Close;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSet.FieldByName('TU_CAMPO').OnSetText:= DataSetCpoSetText;
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DataSet.FieldByName('TU_CAMPO').OnSetText:= nil;
end;
En el código superior asigno el evento en tiempo de ejecución para dar mayor claridad, pero si tenes creado el campo persistente lo podés hacer desde el Object Inspector.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 09-03-2012
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Bueno creo que lo mejor es evolucionar a una solución dual, usar DBEdit y Edit, y seguir buscando una solución para el DbEdit, ya que no ha sido poco lo que he buscado en el foro, y como todo, alguna solución debe de tener, depronto no la he sabido buscar.
Responder Con Cita
  #11  
Antiguo 09-03-2012
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Gracias EcFisa, lo ensayo de inmediato y si algo publicaremos aqui el codigo para que nuestro amigo Caral lo incorpore a su foro. Te comento luego como me va con esta propuesta.
Responder Con Cita
  #12  
Antiguo 10-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
Cita:
Empezado por servicomp Ver Mensaje
Gracias EcFisa, lo ensayo de inmediato y si algo publicaremos aqui el codigo para que nuestro amigo Caral lo incorpore a su foro. Te comento luego como me va con esta propuesta.
No entiendo a que te refieres con esto ?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 10-03-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por servicomp Ver Mensaje
y si algo publicaremos aqui el codigo para que nuestro amigo Caral lo incorpore a su foro
¿En serio?
¡Cuál es el foro de Caral, que no lo conozco!

Hey, Caral que no me contaste que tenes foro propio... esa no me la sabía.

Fuera sarcamos, para tu información no hay inconvenientes en que ambos foros compartan enlaces y material. De hecho en algunas ocasiones desde ambos lados se ha remitido al otro. Y si Caral decide compartir lo que tiene y sabe en ambos sitios ¿Cuál es el problema? Aquí puede consultar sus ejemplos de facturación como así también el propio en DA, por ejemplo. Caral está en la libertad de compartir con quien se le raje la gana lo que el publique.
Y que yo sepa, nadie pero nadie, es dueño del código que se ponga en cualquier foro. Ha... y eso no es plagio. Plagio sería si uno se autonombrara autor; algo que Caral no ha hecho, y estoy seguro que nunca hará. Es más, siempre que ha sido necesario agradeció y/o citó a quien le proporcionó ayuda y le enseñó.

Si está al alcance del público ¿cuál es el problema? Para algo está el foro, favorecer a la comunidad en general y no para únicamente y en particular a quien pregunta y hay que responderte en secreto. Leete la guía de estilo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 10-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
Aveces las palabras se mal interpretan, suele pasar.
Lo mejor es esperar para ver que es lo que quiso decir el amigo servicomp, tal vez fue un simple comentario.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #15  
Antiguo 10-03-2012
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
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
  #16  
Antiguo 10-03-2012
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Solicito mil disculpas a todos ustedes y muy especialmente al señor caral, por el comentario que escribí sobre el foro suyo, en realidad lo que había querido decir es sobre el tutorial que esta realizando, y que se ha publicado por este medio, se que muchos de los compañeros lo están leyendo y siguiendo.

Por ultimo espero que las disculpas sean aceptadas, y continuar adelante en el aprendizaje.
Responder Con Cita
  #17  
Antiguo 10-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
Gracias por la aclaración, con eso es suficiente, no hace falta disculparse, fue un mal entendido.
En lo que pueda ayudarte y este a mi alcance, con gusto.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #18  
Antiguo 11-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
Tienes razón Marc, en el OnChange del campo persistente, no en el control de pantalla que lo muestra, pues este último se lanza por cada carácter tecleado o eliminado.

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 27-03-2012
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Duda:

Cita:
Escrito por: servicomp
Solicito mil disculpas a todos ustedes y muy especialmente al señor caral, por el comentario que escribí sobre el foro suyo, en realidad lo que había querido decir es sobre el tutorial que esta realizando, y que se ha publicado por este medio, se que muchos de los compañeros lo están leyendo y siguiendo.
Donde puedo encontrar el tutorial??


Your Friend

StartKill
Lima-Perú
//-------------
Responder Con Cita
  #20  
Antiguo 27-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por StartKill Ver Mensaje
Duda:
Donde puedo encontrar el tutorial??

Your Friend

StartKill
Lima-Perú
//-------------
Hola StartKill.

Está en los primeros hilos del foro Firebird e Interbase: Tutorial (como empezar con Firebird) Novatos.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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 07:46:19.


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