1

テーブルの1つのフロントエンドとして機能するフォームがあります。このテーブルは、他のほとんどすべてのテーブルが関連している最上位のテーブルと考えてください。このフォームに入力したら、特に他のテーブルにも入力したら、誰かが戻ってきて、そのトップレベルフォームの一部のフィールドを編集してほしくないのです。そうすることで、システム全体のロジックが実際に変更されます。これは、所有しているさまざまな輸送機器の過去の保守記録のデータベースがあり、20年後に1台の車両を車から飛行機に変更した場合と似ています。歴史的な記録はもはや意味をなさないでしょう。

ですから、レコードを保存した後、特定のフィールドを編集したくない場合は、それを希望します。レコード全体を削除して最初からやり直すことはOKであり、他のフィールドを変更することもOKです。特定のフィールドを変更しないだけです。さらに、ユーザーが初めてレコードを作成する場合は、気が変わっても問題ありません。しかし、レコードが保存されたら、それで終わりです。

私は主に、VBAを使用してフォームレベルでこれを防ぐことに関心があります。データベースレベルで保護することは不可能だと思います。

私はOnCurrentの何かのように考えており、自動インクリメントIDがnullであるかどうかを確認し、編集はOKですが、IDに値がある場合、編集はありませんか?

4

2 に答える 2

2

タグプロパティは、多くの場合便利です。

For Each ctl In Me.Controls
    If ctl.Tag = "SysLock" Then
        ctl.Locked = (Not Me.NewRecord)
<...>

その後、テーブルに作成タイムスタンプと更新タイムスタンプがあることを確認することをお勧めします。これらが書き込まれると、編集を防ぐことができます。たとえば、過去30分以内に作成されたレコードはフェアプレーである可能性があります。

于 2012-08-08T18:54:37.410 に答える
1

OnCurrentでさえある種のVBAを指定して、表示されているレコード内のデータの存在を探すことができます-次に、入力ボックスをEnabled=NoおよびLocked=Yesに変更するように指示します-そのように、これらのフィールドに入力するデータであり、タブオーダーで選択することもできません(私が正しく覚えている場合)。

于 2012-08-08T18:39:39.440 に答える