Hola Vales.
Respondiendo a tu primer pregunta (que un botón se habilite/deshabilite de acuerdo a si un campo está vacío o no), podrías utilizar el evento
AfterScroll del query:
Código Delphi
[-]
procedure TForm1.QueryAfterScroll(DataSet: TDataSet);
begin
Button1.Enabled := Query.FieldByName('TU_CAMPO').AsString <> '';
end;
Saludos.