システムwiki

Office:価格が異なる商品

BigWhee 受付中 最終更新日:2020-09-01 15:46

Accessは初めてです.劇場会社の顧客と製品の請求データベースを作成しています.以下の課題に直面しました.

  • 各製品の価格は、顧客の注文数に応じて異なります.たとえば、1つのショーは£300で、その後の各ショーは£200です.したがって、顧客が3を注文した場合、コストは£300 +£200 +£200になります
  • 各製品は、同様の形式に従って、通貨によって価格も異なります.

これら2つの問題に対応できるようにデータベースを設計するにはどうすればよいですか.ヘルプとアイデアは大歓迎です.ありがとう

返信リスト(回答:4)

1 #
Palcouk

価格は同じですが、注文した数に応じて割引が適用されます.

DBには、コストフィールドと割引フィールドが含まれ、注文番号フィールドには、クエリである実際のinv価格が含まれます

https://www.databaseanswers.org/data_models/index.htm

2 #
KenSher
製品と通貨の表に加えて、次の行に沿って参照表が必要になるとProductPricesは言います
ProductPrices
ProductID(FK)
Currency(FK)
QuantityFrom
QuantityTo
価格
表にはいくつかの重要な候補キーがあります:
ProductID/Currency/QuantityFrom
ProductID/Currency/QuantityTo
ProductID/Currency/Price
これらの1つは主キーを作成すると、他の2つはそれぞれ別の一意のインデックスに含める必要があります.
引用した例では、ProductID値を42とし、通貨がGBPの場合、tableには次の行が含まれます.
42英ポンド1 1 300
42 GBP 2 20 200
2行目の20のQuantityTo値は、注文される可能性のある製品の数量よりも多い、人為的に高い数値です.必要に応じて高くすることができます.
注文が作成されると、注文されたProductIDに等しいProductID、注文された通貨に等しいCurrencyに基づいてProductPricesでPriceを検索するという簡単な問題になります.そしてQuantityFromとQuantityToの間にあるQuantity
値.DLookup関数を呼び出すと、
DLookUp( "Price"、 "ProductPrices"、 "ProductID ="&[ProductID]& "And Currency="""&[Currency]& "" "And"&[Quantity]& 「QuantityFromとQuantityToの間」)
3 #
S.A.Mar

次のような方法でそれを行います:

いくつかのtableが必要になります:

tblCurrency

CurrencyIDS(自動番号)

通貨 (テキスト)

この表は、GBP、US、ユーロなどの通貨タイプ用です

tblProduct

ProductIDS(自動番号)

製品 (テキスト)

このtableには、フィールドが増える可能性がありますが、製品情報、つまりevent1、event 2(劇場イベントの名前)を保持するためのものです

tblProductPrice

ProductPriceIDS (自動採番)

ProductID (数) (tblProductのID)

CurrencyID (数) (tblcurrencyからのID)

PriceFull (通貨)(1チケットの価格、つまり$ 300)

PriceDisc (通貨) (後続のチケットの価格、つまり200ドル)

このtableには、イベント、通貨、定価チケット(シングルチケット)、割引価格(後続チケット)の価格が保持されます.

tblTickets

TicketIDS(自動採番)

製品ID(番号)

CurrencyID番号)

数量 (数)

PriceTotal 通貨

このtableには、チケットの購入が保持されます.価格の合計は計算フィールドであり、通常は保存されませんが、tblproductPriceの価格を変更すると価格が変更されるため、この場合は保存する必要があります

frmTicket

recordsource=tblTickets

txtTicketIDS

cboProductID(コンボボックスrowsource=tblProduct)

cboCurrencyID(コンボボックスrowsource=tblCurrency)

txtqty (テキストボックス)

txtpriceTotal (テキストボックス)

txtqtyの更新後のイベントとフォームの現在のイベントのフォームに次をコピーして貼り付けます:

Dim IntProduct As Integer
Dim CurCurrencyType As Integer
Dim Intqty As Integer
IntProduct=Me.cboProductID
CurCurrencyType=Me.cboCurrencyID
Intqty=Me.txtqty
Me.txtPriceTotal=TicketTotal(IntProduct、CurCurrencyType、Intqty)

モジュールに次のコピーを貼り付けます:

通貨としてのパブリック関数TicketTotal(TicketProduct As Integer、TicketCurrency As Integer、TicketQty As Integer)

Dim db As DAO.Database

Dim rs As DAO.Recordset

Dur curTicketTotal As Currency

Dur CurTicketFull As Currency

Dur CurTicketDisc As Currency

Dim strsql As String

Set rs=CurrentDb.OpenRecordset( "TblProductprice"、dbOpenDynaset)

rs.FindFirst "productID ="&TicketProduct& "AND CurrencyID ="&TicketCurrency

rs.NoMatchでない場合

CurTicketFull=rs!PriceFull

CurTicketDisc=rs!priceDisc

その他

MsgBox "一致するイベントまたは通貨が見つかりませんでした"

終了の場合

rs.Close

Set rs=Nothing
Set db=Nothing
ケースのチケット数を選択
ケース1
TicketTotal=CurTicketFull
ケースは>1
TicketTotal=CurTicketFull +((TicketQty-1)* CurTicketDisc)
選択を終了
関数を終了

これにより、お客様が購入したチケットの合計は3になります.つまり、顧客が購入した3つのチケットは、最初のチケットが300ドル、その後の割引チケットが200ドルで、合計が700ドルです

上記の表は、使用する方法に関係なく必要なものの基本です.ケンの答えも問題なく機能します(ただし、3つのチケットでは$ 700ではなく$ 600になります)が、単一のチケットを取得するには少しコードを書く必要があります
上記のselect caseステートメントで行ったのと同様に、値、後続のチケット値、それらを加算します.

4 #
S.A.Mar
こんにちはビッグホイール、これは解決されましたか?