Sería interesante que nos contaras qué tipo de excepción se genera.
Mientras tanto te comento que siendo TTable y TQuery descendientes de TDataSet y dado que el método Close (así como Open) está definido desde este ancestro común, puedes simplificar tu rutina:
Código Delphi
[-]
procedure CerrarDatasets(ADM: TDataModule);
var j:Integer;
begin
with ADM do
begin
for j := 0 to ComponentCount - 1 do
begin
ShowMessage(Components[j].ClassName);
if (components[j] is TDataSet) then
TDataSet(components[j]).Close;
end;
end;
end;
Nota además que el uso del operador
as es innecesario ya que este operador básicamente es una combinación del operador
is con el moldeo de tipos normal, y dado que previamente usas
is estarías haciendo una doble verificación.
// Saludos