Share via


Uma grade baseada em cursor ficará em branco se o comando SELECT-SQL redefinir o cursor no Visual FoxPro

Este artigo ajuda você a resolve o problema em que a grade baseada em cursor fica em branco se o comando SELECT-SQL redefinir o cursor no Visual FoxPro.

Versão original do produto: Visual FoxPro
Número de KB original: 140653

Sintomas

No Microsoft Visual FoxPro, se a RecordSource propriedade de uma grade estiver definida como um cursor e, em seguida, o comando SELECT-SQL redefinir o cursor, a grade será exibida em branco se a propriedade RecordSource não for definida de volta para si mesma.

O comando a seguir atualizará a grade corretamente se um SELECT-SQL for executado para recompilar o cursor, mas se as propriedades de coluna ou cabeçalho da grade tiverem sido personalizadas, essas alterações personalizadas serão perdidas e as propriedades de coluna e cabeçalho da grade serão alteradas de volta para suas configurações padrão:

 THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE

Essa personalização pode ser cabeçalhos com nomes diferentes, comprimentos de coluna mais longos e código colocados nos eventos de colunas ou cabeçalhos. Para obter mais informações, confira o seguinte artigo na Base de Dados de Conhecimento da Microsoft: 131836 PRB: Grade Não Refrescante Exibindo um Cursor de Consulta

Motivo

Quando você recompila o cursor no qual a grade se baseia com o comando SELECT-SQL, o cursor original precisa ser destruído antes que o novo cursor possa ser criado. Quando isso acontece, as colunas de grade e os cabeçalhos também são limpos e recriados. Mesmo quando a RecordSource propriedade da grade é definida de volta para si mesma, as configurações personalizadas das colunas e cabeçalhos da grade são perdidas.

Resolução

Para atualizar a grade sem perder as propriedades personalizadas das colunas e cabeçalhos, defina a RecordSource propriedade como um cursor fictício que já foi criado com os mesmos campos em que o cursor em que a grade se baseia. Depois que o SELECT-SQL for executado, altere a RecordSource propriedade de volta para o cursor reconstruído. Isso permite que as propriedades das colunas e cabeçalhos permaneçam intactas enquanto o cursor está sendo reconstruído.

Status

Este é o comportamento padrão.

Mais informações sobre etapas para reproduzir o comportamento

  1. Abra a tabela Customer.dbf localizada no diretório \Vfp\Samples\Data e crie um formulário chamado GridForm.

  2. Coloque o seguinte código no evento Carregar do formulário:

     SELECT cust_id, city, country FROM customer INTO CURSOR Temp1
     SELECT cust_id, city, country FROM customer WHERE country = "" ;
     INTO CURSOR Temp2
    
  3. Coloque o seguinte código no evento Destruir do formulário:

     SELECT Temp1
     USE
     SELECT Temp2
     USE
    
  4. Coloque uma grade no formulário e forneça à grade as seguintes configurações de propriedade:

     ColumnCount=3
     RecordSourceType=Alias
     RecordSource=Temp1
    
  5. Altere o legenda da grade1. Column1.header1 para A ID do Cliente e a propriedade Column1 Width para 100.

  6. Adicione uma caixa de texto ao formulário.

  7. Adicione um botão de comando e coloque o seguinte código em seu evento Clique:

     THISFORM.GRID1.RECORDSOURCE = "Temp2"
     SELECT cust_id, city, country FROM customer ;
     WHERE country = Thisform.text1.value ;
     INTO CURSOR Temp1
     THISFORM.GRID1.RECORDSOURCE = "Temp1"
    
  8. Execute o Formulário. Digite Espanha na caixa de texto e clique no botão de comando. A grade deve exibir todos os registros em que o campo do país é igual à Espanha. O nome do cabeçalho da coluna 1 permanece o mesmo e a largura da coluna não é alterada. Alterando o RecordSource da grade para o cursor chamado Temp2, as propriedades das colunas e cabeçalhos não são redefinidas quando o cursor Temp1 é reconstruído.

  9. Altere as duas THISFORM.GRID1.RECORDSOURCE linhas no evento Clique no botão de comando em comentários e adicione o seguinte como a última linha de código:

     THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
    

Depois de executar o formulário, digitar um nome de país na caixa de texto e clicar no botão de comando, observe que o nome da coluna muda e a largura é menor.