Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Validar un Dbedit? (https://www.clubdelphi.com/foros/showthread.php?t=27907)

kman 02-12-2005 22:19:00

Validar un Dbedit?
 
Saludos.

Señores soy nuevo en la programación y tengo un pequeño problema:

Tengo un formulario conteniedo varios dbedit's pero hay uno (CODIGO) el cual quiero validarlo en el evento beforepost de la tabla desde un bitbotton para que si existe el valor del dbedit en la tabla que no se repita el mismo.

jachguate 02-12-2005 23:07:24

Cita:

Empezado por kman
Señores soy nuevo en la programación y tengo un pequeño problema:

Pues bienvenido al mundillo de la programación y al clubdelphi. Te invito a leer, antes que nada, la guia de estilo (vínculo en mi firma) ;)

Cita:

Empezado por kman
Tengo un formulario conteniedo varios dbedit's pero hay uno (CODIGO) el cual quiero validarlo en el evento beforepost de la tabla desde un bitbotton para que si existe el valor del dbedit en la tabla que no se repita el mismo.

Francamente creo que te has hecho bolas tratando de explicarte. Supongo que lo que queres simplemente es validar el valor para que no se repita con alguno existente en la base de datos, con independencia de cual sea el evento/método donde se haga. (eso de en un beforepost desde un bitbotton me ha hecho trizas.. :D)

El lugar adecuado para validar valores de los campos es precisamente el evento OnValidate del TField asociado al mismo. Este evento se disparará justamente cuando sea necesario validar el campo, independientemente de si su valor proviende de una rejilla, un TDBEdit o asignado por código.

Hasta luego.

;)

kman 02-12-2005 23:48:15

Gracias jachguate por tu repuesta, y por supuesto, me volvi un lio con lo del beforepost:D

kman 03-12-2005 00:43:33

Hola de nuevo!

Mi nueva pregunta es: y como valido el TFIELD?:confused:
Me gustaría un ejemplo, por favor.

Muchas gracias compañeros.

el_barto 03-12-2005 00:46:05

y por que no tomas el valor que tiene el dbedit haces una consulta sql, es decir un select y si es empty entonces es por que ya esta creado.

Pues pienso, es una salida facil pero no debe ser la mejor

kman 03-12-2005 00:49:48

Cita:

Empezado por el_barto
y por que no tomas el valor que tiene el dbedit haces una consulta sql, es decir un select y si es empty entonces es por que ya esta creado.

Pues pienso, es una salida facil pero no debe ser la mejor

Pues, porque soy tremendo novato y necesito de toda la buena ayuda que me puedan ofrecer, me das un ejemplo?

gracias.

jachguate 03-12-2005 00:51:23

Cita:

Empezado por kman
Mi nueva pregunta es: y como valido el TFIELD?:confused:
Me gustaría un ejemplo, por favor.

La idea de validar un field es simplemente verificar que el valor esté dentro de los parámetros válidos y si no, elevar una excepción.

por ejemplo:

Código Delphi [-]
procedure TForm1.Query1CodigoValidate(sender : TField);
begin
  if Query1Codigo.AsInteger < 0 then
    raise Exception.Create('Error: el código no puede ser menor que 0.  Verifique!')
end;

Hasta luego.

;)

kman 03-12-2005 01:48:26

Cita:

Empezado por jachguate
La idea de validar un field es simplemente verificar que el valor esté dentro de los parámetros válidos y si no, elevar una excepción.

por ejemplo:

Código Delphi [-]
 procedure TForm1.Query1CodigoValidate(sender : TField);
 begin
   if Query1Codigo.AsInteger < 0 then
     raise Exception.Create('Error: el código no puede ser menor que 0.  Verifique!')
 end;



Hasta luego.

;)

Comprendí tu ejemplo, e inclusive lo puedo aplicar para algunos casos en mi proyecto, pero parece que no me doy a entender, lo que quiero (a ver si no la hago bolas otra vez) es buscar o localizar un dato desde mi TABLA y compararlo con el que se esta introduciendo en el dbedit y asi no repetirlo que no sea con sentencias sql que me vuelvo bolas con ellas, o mejor aun cómo controlo el raise exception (ya que lo mencionas) que da delphi cuando intentas duplicar un registro que ya existe????

