C請求書番号のテーブルを作る
前項で作成した請求書フォームに入力する請求書番号、発行日などを記録するテーブルを作成し、これらのデータをテーブルに保存する処理を作成します。
1 請求書番号テーブルのフィールド
請求書フォームには、販売した商品の一覧や金額などの集計値を表示しなければなれませんが、これについてはあとで考えるとして、図2.120の内容だけを考えることにしましょう。
現在、表示されている情報は、請求書番号、発行日、顧客名、自社名の4つの項目です。自社プロフィールとして本社や支店を選択できるようにしましたが、多くの場合は自社名は変更する必要がないので、記録する情報から除外しておくことにします。したがって、請求書番号テーブルに必要な情報は、次の3つになります。
請求書番号:1から始まる連続番号を使う。データ型はオートナンバー型
発行日 :日付形式のデータ。データ型は日付/時刻型
顧客名 :文字を入力するのでテキスト型

ac7h137z
2 請求書番号テーブルを作成する
上記のフィールドで新規テーブルを作成します。フィールド数が少ないので、デザインビューで新規作成することにしましょう。フィールドの設定は、表2.2のようにします。
表2.2 請求書番号テーブルのフィールド
フィールド名 データ型
請求書番号 オートナンバー型(このフィールドを主キーに設定)
発行日 日付/時刻型
顧客名 テキスト型
データベースウィンドウを開いて[テーブル]タブをクリックし、テーブルウィンドウを表示して[新規作成]ボタンを押して操作します。あるいは以下操作の@〜Bの操作で新規テーブルを開いて操作を進めます。
>操作
@ [テーブル]をクリック
A[デザインビューでテーブルを作成する]を作成する
B[開く]をクリックする
図2.121 デザインビューで新規にテーブルが開く
C フィールド「請求書番号」を作る(このフィールドを主キーに設定)
図2.122 D フィールド「発行日」を作る
図2.123 E フィールド「顧客名」を作る
F 「顧客名簿」テーブルに設定した同じフィールドサイズを指定する
G [×]ボタンをクリックしてテーブルを閉じる
図2.124 H [はい]をクリックする
図2.125 I テーブル名を入力して[OK]をクリックする
テーブルを閉じるときのメッセージで保存操作を行います。テーブル名は「請求書番号」とします。
![]() |


AC7H138Z
![]() |



AC7H139Z
AC7H140Z
![]() |
|||
![]() |
|||

AC7H141Z
![]() |

AC7H142Z



AC7H143Z
●テーブルの内容を確認する
作成した請求書番号テーブルをデータシートビューで開いて、正しく作成されていることを確認します。
>操作
図2.126@「請求書番号」をクリックして反転表示にする
A[開く]をクリックする
図2.127 テーブルが開く
B[×]ボタンをクリックしてテーブルを閉じる
以上の操作で請求書番号テーブルは作成できましたが、フォームとの関連付けを行っていないので、請求書フォームで顧客名を選択したり、請求書番号や発行日を入力しても、請求書番号テーブルには反映されません。162ページの「3 表示内容をテーブルに連結する」でフォームとテーブルの関連付けを行うことにします。
AC7H144Z
AC7H145Z
Dフォームのレコードソースを変更する
120ページから155ページまでで作成した請求書フォームのレコードソースは顧客名簿テーブルです。しかし、請求書フォームの目的は、顧客ごとの情報を入力することではなく、請求書を発行するための情報を入力することです。ですから、請求書は顧客ごとにまとめて発行するのではなく、受注ごとに発行すると考えたほうがよいということになります。
請求書フォームのレコードソースを、請求書番号テーブルに変更する方法を解説します。
1 請求書番号で管理する
請求書には、顧客名、請求書番号、発行日などが記入されています。ふつうは1種類の請求書用紙を使用し、顧客によって相手先の名前を記入します。すなわち、請求書用紙はフォームと考えることができます。
請求書は、○○会社の○月○日分の販売についての請求書というように、1回の取引ごとに請求書を発行します。請求書のキーは、○月○日・取引先は○○会社という1回のる取引です。
これによって、販売データをまとめる場合に、○日の売上合計は○○円、今月分の○○会社の売上合計は○○円というような、期間ごとの集計処理がしやすくなります。請求書単位で管理するには、請求書フォームのレコードソースを請求書1枚ごとに管理する請求書番号の一覧、すなわち請求書番号テーブルにすることが必要です。
図 P160 図2.128と同じ
2 レコードソースを変更する
フォームのレコードソースは、フォームのプロパティ[レコードソース]で変更します。レコードソースは[データ]タブあるいは[すべて]タブにあります。
>操作
図2.129 デザインビューで請求書フォームを開く
@フォームの左上角の[■]ボタンを右クリックしてショートカットメニューを表示する
A[プロパティ]をクリックする
図2.130 プロパティウィンドウが表示される
B[データ]タブあるいは[すべて]タブをクリックする
ア以前に設定したテーブル名が表示されている
図2.131C[▼]ボタンをクリックしてテーブル一覧を表示する
D目的のテーブル名をクリックする(ここでは「請求書番号」)
図2.132E[×]ボタンをクリックしてプロパティウィンドウを閉じる


