0

フォームでボタンが押されたときに各レコードから 1 つの部分を削除するクエリを作成しました。しかし、私がやりたいのは、テーブル内のパーツの 1 つが既にゼロになっている場合、ボタンを押すことができないということです。たとえば、ユーザーが 6 つのパーツで構成される「キット」を削除するとします。しかし、ユーザーは、パーツの 1 つが既に 0 になっていることに気付きません。その後、ボタンを押すと、他のパーツが 1 つ減少します。どうすればこれを防ぐことができますか?

4

2 に答える 2

2

彼らが部品/キットを選択したら、データベースを照会して部品が利用可能であることを確認し、それに応じてボタンをロック (解除) する必要があります。これを行うために使用するイベントは、最初に部品をどのように選択しているかによって異なります。

もう 1 つのオプションは、在庫を更新するクエリをトランザクションにラップして、パーツの 1 つが利用できない (またはトランザクション中に利用できなくなった) 場合にロールバックできるようにすることです。

ただし、具体的な例を提供するのに十分な情報はありません。提案だけです。

于 2012-09-13T14:22:30.140 に答える
1

"ユーザーは、6 つのパーツで構成される「キット」を削除しています。しかし、ユーザーは、パーツの 1 つが既に 0 になっていることに気付きません。 "

これは別の方法でアプローチする必要があると思います。特定のキットに必要なパーツが入手できない場合は、そのキットのコマンド ボタンを押す機会をユーザーに与えないでください。

どうやらどういうわけか、「foo kit」が 6 つのパーツで構成されていることと、それらの 6 つのパーツの正体を判別できるようです。.Enabled同様のロジックを使用して、フォームの現在のキットですべてのパーツを使用できるかどうかに基づいて、コマンド ボタンを有効/無効にします (そのプロパティを True または False に設定します)。または、フォームのレコード ソースを変更して、すべてのパーツが利用可能なキットのみを表示するようにし、パーツを削除するたびにレコード ソースを再クエリします。

他のユーザーがパーツを同時に更新している可能性がある場合は、Omnikrys が提案したように、フォームの更新をトランザクションにラップして、パーツが利用できなくなったときに試行された一連の更新をロールバックできるようにします。

ところで、あなたはコメントで「キットは別々のテーブルにあります」と言っていました。最初は設計ミスのように聞こえます。ただし、それが実際に適切な決定である場合、このタスクはさらに複雑になる可能性があります。:-(

于 2012-09-13T15:55:35.113 に答える