Perdón la molestia pero me urge esto para terminar un pequeño proyecto de la uni.

Gracias.

kman 03-12-2005 04:04:04

Por fin lo solucioné:
Código Delphi [-]
 procedure form1.Button1Click(Sender: TObject);
 var field: tfield;
 VAR texto: string;
 begin
 texto:=Edit1.Text;
 if TABLA.Locate('CAMPO',texto,[]) then begin
 showmessage('DATO YA  EXISTE');
 end else begin
 tabla1.Edit;
 Field := Tabla1.FieldByName('CAMPO');
 Field.AsString := Edit1.Text;
 end;
 end;

Si tienen algún comentario sobre este código, se recibirá con mucho agrado, ah y gracias por los comentarios anteriores.

jachguate 05-12-2005 16:07:40

Cita:

Empezado por kman
Comprendí tu ejemplo, e inclusive lo puedo aplicar para algunos casos en mi proyecto

En tu caso, creo que lo mejor es lanzar una consulta contra la base de datos para deteriminar si un código está duplicado o no:

supongamos que qDup es un TQuery (o equivalente) tiene el siguiente SQL
Código SQL [-]
Select count(*) contador from tabla where codigo = :codigo;

en el evento on validate podríamos hacer algo como:

Código Delphi [-]
if TablaCodigo.IsNull then
else begin
  qDup.ParamByName('codigo').AsInteger := tablaCodigo.AsInteger;  
  qDup.Open;
  try
    if qDupCONTADOR.AsInteger > 0 then
      raise Exception.CreateFmt('Error: el código %d ya existe y no puede '
                + 'ser duplicado.  Verifique!', [tablaCodigo.AsInteger]);
  finally
    qDup.Close;
  end;
end;

Hasta luego.

;)

moyo18 13-03-2007 04:07:11

usando este codigo

Código Delphi [-]
procedure form1.Button1Click(Sender: TObject);
 var field: tfield;
 VAR texto: string;
 begin
 texto:=Edit1.Text;
 if TABLA.Locate('CAMPO',texto,[]) then begin
 showmessage('DATO YA  EXISTE');
 end else begin
 tabla1.Edit;
 Field := Tabla1.FieldByName('CAMPO');
 Field.AsString := Edit1.Text;
 end;
 end;

para ver si un dato esta en la tabla ya y q no se guarde si es repedido lo pongo todo pero me sale aunq no este repedido el mismo mensaje q ya esta repetido y no se guarda.


este es mi codigo

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
field: string;
texto: string;
begin
 field:='userID'  ;
 texto:=DBEdit2.Text;
 if ADOTable1.Locate(field,texto,[]) then
  begin
   showmessage('DATO YA  EXISTE');
  end
 else
  begin
   Maskedit1.visible := false;
   Maskedit2.visible := false;
   Maskedit3.visible := false;
   Maskedit4.visible := false;
   ADOTable1.Edit;
    DBEdit9.text := Pri;
    DBEdit2.text := Maskedit1.Text ;
    DBEdit6.text := Maskedit2.Text ;
    DBEdit8.text := Maskedit3.Text ;
    DBEdit10.text := Maskedit4.Text ;
    ADOTable1UserID.AsString := DBEdit2.text;
    ADOTable1LastName.AsString := DBEdit3.text;
    ADOTable1Name.AsString := DBEdit4.text;
    ADOTable1Address.AsString := DBEdit5.text;
    ADOTable1PostalCode.AsString := DBEdit6.text;
    ADOTable1City.AsString := DBEdit7.text;
    ADOTable1Phone.AsString := DBEdit8.text;
    ADOTable1Email.AsString := DBEdit9.text;
    ADOTable1Birthday.AsString := DBEdit10.text;
   ADOTable1.Post;

   DBEdit3.Text := '' ;
   DBEdit4.Text := '' ;
   DBEdit5.Text := '' ;
   DBEdit7.Text := '' ;
   DBEdit9.Text := '' ;
   Maskedit1.Text := '' ;
   Maskedit2.Text := '' ;
   Maskedit3.Text := '';
   Maskedit4.Text := '' ;
   combobox2.visible := false;


  end;
end;


La franja horaria es GMT +2. Ahora son las 15:51:54.

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