商品検索 商品テーブルを元にフォームを作る。デザインビューで新規にフォームを作って、 レコードソースを商品テーブルにする。フィールドリストから商品テーブルのフィールドを ドラッグ&ドロップ。フォームを右クリックしてフォームヘッダーを表示、フォームフッターは 高さを0にする。既定のビューを帳票フォームにする。フォームヘッダーにテキストボックスを 作ってラベルの文字とテキストボックスの名前を商品名検索に変える。 テキストボックス商品名検索の更新後処理をイベントプロシージャに変えて 右に出る[...]をクリックしてVBAのウインドウを表示、そこに以下をコピペする。 Private Sub 商品名検索_AfterUpdate() If Me![商品名検索] <> "" Then Me.RecordSource = "SELECT 商品テーブル.* FROM 商品テーブル WHERE (((商品テーブル.商品名) Like '*" & Me![商品名検索] & "*'));" else Me.RecordSource = "SELECT 商品テーブル.* FROM 商品テーブル" End If End Sub 1行目と7行目はウインドウを開いたときに既に入力されている状態だと思うので 間の2〜6行をコピペする。これで商品名検索に商品名の一部を入力してEnterを押すと 商品が検索され、商品名検索をからにしてEnterすると全商品を表示する。 なお、SELECT 商品テーブル〜中略〜& "*')); をクエリをSQLビューで表示したものに コピペしてデザインビューでみると多少勉強になる。デザインビューで並べ替え等を 選択して、SQLビューに戻して、改行を半角スペースで置き換えたものと 入れ替えることもできるよ。 このフォームは商品検索という名前で保存しておく。
顧客検索 商品検索と同様に作る。新規フォームのレコードソースを顧客テーブルにして、 フィールド持ってきてヘッダーに顧客名検索テキストボックス作って 更新後処理のイベントプロシージャに Private Sub 顧客名検索_AfterUpdate() If Me![顧客名検索] <> "" Then Me.RecordSource = "SELECT 顧客テーブル.* FROM 顧客テーブル WHERE (((顧客テーブル.顧客名) Like '*" & Me![顧客名検索] & "*'));" Else Me.RecordSource = "SELECT 顧客テーブル.* FROM 顧客テーブル" End If End Sub をコピペ。同じようにTEL検索とかテーブルに顧客名ふりがなを追加して ふりがな検索等作っても良いね。 このフォームを顧客検索という名前で保存。
販売履歴サブ販売明細 販売履歴を入力するフォームを作るんだけど、まずサブフォームから。 新規フォームを作ってレコードソースを販売明細テーブルに、 既定のビューを帳票フォームにする。フィールドリストから全部持ってきて 明細IDと履歴IDはページヘッダーに移動する。 商品IDのラベルを商品名にして、商品IDを右クリック、コントロールの種類の変更で コンボボックスに変える。名前とコントロールソースは商品IDのまま変更しないでね。 商品IDコンボボックスの列数を2に、列幅を0cm;3cm、リスト行数を100、値集合ソースを 商品テーブルに変える。値集合ソースの右に出る[...]をクリックするとクエリビルダが 起動するので商品名順に並べ替えとかできるよ。 商品IDコンボボックスの更新後処理のイベントプロシージャに Private Sub 商品ID_AfterUpdate() Me![販売単価] = DLookup("単価", "商品テーブル", "商品ID =" & Me![商品ID]) End Sub をコピペ。これで、商品IDコンボボックスの▼をクリックすると商品名がズラリ。 選ぶと販売単価に単価の値段が入力される。テキストボックスを追加して名前と表題を 小計とする。コントロールソースに =[販売単価]*[個数] と入力。書式を通貨にする。 名前を販売履歴サブ販売明細として保存。 で、さっき作った商品検索との連携。モジュールの新規作成で以下をコピペ。 Public ShohinID As Long Public ShohinTanka As Long 商品情報モジュールとでも名前つけて保存。 フォームの商品検索に新規でコマンドボタンを作って、名前と表題を商品選択に変更。 クリック時のイベントプロシージャで、 Private Sub 商品選択_Click() If IsNull(Me![商品ID]) = False Then ShohinID = Me![商品ID] ShohinTanka = Me![単価] Else ShohinID = 0 ShohinTanka = 0 End If End Sub とする。フォームの販売履歴サブ販売明細にコマンドボタンを追加して名前と表題を 選択商品を貼付とする。クリック時のイベントプロシージャに Private Sub 選択商品を貼付_Click() Me![商品ID] = ShohinID Me![販売単価] = ShohinTanka End Sub をコピペ。これで、商品検索で商品を探して商品選択をクリック。販売履歴サブ販売明細の 選択商品を貼付をクリックすると選択した商品を貼り付けることができる。
計算用のクエリを作る。新規でクエリを作ってSQLビューにして以下を貼りつけ。 SELECT [販売明細テーブル].[履歴ID], [販売明細テーブル].[商品ID], [販売明細テーブル].[販売単価], [販売明細テーブル].[個数], [販売単価]*[個数] AS 小計 FROM 販売明細テーブル; 販売明細小計クエリとして保存。もう一つクエリを作ってSQLビューに以下をコピペ。 SELECT 販売明細小計クエリ.履歴ID, Sum(販売明細小計クエリ.個数) AS 総個数, Sum(販売明細小計クエリ.小計) AS 金額 FROM 販売明細小計クエリ GROUP BY 販売明細小計クエリ.履歴ID HAVING 販売明細小計クエリ.履歴ID=Forms![販売履歴]![履歴ID]; 販売明細小計の合計クエリとでも名前をつけて保存。このクエリを元にフォームを作って 全部のフィールドを持ってきて販売履歴計算用として保存する。 フォームの販売履歴にコマンドボタンを作って、名前と表題を「計算」とでもしておこう。 この計算ボタンのクリック時に以下をコピペ。 Private Sub 計算_Click() DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 DoCmd.OpenForm "販売履歴計算用" Me![総個数] = Forms![販売履歴計算用]![総個数] Me![金額] = Forms![販売履歴計算用]![金額] Me![消費税] = Me![金額] * Shohizei / 100 Me![請求額] = Me![金額] + Me![消費税] DoCmd.Close acForm, "販売履歴計算用" End Sub あ、新規モジュールで消費税を作るの忘れてた。モジュールを新規で作って、 Public Function Shohizei() As Integer Shohizei = 5 End Function をコピペして、消費税と名前をつけて保存。将来消費税率の変更があったらここを変える。
過去の販売履歴 過去の販売履歴を参照するボタンを作る。以下を新規クエリのSQLビューに貼りつけ。 SELECT 販売履歴テーブル.販売日, 商品テーブル.商品名, 販売明細テーブル.販売単価, 販売明細テーブル.個数 FROM (販売履歴テーブル INNER JOIN 販売明細テーブル ON 販売履歴テーブル.履歴ID = 販売明細テーブル.履歴ID) INNER JOIN 商品テーブル ON 販売明細テーブル.商品ID = 商品テーブル.商品ID WHERE 販売履歴テーブル.顧客ID=Forms![顧客検索]![顧客ID]; 過去の販売履歴という名前で保存。顧客検索にコマンドボタンを作って、名前と表題を 過去の販売履歴としてクリック時のイベントプロシージャを Private Sub 過去の販売履歴_Click() DoCmd.OpenQuery "過去の販売履歴" End Sub と、する。とりあえずこんなもんでそれなりになると思うんだけど、どうかな。