フォームでボタンが押されたときに各レコードから 1 つの部分を削除するクエリを作成しました。しかし、私がやりたいのは、テーブル内のパーツの 1 つが既にゼロになっている場合、ボタンを押すことができないということです。たとえば、ユーザーが 6 つのパーツで構成される「キット」を削除するとします。しかし、ユーザーは、パーツの 1 つが既に 0 になっていることに気付きません。その後、ボタンを押すと、他のパーツが 1 つ減少します。どうすればこれを防ぐことができますか?
2 に答える
彼らが部品/キットを選択したら、データベースを照会して部品が利用可能であることを確認し、それに応じてボタンをロック (解除) する必要があります。これを行うために使用するイベントは、最初に部品をどのように選択しているかによって異なります。
もう 1 つのオプションは、在庫を更新するクエリをトランザクションにラップして、パーツの 1 つが利用できない (またはトランザクション中に利用できなくなった) 場合にロールバックできるようにすることです。
ただし、具体的な例を提供するのに十分な情報はありません。提案だけです。
"ユーザーは、6 つのパーツで構成される「キット」を削除しています。しかし、ユーザーは、パーツの 1 つが既に 0 になっていることに気付きません。 "
これは別の方法でアプローチする必要があると思います。特定のキットに必要なパーツが入手できない場合は、そのキットのコマンド ボタンを押す機会をユーザーに与えないでください。
どうやらどういうわけか、「foo kit」が 6 つのパーツで構成されていることと、それらの 6 つのパーツの正体を判別できるようです。.Enabled
同様のロジックを使用して、フォームの現在のキットですべてのパーツを使用できるかどうかに基づいて、コマンド ボタンを有効/無効にします (そのプロパティを True または False に設定します)。または、フォームのレコード ソースを変更して、すべてのパーツが利用可能なキットのみを表示するようにし、パーツを削除するたびにレコード ソースを再クエリします。
他のユーザーがパーツを同時に更新している可能性がある場合は、Omnikrys が提案したように、フォームの更新をトランザクションにラップして、パーツが利用できなくなったときに試行された一連の更新をロールバックできるようにします。
ところで、あなたはコメントで「キットは別々のテーブルにあります」と言っていました。最初は設計ミスのように聞こえます。ただし、それが実際に適切な決定である場合、このタスクはさらに複雑になる可能性があります。:-(