Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Nombres automáticos. (https://www.clubdelphi.com/foros/showthread.php?t=47823)

Dado de baja 07-09-2007 21:32:53

Nombres automáticos.
 
Hola
en la sección de trucos he usado este código que me resulta muy interesante:
Código:

For x := 0 To ComponentCount - 1 Do
  If Components[x] Is TEdit Then
    TEdit(Components[x]).Text := '';

Pero me gustaría ampliarlo: Vereis imagina que en un DataSet tengo un registro de una DB, y quiero poner el valor en cada Edit. Cada Edit tiene el mismo nombre que el nombre del campo.

¿ como se podría hacer ?

Es decir con for recorres todos los campos, y si existe un componente con el mismo nombre que el campo pon en su propiedad text el valor del campo.

maeyanes 07-09-2007 22:15:33

Hola...

Tienes dos opciones:

Código Delphi [-]
var
  I, J: Integer;

begin
  for I := 0 to Pred(DataSet.Fields.Count) do
    for J := 0 to Pred(Form.ComponentCount) do
      if (Form.Components[J] is TEdit) and (DataSet.Fields[i].FieldName = Form.Components[J].Name) then
      begin
        TEdit(Form.Components[J]).Text := DataSet.Fields[i].AsString;
        Break // Dejamos de buscar en los controles
      end
end;

La otra opción es usar el método FindComponent:

Código Delphi [-]
var
  I: Integer;
  Edit: TEdit;

begin
  for I := 0 to Pred(DataSet.Fields.Count) do
  begin
    Edit := Form.FindComponent(DataSet.Fields[i].FieldName) as TEdit;
    if Assigned(Edit) then
      Edit.Text := DataSet.Fields[i].AsString
  end
end;

Saludos...

Dado de baja 08-09-2007 10:36:50

Muchas gracias.

Usaré la segunda opción, la entiendo menos, pero parece más rápida.

Gracias de nuevo.

eduarcol 08-09-2007 16:15:58

una cosa segun entiendo cada campo tiene el nombre del edit, pero no necesariamente su indice, asi que yo sugeriria algo como :

Código Delphi [-]
var
  I, J: Integer;

begin
    for J := 0 to Pred(Form.ComponentCount) do
      if (Form.Components[J] is TEdit) then
      begin
        TEdit(Form.Components[J]).Text := DataSet.FieldbyName(TEdit(Form.Components[J]).Name).AsString;
      end;
end;

pero para que funcione debe ser cierta la premisa de que el nombre del campo = al nombre del edit

Dado de baja 08-09-2007 18:09:01

Va de perlas.

Muchas gracias a todos. :)


La franja horaria es GMT +2. Ahora son las 09:28:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi