Ver Mensaje Individual
  #4  
Antiguo 19-07-2013
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 835
Reputación: 24
gatosoft Va camino a la fama
Bien que lo hayas solucionado, y bien por la solución de Ecfisa, pero tengo unas observaciones:

1. No haces un ordenamiento en el Select de asientos, por loq ue puedes llevarte sorpesas después de un ar de asignaciones de puestos. Es decir, podría salirte el asiento 12 de primero y despuesé el 3, etc.
2. En general las listas en Delphi comienzan a numerarse de cero, asi que cuando haces el recorrido de los componentes, con:

Código Delphi [-]
for N := 1 to PNL_colectivo.ComponentCount - 1 do

No estás teniendo en cuenta el componente cero...

3. Es una buena práctica recorrer los Datasets con While, como lo hace ecfisa en su ejemplo:


Código Delphi [-]
  ElDataset.First;
  While not ElDataset.Eof do
   Begin
        //hacer algo con el registro...
        ElDatset.Next;
  end; //while

4. No veo de donde sacas la variable "Boton", en la línea:

Código Delphi [-]
Boton.Tag := TEMP_Asientos.FieldByName('id_asiento').AsInteger;

Posiblemente esto era lo que te generaba el error que mencionas, pues debe ser una variable global que utilizas para crear los botones y puedes estar quedando con el último valor

Tal vez no te hubiera fallado si asigans el valor a la variable previmente:

Código Delphi [-]
for N := 1 to PNL_colectivo.ComponentCount - 1 do
  begin
  if PNL_colectivo.Components[N] is TButton then
    Begin
      For I := 1 to CantidadAsientos -1 do
     begin
      Boton := TButton(PNL_colectivo.Components[N]);
      Boton.Tag := TEMP_Asientos.FieldByName('id_asiento').AsInteger;


      TEMP_Asientos.Next;
      end;

    end;

otra opcion como hace ecfisa es hacer el typeCast directamente sobre la lista de componentes/controles

Código Delphi [-]
TButton(PNL_Colectivo.Controls[i]).Tag := FieldByName('ID_ASIENTO').AsInteger;
TButton(PNL_Colectivo.Controls[i]).Tag
Responder Con Cita