FoxPro/Visual FoxPro - problema con combo usando rowsource un sql con vfp9

   
Vista:

problema con combo usando rowsource un sql con vfp9

Publicado por julio hdz hombresilustres@yahoo.com.mx (1 intervención) el 04/11/2011 17:12:53
hola a todos, tengo el siguiente problame:



les comento que estoy usando un combo y tiene lo siguiente:


1. en rowsource, escribo "select nombre from c:\carpeta\tabla.dbf into cursor resultado"

2. en rowsourcetype, selecciono "3 -sql estatement"

3. en columncount, escribo 1

4. en columnwidths, escribo 150



hasta aqui al ejecutar el formulario, me funciona perfecto el combo (es la primera vez), y con esto, puedo seleccionar el dato requerido.

pero, al hacer clic en un boton o cualquier otro objeto, me sale el siguiente error:



"CANNOT ACCESS THE SELECT TABLE. select nombre from c:\carpeta\tabla.dbf into cursor resultado"


y posteriormente, me desaparece el combo del formulario (esto en ejecucion)



he investigado y otros sugieren que en DESTROY del combo colocara el siguiente codigo:


if used ("tabla")

use tabla

endif



pero no resulta, como quiera sigo con el mismo mensaje de error



alguien ha tenido este problema que me pueda ayudar a solucionarlo



les agradeceria mucho
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

problema con combo usando rowsource un sql con vfp9

Publicado por Carlos Cuyé cachosistemas@hotmail.com (75 intervenciones) el 04/11/2011 21:43:26
Fijate si en algún procedimiento que ejecutes luego de utilizar el combo, no vayas a abrir tablas en la misma sección en la que se creó el cursor 'resultado'. Si ese cursor se cierra, o se lo vuelve a crear durante la ejecución, creo que el combo deja de funcionar. Si querés releer los datos mostrados en el combo, usá el método Requery del combo.
Si usás en tu código la orden USE, deberías utilzarla junto con su cláusula IN 0, para asegurarte de abrir las tablas siempre en una sección libre, y así evitar cerrar otra si desearlo. -> USE TuTabla IN 0.
También es una muy buena costumbre, utilizar siempre la orden SELECT Tabla al principio de cada procedimiento que trabaje sobre alguna tabla en particular, para evitar que sin desearlo se interfiera con el funcionamiento de otras partes del código.
También podría ser que no hayas incluido a la tabla de origen en el entorno de datos del formulario, o que en alguna parte de tu sistema se la esté abriendo a esa tabla en modo exclusivo, lo cual le evita el acceso a otras partes del código. Para solucionar esto, deberías usar las opciones de abrir las tablas con buffer activado y no en modo exclusivo, mediante las propiedades: BufferMode del formulario; BufferModeOverride de cada cursor del entorno de datos; la propiedad Buffering de la función CURSORSETPROP( ); o la cláusula SHARED de la orden USE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema con combo usando rowsource un sql con vfp9

Publicado por VICTOR PEREZ (278 intervenciones) el 07/11/2011 14:58:07
Hola Julio,

Mirando tu problema, te voy a dar el codigo que uso para hacer una busqueda y luego llenar un listbox o combo.

Select *;
from conCG;
where &_criterio;
order by Cc_Dcmto;
into cursor _curmovs1


Sele _curmovs1


Thisform.pgfPeds.page2.lstGuias.rowsource="Cc_Fecha,CC_fpago,Cc_Dcmto,cc_tipofac,Cc_CodCli,Cc_NomCli,MedCode,Cc_Total,payment,metodo,cc_usr,Cc_cancel,cc_Sit"



THISFORM.pgfPeds.page2.lstGuias.requery
Thisform.pgfPeds.Page2.lstGuias.refresh
THISFORM.pgfPeds.page2.lstGuias.setfocus


Creo que tu falla esta en usar el no usar el requery que equivale a un CLOSE + USE.

Pruebalo asi lo que permitira que cada vez que ejecutes para una nueva busqueda la tabla quede disponible.

Con este codigo yo lleno un listbox....selecciono el registro que quiero y despliego la data en otra pestaña del form...hago lo que quiero y puedo volver qal list que permanece aun lleno y lo mejor actualizado con el cambio que hice...

Puedo seleccionar otro registro, y hacer lo mismo.

Como aconsejo Carlos, a veces es mejor abrir la tabla asi USE XXXX in A Alias Y Shared
Y tratar de usar el alias para rellenar lo que quieras. Asi es como Yo lo uso y no he tenido ningun tipo de problemas.

Ahora bien, en la pestaña que muestra El listbox o combo, tengo colocada en el evento ACTIVATE lo siquiente:
Thisform.filtro (este filtro es el procedimiento que contiene el codigo que te mostrè al principio) de manera que cada vez que cada vez que necesite hacer la consulta se ejecuta el filtro y se llena el listbox...

Tu puedes hacer lo mismo...crea un metodo y llamalo cada vez que lo necesites...el &_criterio en la sentencia SQL es para que la consulta se haga siguiendo ocho diferentes criterios como fecha, cliente, nombre, factura, fecha, medico y otros...

Saludos y espero te ayude mi consejo.

Victor - Panama -
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar