Error ORA-01008 FRM-41380
En este artículo explicamos como resolver los errores “ora-01008 not all variables bound” y “frm-41380 Cannot set the blocks query data source”. Para resolver este problema vamos a modificar la cláusula From de la pantalla en modo ejecución.
Modificar la cláusula From en modo de ejecución
Cuando necesitamos recuperar valores que vengan de un agrupamiento de otras tablas sugerimos hacer una cláusula From, el problema que nos podemos encontrar es que cuando necesitamos que esa subselect realice un filtro con variables de la aplicación nos aparece el error “ora-01008 not all variables bound” ya que durante la consulta no es capaz de darle un valor a esas variables.
Para poder solucionar esto deberemos modificar la subselect de forma manual y en tiempo de ejecución. Por otro lado en las propiedades del bloque deberemos poner lo siguiente:
Consultar Tipo de Origen de Datos: Consulta de cláusula FROM.
Nombre de Origen de Datos de Consulta: (Aunque luego se sustituya el valor en ejecución es necesario introducir algún contenido para que no nos de error).
Alias: El nombre de la tabla de la que consultamos.
Para modificar la consulta en tiempo de ejecución tendremos que utilizar el trigger Pre-query, donde escribiremos la Subselect necesaria y modificaremos la propiedad del bloque (QUERY_DATA_SOURCE_NAME ) que corresponde a “Nombre de Origen de Datos de Consulta de Datos” de la siguiente manera:
1 2 3 4 5 6 7 8 9 | DECLARE cadena_from VARCHAR(2000); BEGIN cadena_from := '(SELECT NOMBRE,APELLIDO,DIRECCION, SUM(PTIMPORTE) PTIMPORTE FROM PEDIDOS WHERE CDHABIL = '''|| :VARB_COMN.HABIL || ''' AND TO_DATE(FENOMDES,''J'') >= TO_DATE('''|| :B0.MD ||''',''MM/YYYY'') AND TO_DATE(FENOMDES,''J'')'; set_block_property('B1',QUERY_DATA_SOURCE_NAME,cadena_from); |
Si necesitáis realizar dos veces la consulta es necesario limpiar el bloque, se puede hacer de dos formas dependiendo del problema que os surja.
Uno de ellos es limpiar el bloque antes de realizar el execute query:
go_block (‘bloque_de_datos’);
clear_block (no_validate);
Y otro es si el problema que os da es que os monta un where después de la consulta, podéis limpiarlo así:
set_Block_Property(‘B1′,DEFAULT_WHERE,’ ‘);
De estas dos maneras podemos resolver tanto el error “ora-01008 not all variables bound” como el error “frm-41380 Cannot set the blocks query data source”.
ORACLE FORMS