0

フォームの vfp9 にグリッド コントロールがあります。そして、現在のレコードを(パックで)削除するボタンがあります。レコードを削除した後、グリッドはリソースを見つけられません。空の長方形のみが残ります。私はこのようなものを作りました: DELETE ALL PACK GO TOP thisform.grid1.Refresh

、しかし効果なし。前もって感謝します。

4

3 に答える 3

1

Tamar が述べたように...パックは、日常の活動では本当に悪いです。ただし、レコードを永久に削除するために毎晩処理される管理タスクまで、通常のすべての操作でレコードを「非表示」にできる「設定」があります...

SET DELETED ON
SET DELETED OFF

「ON」にすることで (アプリケーション全体で 1 回だけ実行する必要があります。プライベート データ セッションを扱うフォームを扱っている場合を除き、そこでも実行する必要があります。SET DELETED ON は、VFP に、マークされたすべてのレコードを非表示にします)画面が乱雑にならないように削除するため. また、あらゆるタイプの SQL クエリからもそれらを非表示に保つため、削除のマークが付けられたレコードを取得することはありません.

SET DELETED OFF により、非表示がオフになり、削除されたすべてのレコードを再び表示できるようになります。これは、誤ってレコードを削除するようにマークし、それを「RECALL」する必要がある場合 (削除を取り消す) に備えてあります。

さて、それはすべて言った。条件を見つけた後に設定したフィルターなど、レコードに削除のマークを付けたり、すべて削除、パックを実行したりすると、それは悪いことです...

ボタンのクリックイベントで必要なのは、

DELETE
Thisform.YourGridObject.Refresh()

レコードはリストから視覚的に削除する必要があります。PACK を発行すると、実際にはテーブルが閉じられるため、グリッドから自身をアンバインドし、削除されたすべてのレコードを削除してから、クリーン バージョンを介して自身を再度開きますが、グリッドに自動的に再バインドしません。

于 2012-05-26T12:12:13.257 に答える
1

問題は、グリッドの RecordSource を再作成していて、それが気に入らないことです。あなたが何をしているかについて詳しく知らなければ、具体的なアドバイスを提供することは困難です. ただし、通常のアプリケーション アクティビティでテーブルをパックするのは、一般的に悪い形式と考えられています。通常、PACK は、テーブルへの排他的アクセスを必要とするため、営業時間外に実行される管理コード用に予約されています。

ここでのあなたの目標は何ですか?グリッドの基になっているテーブル内のすべてのレコードを削除するのはなぜですか?

タマル

于 2012-05-25T20:33:05.853 に答える
1

VFP グリッドは、レコードソースがそのように変更されることを嫌います。

グリッド レコードソースを切断 (つまり、"" に設定) し、操作を行ってから、レコード ソースをリセットして更新する必要があります。

于 2012-05-27T22:58:25.083 に答える