Ir al contenido


Foto

Optimizando código de validación de campos vací­os


  • Por favor identifícate para responder
45 respuestas en este tema

#21 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 13 mayo 2009 - 10:04

Lo que veo es que por un lado está la validación a nivel dataset (Fields[]) y otra a nivel data-ware.... creo que allí­ está el problema: no se ha volcado el dato.

Saludos,


Efectivamente amigo Delphius, el problema es que se está comparando el DataSet cuando se debe de comparar los DBEdit, tal como lo he planteado en mi código.

Salud OS

Debo reconocer que el viejito Caral tení­a razón, mas sabe el diablo por viejo que por diablo :D :D :D

El código de validación tiene que estar en el ultimo paso, revisando todos los dbedits, así­ si se sabrá si hay algún dbedit vací­o.


  • 0

#22 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 07:05

Hola



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   i: integer;
  4. begin
  5.   for I := 0 to ComponentCount - 1 do begin
  6.       if (Components[i] is TDBEdit) then begin
  7.           if TDBEdit(Components[i]).Text = '' then
  8.             showmessage(TDBEdit(Components[i]).name+' esta vacio');
  9.       end;
  10.   end;
  11. end;



Salud OS


Hola Eliseo, ése código ya lo habí­a intentado pero la cuestión es que ahí­ estamos obligando a que todos los DBEdits sean obligatorios, o ¿no?.

Hola, debo admitir que cuando hice mi sugerencia no ha habí­a probado pero intuí­a que deberí­a funcionar.

Lo que me pregunto es ¿cómo es posible que algo del foco de un DBEdit afecte? ¡Si se ha presionado un botón es porque el foco están en él!

A lo mejor algo del manejo de los DBEdits se me escapa... es que como no los uso y prefiero las consultas SQL...

Me gustarí­a saber que más hace ese botón en el que ejecutas el método CamposVacios.

No se... hay algo que no veo :s

Saludos,


Hola Delphius, la cuestión es que no estoy usando TButton sino TImage con el evento OnClick, ya sabes que esos componentes no tienen focos. Ahora, no creo que tenga que ver a qué nivel ya sea Dataset o Dataware, total cada uno í­ntimamente ligado entre ellos, el procedimiento funciona perfectamente, sólo tengo el problema del foco.

Carlos, en estos casos no me vale usar TEdits ya que estoy tratando de evitar en lo más mí­nimo de usar demasiada lí­nea de código ;).

Saludos.
  • 0

#23 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 14 mayo 2009 - 07:23

...ahí­ estamos obligando a que todos los DBEdits sean obligatorios...




delphi
  1. // . . .
  2.     if Components[i] is TDBEdit then
  3.       with TDBEdit(Components[i]) do
  4.         if (Text = '') and (Tag = 666) then
  5.           ShowMessage(Name + ' esta vacio');


  • 0

#24 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 07:30

...ahí­ estamos obligando a que todos los DBEdits sean obligatorios...




delphi
  1. // . . .
  2.     if Components[i] is TDBEdit then
  3.       with TDBEdit(Components[i]) do
  4.         if (Text = '') and (Tag = 666) then
  5.           ShowMessage(Name + ' esta vacio');



Ah vaya, eso está mejor, nunca se me hubiese ocurrido el uso de TAGs, aunque no sabí­a para que se usan, pero ya veo para qué sirven. Gracias cHackAll :D

Saludos.
  • 0

#25 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 14 mayo 2009 - 07:40

...Ah vaya, eso está mejor, nunca se me hubiese ocurrido el uso de TAGs, aunque no sabí­a para que se usan, pero ya veo para qué sirven. Gracias CHacKall :D

Saludos.


1. el code es de egostar, nomas le agrege una condicion.
2. Tag es un "Flag", "Dummy", "i", "Ptr", etc... se puede usar como a uno mejor le parezca (siempre documentando)!
3. es "cHackAll" cabr....
  • 0

#26 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 07:54

...3. es "cHackAll" cabr....


Uy, qué sensible  ^o|

Saludos.
  • 0

#27 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 14 mayo 2009 - 08:20


...3. es "cHackAll" cabr....


Uy, qué sensible  ^o|

Saludos.


Pues claro compadre... yo no "pronuncio" enecumeme o memecumeme :p

Disculpen por desvirtuar el hilo :$
  • 0

#28 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 14 mayo 2009 - 08:23

jajajaja memecumene, pilas que cHackAll se desperto revolucionario jejejeje
  • 0

#29 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 08:38

Si él es así­ con una simple "A" Mayúscula, pues no sé como será en lo demás, :s, hostia, tranquilo bro (b)
  • 0

#30 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 14 mayo 2009 - 08:44

Si él es así­ con una simple "A" Mayúscula, pues no sé como será en lo demás, :s, hostia, tranquilo bro (b)


:$ herí­ tus sentimientos?

Mi7pxil6lhY
  • 0

#31 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 14 mayo 2009 - 09:21

Y si no quieres emplear el simple TAG, tal vez esto si pueda funcionar:


delphi
  1. if Components[i] is TDBEdit
  2.   then
  3.       with TDBEdit(Components[i]) do
  4.         if (Text = '') and Field.Required then
  5.           ShowMessage(Name + ' esta vacio');



Aviso: está hecho al vuelo, pero creo que el DBEdit tiene la propiedad Field que apunta al TField indicado. La idea es que si dicho campo es requerido y el DBEdit está vacio... pues lo avisamos.

No lo he probado. Lo digo de memoria.

Saludos,
  • 0

