フォームの vfp9 にグリッド コントロールがあります。そして、現在のレコードを(パックで)削除するボタンがあります。レコードを削除した後、グリッドはリソースを見つけられません。空の長方形のみが残ります。私はこのようなものを作りました:
DELETE ALL
PACK
GO TOP
thisform.grid1.Refresh
、しかし効果なし。前もって感謝します。
フォームの vfp9 にグリッド コントロールがあります。そして、現在のレコードを(パックで)削除するボタンがあります。レコードを削除した後、グリッドはリソースを見つけられません。空の長方形のみが残ります。私はこのようなものを作りました:
DELETE ALL
PACK
GO TOP
thisform.grid1.Refresh
、しかし効果なし。前もって感謝します。
Tamar が述べたように...パックは、日常の活動では本当に悪いです。ただし、レコードを永久に削除するために毎晩処理される管理タスクまで、通常のすべての操作でレコードを「非表示」にできる「設定」があります...
SET DELETED ON
SET DELETED OFF
「ON」にすることで (アプリケーション全体で 1 回だけ実行する必要があります。プライベート データ セッションを扱うフォームを扱っている場合を除き、そこでも実行する必要があります。SET DELETED ON は、VFP に、マークされたすべてのレコードを非表示にします)画面が乱雑にならないように削除するため. また、あらゆるタイプの SQL クエリからもそれらを非表示に保つため、削除のマークが付けられたレコードを取得することはありません.
SET DELETED OFF により、非表示がオフになり、削除されたすべてのレコードを再び表示できるようになります。これは、誤ってレコードを削除するようにマークし、それを「RECALL」する必要がある場合 (削除を取り消す) に備えてあります。
さて、それはすべて言った。条件を見つけた後に設定したフィルターなど、レコードに削除のマークを付けたり、すべて削除、パックを実行したりすると、それは悪いことです...
ボタンのクリックイベントで必要なのは、
DELETE
Thisform.YourGridObject.Refresh()
レコードはリストから視覚的に削除する必要があります。PACK を発行すると、実際にはテーブルが閉じられるため、グリッドから自身をアンバインドし、削除されたすべてのレコードを削除してから、クリーン バージョンを介して自身を再度開きますが、グリッドに自動的に再バインドしません。
問題は、グリッドの RecordSource を再作成していて、それが気に入らないことです。あなたが何をしているかについて詳しく知らなければ、具体的なアドバイスを提供することは困難です. ただし、通常のアプリケーション アクティビティでテーブルをパックするのは、一般的に悪い形式と考えられています。通常、PACK は、テーブルへの排他的アクセスを必要とするため、営業時間外に実行される管理コード用に予約されています。
ここでのあなたの目標は何ですか?グリッドの基になっているテーブル内のすべてのレコードを削除するのはなぜですか?
タマル
VFP グリッドは、レコードソースがそのように変更されることを嫌います。
グリッド レコードソースを切断 (つまり、"" に設定) し、操作を行ってから、レコード ソースをリセットして更新する必要があります。