Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo obligo el ingreso de datos a todos los dbedits de un formulario? (https://www.clubdelphi.com/foros/showthread.php?t=62122)

bigpeter80 04-12-2008 18:14:49

Cómo obligo el ingreso de datos a todos los dbedits de un formulario?
 
Hola amigos.... Necesito ayuda... Otra vez.... jeje

Mi problema es el siguiente: Tengo un formulario con 15 DBEdits, Quisiera saber cómo puedo hacer para obligar que se ingresen datos a todos...

He encontrado que con el evento OnKeyPress puedo lograr que se obligue la introducción de ciertos tipos de caracteres o números, por ejemplo:

Código Delphi [-]
procedure TbValAlimenticios.DBEdit2KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9',',',#8]) then
    begin
      key:=#0;
      showmessage('Introduzca números')
    end
end;

Con esto logro que el usuario deba introducir números del 0 al 9 y la coma; pero debo hacerlo por cada DBEdit de mi formulario.

Lo que necesito saber, es Si existe algún método en el que al guardar me muestre un mensaje en el que me diga que no se han ingresado todos los datos y no permita guardar estos datos hasta que no se hayan completado todos los campos.....

Desde ya muchas gracias por las sugerencias....

dec 04-12-2008 18:23:38

Hola,

Un tema delicado, supongo, la entrada de datos en la aplicación. Por ejemplo, acaso no sea cuestión de validar sólo que existen datos, sino de que estos son válidos. Por no liar demasiado el asunto, sabe que el método que has copiado pueden compartirlo todos los "DBEdit", de modo que no tendrás que duplicarlo para cada uno de ellos.

Respecto de cuándo comprobar que todos los "DBEdit" están listos, no estoy muy puesto, y, tratándose de este tipo de controles, no me extrañaría que hubiera otras formas más elegantes de hacerlo. No obstante, suponiendo un botón que el usuario habrá de "pulsar" para guardar los datos, ese puede ser un buen momento para comprobar lo que quieres: el evento "OnClick" de dicho botón.

En ese punto puedes recorrer los "DBEdit" del formulario en cuestión (mediante la propiedad "Components" del formulario y otras como "ComponentCount" puedes hacer un "bucle" más o menos sencillamente) o puedes comprobarlos uno por uno. Sea como sea, igual otro compañero puede dar alguna otra idea menos rudimentaria, basada en las características "especiales" de los propios componentes "DBEdit", que, estoy seguro que alguna tendrán. O tal vez los correspondientes "DataSet" y componentes relacionados.

martinb 04-12-2008 18:23:55

Hola, mira si no entendi mal tu problema hace lo siguiente:

En la propiedad before post de la tabla donde queres guardar los datos hace una sentencia if

Código Delphi [-]
    
   If (ttablecampo1.isnull) or (ttablecampo2.isnull)or.......then
   begin
            showmesage('Complete todos los campos');
            abort
   end;

si queres detallar cuales campos quedaron sin completar tendrias que hacer un if por cada uno......

Espero te sirva.....

Saludos.....

Caral 04-12-2008 18:41:11

Hola
Puedes hacer una prueba sencilla.
Coloca 3 edit y un boton en un form y pones este codigo al evento onclick del boton:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j:Integer;
  comp:TComponent;
begin
  for i := 1 to 3 do begin
    j := (i);
    comp := FindComponent('Edit' + IntToStr(j));
    If  TEdit(comp).Text = '' then
    begin
    showmessage('Falta llenar el edit'+IntToStr(j));
    end
    else
    // lo que sea
end;
end;
Corre el programa y deja un edit o varios en blanco.
Saludos

ContraVeneno 04-12-2008 18:58:01

Yo le agregaría la función Trim... no vaya siendo que el usuario ponga espacios...
Código Delphi [-]
 If Trim( TEdit(comp).Text) = '' then

dec 04-12-2008 18:59:46

Hola,

Bueno, yo también quiero. :) Sobre todo para dejar claro que cuando antes hablaba de "Components" y "ComponentsCount", en realidad quería decir "Controls" y "ControlsCount". Por lo demás, el siguiente código intenta un objetivo muy parecido al que Caral ha escrito arriba:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  errors: string;
const
  MSG_SEPARATOR = #13#13;
  EMPTY_EDIT_MSG = '%s edit is empty';
begin
  errors := '';
  for i := 0 to EditsPanel.ControlCount - 1 do
  begin
    if (EditsPanel.Controls[i] is TEdit) then
    begin
      if (Trim(TEdit(EditsPanel.Controls[i]).Text) = EmptyStr) then
      begin
        if (errors = EmptyStr) then begin
          errors := Format(EMPTY_EDIT_MSG,
           [TEdit(EditsPanel.Controls[i]).Name]);
        end else begin
          errors := errors + MSG_SEPARATOR + Format(
           EMPTY_EDIT_MSG, [TEdit(EditsPanel.Controls[i]).Name]);
        end;
      end;
    end;
  end;
  if (errors <> EmptyStr) then begin
    ShowMessage(errors);
  end else begin
    ShowMessage('All edits contain values');
  end;
end;

Caral 04-12-2008 19:02:42

Hola
Muy cierto, bien pensado.
Saludos

bigpeter80 04-12-2008 19:15:37

Bueno, como siempre agradezco mucho la rápida respuesta de todos y voy a ir probando las sugerencias dadas por todos, a ver si puedo lograr mi objetivo....

Delfino 07-12-2008 23:58:05

Puedes poner la propiedad Requiered del Field asociado al DBEdit a True, o bien por el inspector de objectos o bien :
Código Delphi [-]
DBEdit.Field:Required := True;


La franja horaria es GMT +2. Ahora son las 00:52:30.

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