No tienes por qué utilizarlo en un evento específico del combo:
FormCreate
FormShow
FormActivate
FormResize
Estos eventos se ejecutan en ese mismo orden, FormResize, se reproduce
muchisimas veces, así que no es el adecuado. FormActivate depende; si es
una aplicación con varias ventanas, o puedes saltar de una ventana a otra,
tambien se producirá varias veces.
Como vas a usar el bucle for accediendo a los campos del Adoquery, el
adoquery debe estar abierto antes.
Por cierto, el bucle for debe empezar en cero si quieres coger todos los
campos.
Tambien puedes hacer otra cosa:
Código Delphi
[-]
procedure FormCreate
for i:=0 to ado.fields.count-1 do
combo.items.AddObject(ado.fields[i].DisplayName, ado.Fields[i]);
Con esto estas añadiendo a cada item del combo, el DisplayName, y estas
guardando el Campo Asociado, o sea el campo de tipo TField; de tal forma
que mostramos en el combo los "DisplayNames", que son mas descriptivos
para el usuario, y despues, cuando lo necesitamos por código, podemos
averiguar el nombre del campo que necesitamos nosotros como programador;
Me explico:
Código Delphi
[-]
Necesito usar el item 1 del combo para una consulta sql, (por ejemplo)
var nombreCampo:string;
begin
nombreCampo:= Tfield(combo.items[1]).FieldName
end;
1º- Como sabemos que el objeto que hemos guardado es un TField, hacemos
un Moldeo de tipos, es decir, forzamos a que delphi use el objeto como si fuera un
Tfield( , despues accedemos al item que quereremos.
2º- despues de cerrar el parentesis del Casteo, ya podemos acceder a todas
las propiedades de un TField.
Edito: La consulta debe estar abierta
en todo momento, ya que el objeto Tfield que guardamos en cada item, es un puntero, y está apuntando al campo del Adoquery.