Ya creo que lo tengo correctamente :
Código Delphi
[-]Aux_SelectSQL1 := '';
Aux_SelectSQL2 := UpperCase((DataSet as TIBDataSet).SelectSQL.Text);
for j := 1 to Length(Aux_SelectSQL2) do begin
if Aux_SelectSQL2[j] = #13 then Aux_SelectSQL1 := Aux_SelectSQL1 + ' '
else
if Aux_SelectSQL2[j] <> #10 then
Aux_SelectSQL1 := Aux_SelectSQL1 + Aux_SelectSQL2[j];
end;
Aux_Pos := 1;
while PosEx(' FROM ', Aux_SelectSQL1, Aux_Pos) <> 0 do begin
Aux_Pos := PosEx(' FROM ', Aux_SelectSQL1, Aux_Pos) + 1;
end;
Dec(Aux_Pos);
Aux_Table := Copy(Aux_SelectSQL1, Aux_Pos+6, PosEx(' ', Aux_SelectSQL1, Aux_Pos+6) - (Aux_Pos+6));
Bastaba con buscar 'from' como palabra 'reservada'. Es decir, basta con buscar ' from ' con espacio delante y detrás.
Y revisando el código, me dí cuenta de otra particularidad que no mencioné anteriormente :
las subconsultas !
Select fromage, (Select loquesea from mi_otra_tabla where loquesea = 1) from mi_tabla_de_fromages mtdf where fromage = 1
Por eso lo de localizar la última aparición de ' from ' en la sentencia SQL.
Saludos
