次の方法で共有


SELECT-SQL コマンドが Visual FoxPro でカーソルをリセットした場合、カーソルベースのグリッドが空白になります

この記事は、SELECT-SQL コマンドが Visual FoxPro でカーソルをリセットした場合にカーソルベースのグリッドが空白になる問題を解決するのに役立ちます。

元の製品バージョン: Visual FoxPro
元の KB 番号: 140653

症状

Microsoft Visual FoxPro では、グリッドの RecordSource プロパティがカーソルに設定され、SELECT-SQL コマンドによってカーソルがリセットされた場合、RecordSource プロパティがそれ自体に設定されていない場合、グリッドは空白になります。

次のコマンドは、SELECT-SQL を実行してカーソルを再構築する場合にグリッドを正しく更新しますが、グリッドの列またはヘッダープロパティがカスタマイズされている場合、これらのカスタマイズされた変更は失われ、グリッドの列とヘッダーのプロパティは既定の設定に戻ります。

 THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE

このようなカスタマイズには、異なる名前のヘッダー、長い列の長さ、列またはヘッダーのイベントに配置されたコードを指定できます。 詳細については、「Microsoft サポート技術情報: 131836 PRB: クエリからのカーソルの表示を更新しないグリッド」の記事を参照してください。

原因

グリッドの基になるカーソルを SELECT-SQL コマンドで再構築する場合、新しいカーソルを作成する前に、元のカーソルを破棄する必要があります。 この場合、グリッド列とヘッダーもクリアされ、再作成されます。 グリッドの RecordSource プロパティがそれ自体に戻された場合でも、グリッドの列とヘッダーのカスタム設定は失われます。

解決方法

列とヘッダーのカスタム プロパティを失わずにグリッドを更新するには、 RecordSource プロパティを、グリッドの基になっているカーソルと同じフィールドで既に作成されているダミー カーソルに設定します。 SELECT-SQL を実行した後、 RecordSource プロパティを再構築されたカーソルに戻します。 これにより、カーソルの再構築中に列とヘッダーのプロパティはそのまま残ります。

状態

この動作は仕様によるものです。

動作を再現する手順の詳細

  1. \Vfp\Samples\Data ディレクトリにある Customer.dbf テーブルを開き、GridForm という名前のフォームを作成します。

  2. フォームの Load イベントに次のコードを配置します。

     SELECT cust_id, city, country FROM customer INTO CURSOR Temp1
     SELECT cust_id, city, country FROM customer WHERE country = "" ;
     INTO CURSOR Temp2
    
  3. フォームの Destroy イベントに次のコードを配置します。

     SELECT Temp1
     USE
     SELECT Temp2
     USE
    
  4. フォームにグリッドを配置し、グリッドに次のプロパティ設定を指定します。

     ColumnCount=3
     RecordSourceType=Alias
     RecordSource=Temp1
    
  5. グリッド 1 のキャプションを変更します。Column1.header1 から Customer Id、Column1 Width プロパティを 100 に設定します。

  6. フォームにテキスト ボックスを追加します。

  7. コマンド ボタンを追加し、Click イベントに次のコードを配置します。

     THISFORM.GRID1.RECORDSOURCE = "Temp2"
     SELECT cust_id, city, country FROM customer ;
     WHERE country = Thisform.text1.value ;
     INTO CURSOR Temp1
     THISFORM.GRID1.RECORDSOURCE = "Temp1"
    
  8. フォームを実行します。 テキスト ボックスに「スペイン」と入力し、コマンド ボタンをクリックします。 グリッドには、国フィールドがスペインと等しいすべてのレコードが表示されます。 列 1 のヘッダーの名前は同じままで、列の幅は変更されません。 グリッドの RecordSource を Temp2 というカーソルに変更すると、Temp1 カーソルの再構築時に列とヘッダーのプロパティがリセットされません。

  9. コマンド ボタンの Click イベントの 2 つの THISFORM.GRID1.RECORDSOURCE 行をコメントに変更し、コードの最後の行として次を追加します。

     THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
    

フォームを実行した後、テキスト ボックスに国名を入力し、コマンド ボタンをクリックすると、列名が変更され、幅が小さいことに注意してください。