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
ElDatset.Next;
end;
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