1

特定のボタンをクリックするとレポートが作成されるデータベース/アプリを作成しました。ちょうど今、2 人がまったく同時にボタンを押すことに成功し、あらゆる種類の良くないことを引き起こしました。

1 人がクリックしたボタンをインスタンス間で非表示にする方法はありますか? または、データベースをロックして、最初にクリックした人が完了するまで何もできないようにする方法はありますか?

解決策 (基本的には、レポートの作成を停止するグローバル チェック変数) がありますが、他の 2 つのオプションのいずれかを実行できるかどうかを知りたいです。

4

2 に答える 2

1

ここであなたのアーキテクチャについてもっと知ることは本当に助けになるでしょう。どのデータベースですか?アプリケーションをどの言語で作成しましたか?同時読み取りは通常、ほとんどのマルチユーザーデータベースの重要で基本的な機能です。

ダニエル・クックの一般的な概念を支持し、少し説明するかもしれません。ボタンにレポートを直接実行させないでください。開始日時と終了日時を持つ新しいレコードでレポートの「実行」を表す特別な目的のテーブルを最初にチェックする小さなサブルーチンを実行します。終了日がない(null)レコードがテーブルにある場合は、レポートがまだ実行されている必要があるため、レポートを開始せず、代わりにボタンをオフにしてください。それ以外の場合は、同じテーブルに挿入してから、レポートの実行を開始します。これに、同じチェックを実行するためにそのボタンで定期的であまり頻繁ではないコールバックを追加すると、近いものがありますが、「リアルタイム」ではありませんが、ほとんどのアーキテクチャで機能するはずです(セッション管理機能)。

于 2012-09-17T22:56:23.463 に答える
1

これが私がしたことです:

    If DLookup("PayLock", "table", "pkID=1") Then 'it's locked - exit
        MsgBox "Someone else has already started the pay process.", vbOKOnly
        Exit Sub
    Else
        blah blah blah......

テーブルの「PayLock」フィールドには、check 変数が保持されます。「Else」の後には、ボタンがクリックされたときに実行される実際のコードが続きます。

参考までに、彼らは尋ねられたので:

  • 分割データベースです
  • 複数のユーザーがいます
  • はい、レポートはデータを読み取って Excel スプレッドシートにエクスポートするだけです。
これが機能する唯一の解決策のように見えますが、洗練されていないようです。自分の知識不足を回避する方法が、それを行う実際の方法であることを発見し続けています...

于 2012-09-19T15:33:40.937 に答える