AC7H146Z

AC7H147Z

AC7H148Z AC7H149Z AC7H150Z
●レコード番号の表示
フォームのレコードソースを変更した結果を見てみましょう。
>操作
図2.133 [ビュー]ボタンをクリックしてフォームビューに切り替える
アレコード番号の表示が「1」になっている
顧客名の表示がなくなり、レコード番号の表示が「1」になっています。レコードソースを「請求書番号」に変更したため、顧客名簿テーブルの顧客名(テーブル内のフィールド名は「会社名」)が参照できなくなった結果です。そして、請求書番号テーブルに入力されているレコード数として「1」が表示されているのです(データを何も入力していないときでも「1」がひょうじされる)。ここでは、レコードソースを変更しただけなので、データ入力やレコード指定はできません。確認したら、デザインビューにもどします。

AC7H151Z
3 表示内容をテーブルに連結する
フォームの「請求書番号」、「日付」、「顧客名」のテキストボックスとレコードソースのフィールドを連結します。フォームのプロパティ[コントロールソース]を設定すると、データが記録できるようになります。
表2.3 テキストボックスのフィールドの連結
テキストボックス 請求書番号テーブルの連結するフィールド
顧客名 顧客名
請求書番号 請求書番号
発行日 発行日
●テキストボックス「請求書番号」の設定
>操作
図2.134 デザインビューで表示している請求書フォーム
@請求書番号のテキストボックスを右クリックしてショートカットメニューを表示する
アI型のマウスポインタが表示される位置でクリックする
A[プロパティ]をクリックする
図2.135 プロパティウィンドウが表示される
B必要に応じて[データ]タブあるいは[すべて]タブをクリックする
C[コントロールソース]欄をクリックすると[▼]ボタンが表示される
図2.136D[▼]ボタンをクリックするとコントロールソースに設定したテーブルのフィールド一覧が表示される
E一覧から「請求書番号」を選択する
図2.137イフィールド名「請求書番号」が表示される
![]() |
AC7H152Z


AC7H153Z

AC7H154Z AC7H155Z
AC7H156Z
●テキストボックス「発行日」の設定
発効日のコントロールソースを指定して、テーブルと連結します。
>操作
図2.138@発行日のテキストボックスをクリックする
アプロパティウィンドウが「発行日」に切り替わり、タイトル部にテキストボックス名「発行日」が表示される
図2.139A[コントロールソース]に「発行日」を選択する
図2.140イフィールド名「発行日」が表示される(フォームのテキストボックスにも表示される)
AC7H157Z

