Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan soluciones para el problema en el que una cuadrícula que tiene una propiedad RecordSource establecida en un cursor no se actualiza con datos aunque use el comando ThisForm.Refresh o ThisForm.GridName.Refresh.
Versión original del producto: Visual FoxPro
Número de KB original: 131836
Síntomas
En Visual FoxPro, si la RecordSource propiedad de una cuadrícula se establece en un cursor y, a continuación, ese cursor se actualiza en tiempo de ejecución mediante un SQL Select Into Cursor CursorName comando, la cuadrícula no muestra ningún dato aunque lo actualice mediante el ThisForm.Refresh comando o el ThisForm.GridName.Refresh comando .
Causa
Al ejecutar una instrucción SELECT de SQL en el mismo cursor especificado en la propiedad de la RecordSource cuadrícula, el cursor original debe destruirse para poder crear el nuevo cursor. Cuando esto ocurre, las columnas de cuadrícula y también RecordSource se borran y, a continuación, se vuelven a crear. La fuente de datos de la cuadrícula se asigna al nuevo cursor, y la cuadrícula crea automáticamente columnas. La nueva red se está reiniciando desde cero. Por lo tanto, no carga los datos desde el cursor.
Solución
Para actualizar la cuadrícula en esta situación, configure la propiedad RecordSource de la cuadrícula para que se refiera a sí misma, como en este ejemplo:
thisform.grid1.recordsource=thisform.grid1.recordsource
Estado
Este comportamiento es por diseño.
Más información
Para obtener más información, vea Una cuadrícula basada en cursores está en blanco si el comando SELECT-SQL restablece el cursor en Visual FoxPro.
Pasos para reproducir el comportamiento
Cree un formulario y luego agregue la tabla CUSTOMER.DBF (en el directorio
\VFP\SAMPLES\DATA) al Entorno de Datos.Coloque el código siguiente en el evento Load del formulario:
CREATE CURSOR Compdisp (company c(40),city c(15),country c(15))Coloque el código siguiente en el evento Destroy del formulario:
SELECT Compdisp USECree una cuadrícula en el formulario y asigne a la cuadrícula la siguiente configuración de propiedad:
ColumnCount=3 RecordSourceType=Alias RecordSource=CompdispAgregue un cuadro de texto al formulario.
Agregue un botón de comando con el código siguiente en su
Clickevento:SELECT company,city,country; FROM customer; WHERE customer.country=thisform.text1.value; INTO CURSOR Compdisp THISFORM.GRID1.REFRESHEjecute el formulario. Escriba Francia en el cuadro de texto y, a continuación, haga clic en el botón de comando. La cuadrícula debe mostrar todos los registros donde
Customer.Country="France", pero no lo hace. La cuadrícula está en blanco.THISFROM.GRID1.REFRESHno parece actualizar la cuadrícula. Esto sucede incluso si el cursor no se crea en el evento Load del formulario.
Para que la cuadrícula muestre los datos correctamente, coloque el siguiente comando como la última línea de código para el Click evento del botón de comando:
ThisForm.Grid1.RecordSource =ThisForm.Grid1.RecordSource