He estado buscando y he encontrado el siguiente código:
Código Delphi
[-]function getsqlsubquerydatax(sql:string):string;
begin
result:='';
zquery.close;
zquery.sql.text:=sql;
zquery.open;
zquery.first;
while not zquery.eof do
begin
if result='' then result:=''''+zquery.fields[0].asstring+'''' else
result:=result+','''+zquery.fields[0].asstring+'''';
zquery.next;
end;
zquery.close;
if result='' then result:='''''';
end;
Lo cual me confirma que el código que puse de ejemplo tiene que funcionar, claro que si la consulta no devuelve registros entonces te dara error porque no hay nada que cargar en la variable y por lo tanto la matriz de campos no existe.
Puedes utilizar si Zquer1.RecordCount o IsEmpty para comprobar primero que realmente ha devuelto registros y no acceder de esta manera a una matriz vacía.
Un Saludo.