AC7H158Z AC7H159Z
●テキストボックス「顧客名」の設定
テキストボックス「顧客名」のプロパティ[コントロールソース]に、「顧客名」を設定します。このテキストボックスには、132ページの操作でプロパティ[編集ロック]を[はい]に設定しましたが、このままではデータの変更ができないので[いいえ]に変更します。
>操作
図2.141@テキストボックス「顧客名」をクリックする
アプロパティウィンドウのプロパティ一覧が「顧客名」に変わる
Aプロパティ[コントロールソース]を「顧客名」に設定する
Bプロパティ[編集ロック]を[いいえ]に設定する
以上の操作で、3つのテキストボックスが請求書番号テーブルの各フィールドに連結されました。
コントロールソースには「会社名」が表示されているので、それを顧客名に選びなおします。
AC7H160Z
4 データを入力する
フォームビューに切り替え、データを入力してみましょう。レコードソースを変更する前はレコード番号に合った顧客名(顧客名テーブルのフィールド[会社名])が自動的に表示されましたが、レコードソースを変更したことにより表示されなくなります。つまり、顧客名の欄は、ユーザーが入力するということです。それぞれの入力欄で、[Enter]キーを押すと次の欄が入力可能状態になります。なお、以下の画面では請求書番号の入力欄(テキストボックス)に表示されるオートナンバーの文字が見えるようにサイズを再調整してあります。
>操作
図2.142 請求書フォームをフォームビューで表示する
ア請求書番号はオートナンバー型なのでこのように表示される
図2.143@顧客名を入力して[Enter]キーを押す
イ請求書番号が自動的に振られて、自社名の入力欄が入力可能状態になる
図2.144A[▼]をクリックして自社名を選択
B 自社名の欄で[Enter]キーを押す
図2.145ウ[請求書番号]欄が入力可能状態になる
C請求書番号はすでに自動入力されているので[Enter]キーを押す
図2.146エ[発行日]欄が入力可能状態になる
D日付を入力(ここでは月日を4/16形式で入力)して[Enter]キーを押す
図2.147オ次のレコード(2枚目の請求書)の画面表示になる
カ自社名は、請求書番号のテーブルと連結していないので選択状態は変化しない
自社名は、コンボボックスの[▼]ボタンをクリックして選択します。この欄は外部テーブルである自社プロフィールテーブルを参照しているので、請求書フォームのレコードソースを変更しても変化はありません。自社名を選択して[Enter]キーを押すと、請求書番号の欄が入力可能状態になります。請求書番号はオートナンバー型なのでデータを入力できないにもかかわらず、入力可能状態のようになるのは不適切です。この点は、176ページの「F項目データの入力順を指定する」で解決することにします。
請求書番号の欄で[Enter]キーを押すと、入力したデータが消えたように見えます。これは、最後のフィールドを入力すると、次のレコード、つまり、2枚目の請求書に画面表示が切り替わるからです。レコード番号を見ると、「2」になっているはずです。



AC7H161Z AC7H162Z 

AC7H163Z
![]() |
|||
![]() |
|||


AC7H164Z AC7H165Z



AC7H293Z AC7H166Z
●タブストップ
以上のように、データを入力して[Enter]キーを押すと次の欄が自動的に入力可能状態になることを、タブストップといいます。移動する順番は、コントロールのプロパティ[タブ移動順]で指定します。指定しないと、コントロールを挿入した順になります。
タブストップで移動した最後のコントロールで[Enter]キーを押すと、次のレコードに進みます。図2.146Cの操作で[Enter]キーを押したとき、2枚目の請求書に切り替わった(図2.147)のはこのためです。
タブストップの順番の変更についても、同じく176ページで解説します。
5◆記録されたデータを確認する
フォームに挿入しているテキストボックス顧客名・請求書番号・日付は、請求書番号テーブルと連結しています。データを入力すると、請求書番号テーブルにデータが記録されます。データがどのように記録されたのかを確認しておきましょう。いったんフォームを閉じ、もう一度、請求書番号テーブルを開いて確認します。
なお、フォームの表示中に、[ビュー]ボタンの横の[▼]ボタンをクリックして、[データシートビュー]をクリックすると表示される一覧は、フォームに入力したデータを一覧形式で表示しているだけであって、テーブル内容の表示ではありません。
●フォームを閉じる
データの入力操作がすめば、フォームを閉じます。このとき、保存の確認が表示されたら[はい]を選択して保存します。
>操作
図2.148@フォームの[×]ボタンをクリックする
ア保存確認のダイアログボックスが表示される
A[はい]をクリックする
![]() |

AC7H167Z

