Si estas trabajando con firebird 1.5 o posterior, puede utilizar for execute statement en lugar de for select. La ventaja es que el for execute statement te permite tener selects dinamicos.
En tu caso la consulta seria algo como:
Código SQL
[-]
for execute statement 'select CODIGO, DESCRIP, coalesce(existencia,0) ' ||
'FROM cinve where 1=1 ' ||
'and descrip like ''%' || vdescrip || '%'' ' ||
'where order BY descrip '
into :scodigo, :sdescrip, :sexistencia
do begin
.. el resto de tu codigo
end
Recuerda que '' sirve para representar una comilla simple, entonces
''%' equivale a '%
'%'' equivale a %'
El inteprete dependiendo de lo que llegue en vdescrip dara por resultado:
and descrip like '%vdescrip%'
Espero te sea de utilidad.