• 締切済み

access テーブルへのデータ入力について

只今accessにて受発注のデータベースを作っておりますが、初心者でつまずいているため、ご教授ください。 商品テーブルに仕入単価が入っています。受注テーブルには仕入金額を入力する欄があります。普通なら、仕入単価と受注の数量をクエリで計算させて様々に加工、使用していくと思うのです。しかし、仕入単価は一応1年単位で決まっていますが、原材料の価格によって変動がある場合があります。 そこで、納品書の入手時点で仕入金額を入力しようと考えていますが、基本的には商品テーブルの単価使用したいので、フォームの仕入金額を入力する規定値に商品テーブルからの単価で計算させ、違った場合は手入力という形にしたいと思っています。 規定値に =[数量]*[単価](このフォーム自体のレコードソースが各テーブルをつなげた参照クエリです。) と設定しましたがname?エラーが返ってきています。 どうしたらいいでしょうか?この方法に限らず、単価変動がある場合の金額をどのようにすれば管理できるか案がありましたらお教えください。

みんなの回答

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

既定値を設定するなら、新規レコードで DLookup 関数 - Microsoft Office Online http://office.microsoft.com/ja-jp/access/HA012288251041.aspx にて、設定するパターンかな? しかし、質問している内容から・・・ > =[数量]*[単価] は、[数量]、[単価]に、値が入ってる前提 これは、既定値があるのか?それとも既に、新規レコードではないのか? 既定値で対応するには、無理があるんじゃないかな?と、思いますけどね レコードで、コントロールの更新後処理で、数量が入力されてれば、その計算結果を、あるテキストボックスに書き込むパターンのようなね^^;

noname#110201
noname#110201
回答No.1

規定値には計算式は入れられないのかもしれません。 私も、あれっと思って試行錯誤したことがあります。 そのときどう解決したかは忘れました。 ただ、今、単に思いついただけですが、その「=[数量]*[単価]」はクエリの方に書いておいたらどうでしょう。 それで、規定値にはそのクエリの計算式のフィールドを参照させます。 多分、いけると思うのです。(いかなかったら、ごめん) 価格変動がある場合、私なら、下の2つの方法から選びます。 1) 商品テーブルの単価は、常に『今』のもととし、受注テーブルの方に、そのときの単価を書いておく。単価を手で入力すると間違いが起こりそうですし、商品テーブルに書いてあるものをまた書き直すのはユーザーに不評でしょうから、更新時イベントか何かで、商品テーブルの単価を、受注テーブルに自動的に書き込むようにすると良いでしょう。 ただ、この方法は、価格改定の履歴がデータベースに残らないとか、そのために、古い受注に適用した単価が正しいのかどうかわからない、などちょっと使い勝手が悪いです。 でも、作るのは簡単なので、とりあえずでいいデータベースなら、私はこの方法でやります。 ただ、長く使うものなら、次の方法があります。 2) 単価テーブルを別に作って、いつからいつまでの単価が幾らなのか、書いておく。具体的には、例えば、商品ID・単価・適用開始日・適用終了日・備考 というようなフィールドからなるテーブルをイメージしています。それで、受注日に応じて(どの日付の単価を適用することになっているのか知りませんが、たぶん受注日ですよね?)、どの単価を適用するかクエリ(ないし自分でつくった関数)で探します。

uniikura10
質問者

補足

早速の回答ありがとうございます。 レコードソースのクエリに仕入額を作り、そこに仕入額:[数量]*[仕入単価]を式で入れました。 次にフォームで仕入金額フィールドのコントロールソースは受注テーブルの仕入金額、規定値にクエリで作った仕入額を式ビルダで参照させました。 =[Q_明細]![仕入額]としたのですが、式の作り方自体が間違ってるのか何も表示されません。 また、適応日の件も考えてみたのですが、基本の金額は変わらず、変則的に単価が変わるので、今日とあさってでは金額が違ったり3日後には基本の単価に戻ったりということがあるので、単価テーブルで管理するのは頻度が多すぎて面倒だと思い、見送りました。