AC7H168Z
●請求書番号テーブルを開く
請求書番号テーブルを開いて、フォームで入力したデータがどのようにテーブルに記録されたのかを見ておくことにしましょう。
>操作
図2.149B[テーブル]をクリックしてテーブル一覧に切り替える
C目的のテーブル名[請求書番号]をクリックして反転表示にする
D[開く]をクリックする
図2.150 テーブルが開く
フォームのテキストボックスに入力した内容が、請求書番号テーブルのフィールドに登録されています。このように、連結したテキストボックスにデータを入力すると、連絡先のテーブルにデータが入力されます。フォームにデータが記録されるわけではありません。フォームはテーブルの[窓口]のようなものだということです。確認したらテーブルを閉じておきます。
![]() |




AC7H169Z
AC7H170Z
6◆請求書フォームを検討する
レコードソースを変更した請求書フォームについて、次の3点が課題として残っています。
@顧客名を一覧表示して選択できるようにする
Aオートナンバーの欄で入力可能状態にならないようにする
B自社名はいつも同じ社名を表示するので、固定表示にして選択操作を省く
@については、自社名を選択する方法と同じ方法で一覧から選択できるようにします。これは「Eコントロールの種類を変更する」(170ページ)で解説します。Aについては、「F項目データの入力順を指定する」(176ページ)で解決します。
Bについては、もう少し条件がそろわないと処理できないので、条件が整ったところで解決します(Part3の「D請求書フォームに自社名を表示する」→303ページ)。
キーワード
■外部テーブル いま扱っているデータベースに含まれるテーブルで開いていないもの。また、他のデータベースに含まれるテーブル
?コントロールの種類を変更する
フォームに挿入したテキストボックスコントロールは、リストボックスコントロールやコンボボックスコントロールに変更することができます。
請求書フォームに顧客名を表示するためにテキストボックスを挿入しましたが、コントロールソースを変更したことで顧客名が表示されなくなってしまいました(161ページの「2 レコードソースを変更する」を参照)。一覧形式の表示はテキストボックスではできないので、自社名欄と同じようにコンボボックスを使った一覧表形式はテキストボックスではできないので、自社名欄と同じようにコンボボックスを使った一覧形式に変更しましょう。
テキストボックスを削除して新たにコンボボックスを挿入してもよいのですが、挿入してあるテキストボックスをコンボボックスに変更すると、挿入位置やサイズなどが引き継がれるので操作が簡単です。
1◆テキストボックスをコンボボックスに変更する
変更するテキストボックスを右クリックして表示されるショートカットメニューで操作します。
>操作
図2.151 @ テキストボックスを右クリックしてショートカットメニューを開く
A [コントロールの種類の変更]にマウスポインタを合わせる
B サブメニューの[コンボボックス]をクリックする
図2.152 ア コンボボックスに変更される
![]() |

AC7H171Z
AC7H171Z

2◆プロパティを設定する
コントロールの種類を変更したら、プロパティを適切な内容に設定することが必要です。設定内容を表2.4に示します。コンボボックスのプロパティ設定については142ページの「4 コンボボックスを設定する」を参照してください。
表2.4 プロパティの変更内容
プロパティ名 設定値 意味
値集合ソース 顧客名簿 参照するテーブル名
連結列 2 テーブルからデータを抜き出す列番号 図2.156参照
列数 2 一覧表示させるための列数
列幅 0;5 一覧表示の幅(1列目を0cm、2列目を5cm)にする
プロパティ連結列には、コントロールソースに代入するデータを指定します。つまり、プロパティ[値集合ソース]に指定した「顧客名簿」の一覧から選択したレコードのどのフィールドデータをコントロールソース(ここでは請求書番号テーブルの「顧客名」フィールド)に代入するかを指定します。値は「顧客名簿」の先頭列を1としたフィールド番号(図2.156を参照)で指定します。
>操作
図2.153 顧客名を表示するコンボボックスのプロパティウィンドウを表示する
@[データ]タブをクリックする
A[値集合ソース]に「顧客名簿」を指定する
図2.154 B[連結列]に「2」を入力する
図2.155 C[書式]タブをクリックする
D[列数]に「2」を入力する
E[列幅]に「0;5」と入力する(0と5の間はセミコロンまたはカンマ)
![]() |
|||
![]() |
|||



AC7H173Z AC7H174Z AC7H175Z
プロパティ[値集合ソース] 顧客名簿 プロパティ[連結列] 2 プロパティ[列数] 2
プロパティ[列幅] 0;5
1 2 3 4 5 6 7
↓ ↓ ↓ ↓ ↓ ↓ ↓

