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
Abra a tabela Customer.dbf localizada no diretório \Vfp\Samples\Data e crie um formulário chamado GridForm.
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
Coloque o seguinte código no evento Destruir do formulário:
SELECT Temp1 USE SELECT Temp2 USE
Coloque uma grade no formulário e forneça à grade as seguintes configurações de propriedade:
ColumnCount=3 RecordSourceType=Alias RecordSource=Temp1
Altere o legenda da grade1. Column1.header1 para A ID do Cliente e a propriedade Column1 Width para 100.
Adicione uma caixa de texto ao formulário.
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"
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.
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.