Compartir a través de


Una cuadrícula actualizada no muestra ningún dato cuando se actualiza un cursor en tiempo de ejecución en Visual FoxPro

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

  1. Cree un formulario y luego agregue la tabla CUSTOMER.DBF (en el directorio \VFP\SAMPLES\DATA) al Entorno de Datos.

  2. Coloque el código siguiente en el evento Load del formulario:

    CREATE CURSOR Compdisp (company c(40),city c(15),country c(15))
    
  3. Coloque el código siguiente en el evento Destroy del formulario:

    SELECT Compdisp
    USE
    
  4. Cree una cuadrícula en el formulario y asigne a la cuadrícula la siguiente configuración de propiedad:

    ColumnCount=3
    RecordSourceType=Alias
    RecordSource=Compdisp
    
  5. Agregue un cuadro de texto al formulario.

  6. Agregue un botón de comando con el código siguiente en su Click evento:

    SELECT company,city,country;
    FROM customer;
    WHERE customer.country=thisform.text1.value;
    INTO CURSOR Compdisp
    THISFORM.GRID1.REFRESH
    
  7. Ejecute 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.REFRESH no 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