↑ AC7H176Z
列数(先頭から2列)
連結列(先頭から2列目)
3◆データの選択と入力
顧客名を選択して、フォームのレコードソースである請求書番号テーブルに顧客名が入力されることを確認しましょう。
フォームビューに切り替えてデータを入力し、請求書番号テーブルに入力されたことを確認します。
>操作
図2.157 フォーム表示をフォームビューに切り替える
図2.158@[顧客名]欄の[▼]ボタンをクリックして顧客名を選択する
ア 選択した顧客名が表示される
図2.159Aレコードボタンをクリックして次のレコードに移る
B[顧客名]欄の[▼]ボタンをクリックして顧客名を選択する
イ 選択した顧客名が表示される
AC7H177Z
![]()

AC7H178Z

AC7H179Z

![]()

AC7H180Z

AC7H181Z
●エラー対策
コンボボックスで顧客名を選択したときやフォームビューに切り替えたときに、図2.160のエラーが表示されることがあります。このエラーは、プロパティ[連結列]で指定した参照先のフィールドと、プロパティ[コントロールソース]に指定したフィールドの種類やサイズが一致しないときに発生します。
[OK]ボタンをクリックしてエラーメッセージの表示を閉じても、マウスを移動すると再び表示されて、先に進めなくなってしまうことがあります。また、フィールドの種類やサイズが一致していても、すでにデータが入力されているとエラーが発生することもあります。
このような場合は、次の操作でエラー表示されなくなるまでデータを書き換えます。図1.157〜図1.158の操作をまちがいなく行っていればエラー表示はありませんが、どのような現象になるのか確かめるために図2.154Bの操作でプロパティ[連結列]に「1」を入力してみましょう(下図 ア)。なお、エラー表示を確認したら、必ず「2」に戻しておきます。

AC7H184Z
>操作
図2.160 エラー表示のダイアログボックスが表示される
@[OK]をクリック、または
エラー原因の欄にマウスポインタを合わせ、[Enter]キーを押してエラーメッセージを閉じる
図2.161 A 正しいデータに書き換えるか、[▼]ボタンをクリックして一覧から選択する
AC7G182Z
![]() |

AC7H294Z
データを入力していないのにエラーが発生する場合は、フィールドの種類やサイズが一致していないことが考えられます。その場合はプロパティを確認し、まちがっている部分を訂正して一致させます。
デザインビューでないとプロパティの変更ができないので、次の方法でデザインビューに切り替えます。
なお、コンボボックスのプロパティ[連結列]を変更して、フォームビューに切り替えた直後にエラーメッセージ(エラー表示のダイアログボックス)が表示された場合は、このエラー表示を閉じるために[OK]ボタンをクリックしてもまたすぐに同じエラーが表示され、繰り返しから抜け出すことができなくなることがあります。[OK]ボタンをマウスでクリックする代わりに[Enter]キーを押しても同じことです。マウスポインタをツールバーの[ビュー]ボタン(図2.162ア)に合わせた状態で[Enter]キーを押してエラー表示を消し、マウスを移動しないようにして左クリックすれば、デザインビューに切り替わって、エラー表示から抜け出すことができます。
エラーの原因
エラー表示が繰り返されるのは、マウスの移動によるイベントMouseMoveに関係する現象である。イベントの詳細は、本書の姉妹書である「仕事に使えるVisual Basicコントロールガイド」や「仕事に使えるVisual Basicプログラムガイド」で解説してあるので、興味のある読者は参考にしていただきたい。これらの書籍の対象とするアプリケーションはVisual Basicだが、イベントの意味は同じだ。
![]() |

AC7H183Z
4◆請求書番号テーブルの入力内容を確認する
テーブルを表示するには、請求書フォームを閉じる必要があります。請求書フォームを閉じて、請求書番号テーブルを開きます。フォームで入力した顧客名などのデータが一覧表示されれば、フォームとテーブル連係が正しく設定されていることになります。
>操作
図2.163 データベースウィンドウのテーブル一覧
@[請求書番号]を選択して[開く]をクリックする
図2.164 テーブルが表示される(変更したデータに書き換わっている)
![]() |

AC7H185Z/AC7H186Z