0

最初に、いくつかの背景を説明します。私は Excel での作業に慣れており、それを使用して世界構築の趣味のために生産計算機を作成しています。最近、計算が必要なデータが多すぎるという問題が発生したため、最終的にあきらめて、すべてを Access に切り替えてみました。

私は Access の使用方法についていくつか読んでおり、それに基づいて次のことを決定しました。

1)特定の生産レベル(1、2 ...)を持つ地域(寒帯、温帯...)の温度テーブルがあります

2) 特定の生産レベル (1、2...) を持つ地域 (湿潤、乾燥...) の降水量表があります。

3) 次に、上記の地域を混合して、次のフィールドを持つバイオームを作成するバイオーム テーブルを作成します

- 降水量 (表 2 のドロップダウン メニュー)。
- 温度 (表 1 のドロップダウン メニュー)。
- 生産性レベル (表 2 の降水生産レベルに表 1 の温度生産レベルを掛けたもの)。

質問: 表 3 の生産性レベルを自動化するにはどうすればよいですか?

注 1: 私は VBA を知りません。Access を使用するのはこれが初めてです。

注2:テーブル3をフォームとして作成するように言われましたが、それは私がやりたいことではうまくいかないと思います。関連する可能性がある場合に備えて (そして、明らかなことはわかりません)、次に、このデータベースを構築する最初の目標について説明します。

データ入力フォーム: 以下で参照されるすべての表は、緯度経度の連結によって接続されています。私はそれを部分的に (メイン フォームと都市サブフォーム) 正常にビルドしました。
- 緯度、経度、地形の 3 つのフィールドを持つテーブルに基づくメイン フォーム。
- 3 つのフィールドを持つテーブルに基づくサブフォーム: 都市名、設立日、崩壊日。
- 3 つのテーブルに基づく 3 つのサブフォーム。それぞれが期間を表し、2 つのフィールドがあります: バイオーム (バイオームは期間に応じて特定の領域で変化します)、およびその生産性レベル。

世界を構築し、座標ごとに調整したら、次の段階に進みます - 植物や動物、さらにそれらから派生した製品とその生産性レベルを特定するテーブルを作成します。これを使用して、私の世界の経済システムと、さまざまな富レベルのキャラクターのリストを作成します。

これは、Excel で (VBA を使用せずに) ある程度簡単に機能させることができますが、データ量が多いため、使用する前にファイルが壊れてしまいます。Access でうまくやっていけたらいいのですが、この怪物には 1 つずつ対処していきます。今、私は上に投稿した質問に集中しています。あなたが私に与えることができるかもしれないどんな援助にも感謝します.

4

1 に答える 1

1

biome指定された列のテーブルにデータを入力すると、3番目のテーブルの計算が「トリガー」されることを意味するデータベーストリガーが必要です。Access はトリガーをサポートしていませんが、回避策があります。フォームを使用して、トリガー属性のテキストボックスにイベントを作成します。

  • テーブルに基づいて新しいフォームを作成しますbiome。最初にトリガーを機能させることをお勧めします。後で、すべてのサブフォームとともにフォームに追加できます。Access を初めて使用する場合は、サブフォームをすぐに処理する必要はありません。必要以上にすべてが複雑になるからです。
  • テキストボックスの名前を Precipitation、Temperature、ProductivityLevel のようなものに変更しますtxtPrecipitation txtTemperature txtProdLevel
  • VBA エディターを開き、新しいフォームで次のコードを試します。

.

'Trigger Events
private sub txtTemperature_Change()
call CalculateProductivityLevel()
end sub
private sub txtPrecipitation_Change()
call CalculateProductivityLevel()
end sub
private sub txtTemperature_AfterUpdate()
call CalculateProductivityLevel()
end sub
private sub txtPrecipitation_AfterUpdate()
call CalculateProductivityLevel()
end sub

'Calculation Procedure
private sub CalculateProductivityLevel()
  'Check if both attributes have values. If not do not calculate anything
  if (Len(me.txtTemperature & "") = 0) OR (Len(me.txtPreciperation & "") = 0) Then 
    exit sub
  else
    me.txtProdLevel = me.txtTemperature * me.txtTemperature
end sub

ノート

  • トリガー イベントは、2 つの属性に新しいエントリがあるか、新しいエントリが保存されると、計算手順を呼び出します。
  • コードを VBA エディタの新しいフォーム タブに配置してください。
  • テストされていないコードなので、エラーが発生する可能性があります
于 2016-11-14T02:47:04.493 に答える