Office:価格が異なる商品
Accessは初めてです.劇場会社の顧客と製品の請求データベースを作成しています.以下の課題に直面しました.
- 各製品の価格は、顧客の注文数に応じて異なります.たとえば、1つのショーは£300で、その後の各ショーは£200です.したがって、顧客が3を注文した場合、コストは£300 +£200 +£200になります
- 各製品は、同様の形式に従って、通貨によって価格も異なります.
これら2つの問題に対応できるようにデータベースを設計するにはどうすればよいですか.ヘルプとアイデアは大歓迎です.ありがとう
返信リスト(回答:4)
価格は同じですが、注文した数に応じて割引が適用されます.
DBには、コストフィールドと割引フィールドが含まれ、注文番号フィールドには、クエリである実際のinv価格が含まれます
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の間」)
次のような方法でそれを行います:
いくつかの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ステートメントで行ったのと同様に、値、後続のチケット値、それらを加算します.
関連質問
- BitLockerコードの援助
- ネットワーク共有コピー上のMSアクセスへの変更は、ローカルコンピュータにコピーされたときの変更を失います.
- MS Accessのテキストへのスピーチ
- Microsoft Office 365でMicrosoft Office 10で作成したファイルをどのように開くのですか?
- どのフォーム/サブフォームが開いているかに応じて変数を変更する
- キーワットイベントキーワード検索に関するスペースを受け入れない
- Access 2019フォームの下部にあるレコードナビゲーションバー
- アクセスエラーコード3734 "データベースは、それが開かれたりロックされたりするのを防ぐために、マシン上のユーザー 'admin'によって状態に置かれました.
- データベースパスワードを要求しているMicrosoft Access
- トピックアクセスに滞在できますか?