Dela via


Ett markörbaserat rutnät är tomt om SELECT-SQL-kommandot återställer markören i Visual FoxPro

Den här artikeln hjälper dig att lösa problemet där markörbaserat rutnät är tomt om SELECT-SQL-kommandot återställer markören i Visual FoxPro.

Ursprunglig produktversion: Visual FoxPro
Ursprungligt KB-nummer: 140653

Symptom

Om RecordSource egenskapen för ett rutnät är inställd på en markör i Microsoft Visual FoxPro och select-SQL-kommandot sedan återställer markören, visas rutnätet tomt om egenskapen RecordSource inte är inställd på sig själv.

Följande kommando uppdaterar rutnätet korrekt om en SELECT-SQL körs för att återskapa markören, men om rutnätets kolumn- eller rubrikegenskaper har anpassats går dessa anpassade ändringar förlorade och rutnätets kolumn- och rubrikegenskaper ändras tillbaka till standardinställningarna:

 THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE

En sådan anpassning kan vara rubriker med olika namn, längre kolumnlängder och kod som placeras i händelserna i kolumner eller rubriker. Mer information finns i följande artikel i Microsoft Knowledge Base: 131836 PRB: Rutnätet uppdaterar inte visning av en markör från fråga

Orsak

När du återskapar markören som rutnätet baseras på med kommandot SELECT-SQL måste den ursprungliga markören förstöras innan den nya markören kan skapas. När detta inträffar rensas även rutnätskolumnerna och rubrikerna och återskapas sedan. Även om RecordSource rutnätets egenskap är inställd på sig själv går de anpassade inställningarna för kolumnerna och rubrikerna i rutnätet förlorade.

Åtgärd

Om du vill uppdatera rutnätet utan att förlora de anpassade egenskaperna för kolumner och rubriker anger du RecordSource egenskapen till en dummymarkör som redan har skapats med samma fält som markören som rutnätet baseras på. När SELECT-SQL har körts ändrar du RecordSource tillbaka egenskapen till den återskapade markören. Detta gör att egenskaperna för kolumnerna och rubrikerna förblir intakta medan markören återskapas.

Status

Detta är avsiktligt.

Mer information om steg för att återskapa beteende

  1. Öppna tabellen Customer.dbf i katalogen \Vfp\Samples\Data och skapa ett formulär med namnet GridForm.

  2. Placera följande kod i inläsningshändelsen för formuläret:

     SELECT cust_id, city, country FROM customer INTO CURSOR Temp1
     SELECT cust_id, city, country FROM customer WHERE country = "" ;
     INTO CURSOR Temp2
    
  3. Placera följande kod i destroy-händelsen i formuläret:

     SELECT Temp1
     USE
     SELECT Temp2
     USE
    
  4. Placera ett rutnät i formuläret och ge rutnätet följande egenskapsinställningar:

     ColumnCount=3
     RecordSourceType=Alias
     RecordSource=Temp1
    
  5. Ändra bildtext för rutnät1. Column1.header1 till Kund-ID och egenskapen Column1 Width till 100.

  6. Lägg till en textruta i formuläret.

  7. Lägg till en kommandoknapp och placera följande kod i händelsen Klicka:

     THISFORM.GRID1.RECORDSOURCE = "Temp2"
     SELECT cust_id, city, country FROM customer ;
     WHERE country = Thisform.text1.value ;
     INTO CURSOR Temp1
     THISFORM.GRID1.RECORDSOURCE = "Temp1"
    
  8. Kör formuläret. Skriv Spanien i textrutan och klicka sedan på kommandoknappen. Rutnätet ska visa alla poster där landsfältet är lika med Spanien. Namnet på rubriken för kolumn 1 förblir detsamma och kolumnens bredd ändras inte. Genom att ändra Rutnätets RecordSource till markören Temp2 återställs inte egenskaperna för kolumnerna och rubrikerna när Temp1-markören återskapas.

  9. Ändra de två THISFORM.GRID1.RECORDSOURCE raderna i klicka-händelsen för kommandoknappen till kommentarer och lägg till följande som den sista kodraden:

     THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
    

När du har kört formuläret skriver du ett landsnamn i textrutan och klickar på kommandoknappen. Observera att kolumnnamnet ändras och att bredden är mindre.