#32 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 09:28

Acabo de confirmar que los TDBEdits sí­ tienen la propiedad Field, Field.Required y Field.DisplayName, más tarde te comento como me va.

Saludos.
  • 0

#33 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 06:06

Bueno adaptando a las sugerencias de Egostar y Delphius el asunto ha quedado así­:



delphi
  1. procedure TFMantenimiento.CamposVacios(Tab: TTabsheet);
  2. var nIdx: Integer;
  3. begin
  4. for nIdx := 0 to Tab.ComponentCount -1 do begin
  5.       if (Components[nIdx] is TDBEdit) then begin
  6.           if (TDBEdit(Components[nIdx]).Text = '') And (TDBEdit(Components[nIdx]).Field.Required) then
  7.             showmessage(TDBEdit(Components[nIdx]).Field.DisplayName+' esta vacio');
  8.             Abort;
  9.       end;
  10. end;
  11.     ShowMessage('Todos están llenos');
  12. end;



Pues me indica que todos están llenos :s
  • 0

#34 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 mayo 2009 - 06:31

Hey amigo enecumene no jodas, caiste en una de primaria :p

Estas dejando Abort fuera de la rutina de comparación, por lo que en el primer DBEdit se aborta el proceso :p



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var nIdx: Integer;
  3. begin
  4. for nIdx := 0 to ComponentCount -1 do begin
  5.     if (Components[nIdx] is TDBEdit) then begin
  6.         if (TDBEdit(Components[nIdx]).Text = '') And (TDBEdit(Components[nIdx]).Field.Required) then begin
  7.             showmessage(TDBEdit(Components[nIdx]).Field.DisplayName+' esta vacio');
  8.             Abort;
  9.         end; // Begin----End
  10.     end;
  11. end;
  12.   ShowMessage('Todos están llenos');
  13. end;



Salud OS
  • 0

#35 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 14 mayo 2009 - 06:42

Hola
La verdad es que para mi gusto es mucho codigo.
Lo que yo hago es mas sencillo:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var seguro: Bolean;
  3. begin
  4.       ShowMessage('Acabas de Presionar el boton de actualizacion, CABRON estas seguro?');
  5.       IF seguro = true then
  6.       ShowMessage('Estas REALMENTE Seguro???, Mira que esta en juego tu empleo!!!!!')
  7.       else
  8.       // lo que sea.
  9. end;


Saludos
PD: Piénsalo amigo, te aseguro que funciona :D
  • 0

#36 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2009 - 06:48

Pues lo lamento mi estimado pero el efecto es el mismo ;), me quedé así­:



delphi
  1. procedure TFMantenimiento.CamposVacios(Data: TDatasource);
  2. var nIdx: Integer;
  3. begin
  4.   for nIdx := 0 to Data.DataSet.FieldCount -1 do begin
  5.     if (Data.DataSet.Fields[nIdx].IsNull) And (Data.DataSet.Fields[nIdx].Required = True) then begin
  6.       Showmessage('La Casilla ' +Data.DataSet.Fields[nIdx].DisplayLabel+ ' está vací­a.');
  7.       Data.DataSet.Fields[nIdx].FocusControl;
  8.       Abort;
  9.     end;
  10.   end;
  11. end;



Cuando la vaya a ejecutar hago esto:



delphi
  1. procedure TFMantenimiento.imCrearClick(Sender: TObject);
  2. begin
  3. cliCodigo.SetFocus;
  4. CamposVacios(dsClientes);
  5. end;



Es una chapuza pero me resuelve el problema :D.

Saludos.
  • 0

#37 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 mayo 2009 - 06:48

Hola
La verdad es que para mi gusto es mucho codigo.
Lo que yo hago es mas sencillo:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var seguro: Bolean;
  3. begin
  4.       ShowMessage('Acabas de Presionar el boton de actualizacion, CABRON estas seguro?');
  5.       IF seguro = true then
  6.       ShowMessage('Estas REALMENTE Seguro???, Mira que esta en juego tu empleo!!!!!')
  7.       else
  8.       // lo que sea.
  9. end;


Saludos
PD: Piénsalo amigo, te aseguro que funciona :D


Hey amigo Caral, tu code no funciona, por eso la empresa va de picada :p



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   if MessageDlg('Acabas de Presionar el boton de actualizacion, CABRON estas seguro?',
  4.     mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
  5.       if MessageDlg('Estas REALMENTE Seguro???, Mira que esta en juego tu empleo!!!!!',
  6.         mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
  7.         ShowMessage('Te lo adverti wey !!!!!');
  8.       end;
  9.   end;
  10. end;



Salud OS
  • 0

#38 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 14 mayo 2009 - 06:50

Hola
Ahora me vas a criticar el codigo???.
Te salvas que no trabajas con migo. :D :D :D
Saludos
PD: Lo que quieres es que abra delphi y lo piense, verdad..... :D :p
  • 0

#39 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 mayo 2009 - 07:02

Hola
Ahora me vas a criticar el codigo???.
Te salvas que no trabajas con migo. :D :D :D
Saludos
PD: Lo que quieres es que abra delphi y lo piense, verdad..... :D :p


No estarí­a mal que probraras el codigo antes de publicarlo, no seas flojo :p

Salud OS
  • 0

#40 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 mayo 2009 - 07:04

Pues lo lamento mi estimado pero el efecto es el mismo ;), ne quedé así­:

Es una chapuza pero me resuelve el problema :D.


Me pregunto si en el DataSet le indicaste al campo que debia ser requerido  ^o| *-) 8-)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.