Al menos yo, utilizo en algunos casos sentencias SQL muy largas que por supuesto detallo en varias líneas, y estas líneas incluyen entonces un #13#10 para salto de línea.
Es por ello que para parsear la sentencia SQL correspondiente al Select elimino previamente esos saltos de línea y los convierto en blancos (' ') para obtener un único string a parsear posteriormente.
Y quiero añadir que tu código no sería correcto en varios casos

:
1. Que en algún momento decidieras hacer uso de mayúsculas/minúsculas en tu texto SQL. Por eso convierto previamente todo a caracteres mayúsculas con Upper. No recuerdo en estos momentos excatamente si en caso de no hacerlo así, y dejando los saltos de línea, las funciones Copy, Pos y PosEx devuelven valores con sentido. Supongo que en su momento lo analizé y ví que era así, que dichas funciones devuelven valores raros si por medio hay #13#10 de saltos de línea.
2. Que alguno de tus campos de la tabla haya sido nombrado con algun nombre que contenga 'from' como parte del nombre. (Ej. : se me ocurre ahora mismo la palabra 'fromage', que significa queso en francés).
Select fromage from mi_tabla_de_fromages
En este caso tu código detectaría la 1ª aparición de 'from' en los nombres de los campos de la tabla y no el nombre de tabla que estás buscando.
Es por ello que deberías buscar la
última aparición de ' from', con un espacio delante, ya que si 'from' está a su vez contenido en el propio nombre de la tabla, si no buscas con el espacio delante, tampoco obtendrás el nombre de la tabla.
Por ello incluí el bucle expresado en mi código utilizando PosEx.
3. Tu código tampoco funcionaría correctamente si utilizas un 'alias' para el nombre de la tabla.
Select fromage from mi_tabla_de_fromages mtdf where fromage = 1
(je je ... me acabo de dar cuenta que mi código tampoco funciona 100%

... Ahora después me pondré a corregirlo y tener en cuenta las apariciciones de ' from' después de un where

).
No debes de buscar el nombre de la tabla hasta el próximo 'where' porque puede haber un alias en medio. Deberás buscar desde la correcta aparición de ' from' hasta el siguiente espacio en blanco para ignorar el alias.
Además, por supuesto que se pueden dar multitud de ocasiones de sentencias SQL que no contengan ninguna condición 'where', por lo que dicha palabra ni siquiera aparecerá en la sentencia SQL y tu código tampoco sería correcto.
En cualquier caso, también habría que tener en cuenta que 'where' también pudiera formar parte de cualquier nombre de campo.
Como verás, finalmente no es asunto tan fácil como cabría pensar.
Espero no haberte 'desmoralizado' con las múltiples posibilidades de fallo de tu código.
