Access 基本

MicroSoftの出しているDBと開発ソフトが一緒になったもの。
プロジェクトを作成・編集することで、画面上のボタンなどの操作によりDBへのデータの格納、取得などができる。

DBファイルの作成

ファイル、新規登録、空のデータベースを選択して、DBファイルを作れる。

テーブルの作成

作成タブのテーブルをクリックすると、テーブルを作ることができる。

作成タブのテーブルをクリックし、テーブルを作成したのち、
「クリックして追加」をクリックし、データ型を設定後、フィールド1と書かれたところをクリックすると、フィールド名を設定できる。

データ型
・短いテキスト 最大255文字
・長いテキスト 最大1GB


作成タブのテーブルデザインをクリックしてテーブルを作成した場合、
フィールド名に、任意のフィールド名を入力する。
データ型に、整数や文字列などのデータ型を入力する。

テーブルの保存は、タブのテーブル名を右クリック、保存や、右上の保存ボタンから行える。

Excelファイルをテーブルに読み込む

外部ファイルタブからExcelを選択、
Excelファイルを元に新しいテーブルを作成することもできるけど、
既にあるテーブルに、Excelのデータを入れることもできる。

Excelの先頭の行は、フィールド名として扱うこともできる。
また、読み込まない列を選択することもできる。

フォームの作成

フォームはボタンとかのこと。
作成タブのフォームウィザードをクリック、表示するフィールドを選択すると、レコードが表示されるフォームが作成される。

作成されたフォームのタブを右クリックし、デザインビューを選択すると、フォームのデザインを変更することができる。
同じように、フォームのタブを右クリック、フォームビューをクリックすると、フォームの表示に戻すことができる。

このフォーム画面から、データの追加や削除を行える。

作成したフォームを、プロジェクトの起動時に表示したい場合は、
ファイルタブ、オプション、現在のデータベース、フォームの表示のプルダウンを表示したいフォーム名に合わせればいい。

クエリの作成

クエリとは、DBに対する要求文。
SQL文でSELECTを行い、DBからデータを参照したりすることなどがクエリに当たる。

作成タブのクエリデザインをクリックすると、クエリの作成が行える。
そのとき、追加するテーブルを選択するウィンドウが表示されるけど、これは消していいらしい。
クエリの画面に、左のテーブル欄から、操作を行いたいテーブルをドラッグ&ドロップで持ってくる。

D&Dで持ってきたテーブルの中から、表示したいフィールドを選択し、下の表にD&Dで持っていく。
そのあと、左上の実行ボタンを押すと、下の表に入れたフィールドのデータがテーブルから取得され表示される。

抽出
クエリの下の表の「抽出条件」という欄に値を入力すれば、抽出する条件を指定できる。
名前フィールドの抽出条件に「田中」と書き込めば、
名前が田中のレコードだけが抽出される。
LIKE ‘*田*’
と書けば、名前フィールドに「田」の文字が入るレコードだけが抽出される(田中、吉田など)。

ラベルの値で抽出をしたいときは、
Forms![フォーム名]![ラベル名].Captionと書く。

テーブルの結合

テーブルを複数、中央に持ってきて、片方のテーブルから結合のキーにしたいフィールドを、もう片方のテーブルのフィールドにD&Dすると、結合線が出て、テーブルの結合を行える。

クエリによるレコードの追加

デザインタブの追加をクリックすると、レコードを追加できるクエリが作成できる。
別のテーブルからレコードを持ってきて、それをテーブルに挿入するには、
デザインタブの追加をクリック、レコードを追加したいテーブルを選択する。
追加したいレコードを持っているテーブルをD&Dで左の欄から中央に持ってくる。
下の表に、挿入したいフィールドをD&Dで選択。
抽出項目などを入力すれば、特定のレコードだけを追加することもできる。

保存ボタンをクリックすれば、作成したクエリを保存することができる。

IIF関数

クエリの空いたフィールド欄に
aaaa:IIF(フィールド1=10,”10です”,”10ではありません”)
以上のように書くと、フィールド1が10だったら「10です」、
10じゃなかったら「10ではありません」という値を持った「aaaa」というレコードが作られる。

クエリによるレコードの更新

デザインタブの更新をクリックすると、レコードを更新できるクエリが作成できる。
更新をクリック後、更新したいテーブルをD&Dで左の欄から中央に持ってくる。
下の表に、レコードの更新という欄があるので、更新したいフィールドのレコードの更新欄に、更新後の値を入力する。
そのとき抽出条件を指定すれば、特定のレコードの値だけ変更できる。

マクロの作成

作成タブのマクロをクリックすると、マクロ作成画面を開ける。

デザインタブの、「すべてのアクションを表示」をクリックすることで、様々な処理を追加することができる。これをクリックしないと、限られた処理しか追加できない?

左のクエリ欄から、マクロに組み込みたいクエリをD&Dで持ってくることができる。

フォームの作成

作成タブのフォームの作成から作成できる。
空白のフォームを作った場合、何も表示されないので自分で1からレイアウトを作る。

フォームウィザードを押してフォームを作ると、フォームで扱うフィールドを選ぶことができる。
そのとき、テーブルのフィールドだけでなく、クエリのフィールドを参照することもできる。

コントロール

デザインタブから項目を選ぶことで、ボタンやテキストボックスなどを配置することができる。
ボタンやテキストボックスなどをコントロールという。

右側のプロパティウィンドウから、それぞれのコントロールの名前などを決めることができる。

テキストラベルなどのコントロールには、クエリやテーブルの情報を入れ込むこともできる。
コントロールのプロパティ、コントロールソースに、入れ込みたい値の情報を書き込めばいい。
フォームで参照しているフィールド名を書き込んだり、
別のフォームの値を持ってくることもできる。
Forms!フォーム名!フィールド名

また、VBAからコントロールソースを変更することもできる。
Forms!コントロール名.ControlSource=”変更後のコントロールソース”

ラベルの値を変更するときは
Forms!ラベル名=”aaaa”ではなく
Forms!ラベル名.Caption=”aaaa”と書く。

フォームの情報をクエリで取得する

コントロールの情報(テキストボックスに入力された値など)をクエリで扱う場合、
クエリの抽出条件などに、
Forms!フォーム名!テキストボックス名
と書けば取得できる。
LIKEで記述する場合、LIKE ‘*’ & Forms!フォーム名!コントロール名 & ‘*’と書く。

また、VBAから
Forms!フォーム名.RecordSource=”変更後のクエリ名”
と書くことで、参照するクエリを変えることもできる。

クエリの情報をフォームに表示

フォームを作成し、既存のフィールドを追加をクリック、右のフィールドリストから
参照したいフィールドをフォームにD&Dで持ってこられる。

フォームのプロパティシートの書式タブの「既定のビュー」が「単票」だと、レコードが1件ずつしか表示されない。
これを「帳票」に変えると、複数行表示される。
そのとき、フィールドが、フォームの詳細欄にないと複数表示されない。
フォームヘッダーにあると帳票モードでも1件ずつしか表示されない。

フォームに表示されたレコードの情報は、値を変更したりできる。
それができないようにしたい場合は、フォームのプロパティシート、
データタブのレコードセットを、「スナップショット」にすれば、フォームからレコードの変更ができないようになる。
レコードセットが「ダイナセット(矛盾を許す)」だとレコードに入力ができて、それを即テーブルに反映できる。

また、スナップショットでもレコードの情報がテキストボックスに入っている場合、カーソルを合わせることはできる(入力はできない)。
カーソルを合わせることもできないようにするには、テキストボックスのプロパティシートから、データタブ、使用可能を「いいえ」に入れる。
そのときテキストボックスの色が灰色になるけど、データタブ、編集ロックを「はい」にするとテキストボックスの色を変えずにカーソルを合わせられないようにできる。
使用可能がいいえ かつ 編集ロックがはい で色を変えずにカーソルを合わないようにできる。

帳票フォームの下に空白の行を表示したくないときは、フォームのプロパティの追加を許可しないに合わせる。

フォームの詳細タブに非連結のテキストボックスを置いた場合、複数のレコードが表示されるとテキストボックスもその数だけ配置されるけど、その中身はすべて同じになる。1つに入力すると、他のテキストボックスにも同じ値が入る。

複数のレコードが表示された帳票フォームで、現在どこが選択されているかは、
Me.CurrentRecordで取得できる。
レコードの数を取得したいときは
Me.Recordset.RecordCount

リストボックスにクエリの情報を表示

リストボックスを配置し、プロパティシートのデータタブ、
値集合ソースの欄に、クエリ名を書き込めば、リストボックスにクエリで得たレコードを表示することができる。
書式タブの列見出しの欄を「はい」にすると、先頭にフィールド名を表示することもできる。

ボタンによるアクション

ボタンのプロパティウィンドウ、イベントタブのクリック時の欄に、イベントプロシージャを選択し、
右の「…」をクリックすると、VBAの入力画面が表示される。
Private Sub ボタン名_Click()

End Sub
という記述が出るので、この中に処理を書けばいい。
Private Sub ボタン名_Click()
  Me.Requery
End Sub
と書けば、ボタンを押すと、フォームで扱うクエリを再実行したり、フォームに表示するレコードを最新の状態にする。

詳細タブにボタンを設置し、フォームを開きレコードが配置されたあと、
ボタンを押すと、押したボタンのあるレコードが、詳細欄のコントロールに入力される?
レコードと共に配置したボタンのクリックイベントに
Sub ボタン_Click()
  Me.ラベル=Me.詳細のフィールド
End Sub
と入力すると、押したボタンの位置に応じたフィールドの値がラベルに入力された。

VBAからコントロールを変更

コントロールのプロパティシート、イベントタブから、イベント時の設定を行える。
例えばテキストボックスだと、ロストフォーカス時の処理を記述することができる。

ロストフォーカス時の処理に、イベントプロシージャを選択し、右の「…」をクリックすると、ロストフォーカス時の処理をVBAに記述できる。
このとき、Me.コントロール名.Value=”aaaa”とすれば、指定したコントロールに「aaaa」という値を入力することができる。

ラベルの中の文字列を取得・変更したいときは
Me.ラベル名.Captionとする。

また、VBAからクエリを書き換えることもできる。
VBAに、
CurrentDb.QueryDefs(“クエリ名”).sql=”書き換えたい内容”
と書けばいい。
ただ、その記述は一度フォームを閉じないと結果に反映されない気がする。

ダイアログ形式のフォームを作る

フォームのプロパティシートのその他タブ、ポップアップの欄を「はい」にすると、そのフォームはダイアログとして、小さいウィンドウで表示される。
また、その他タブ、作業ウィンドウ固定を「はい」にすると、そのウィンドウが出ている間は他のウィンドウを操作できなくできる。

フォームのサイズ自動修正機能を「なし」にしたら、フォームが画面より大きいサイズになったとき、スクロールバーが出て、下までスクロールできるようになる。
それをしないとフォームの下が見切れてしまう。

VBAからExcelファイルをシートを指定して取り込む

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, テーブル名, Excelファイル名, True, シート名!

DBとの接続

DBとの接続方法には、DAOとADOがある。
DAOで接続する場合、
Dim db As DAO.database
Dim rs As DAO.Recordset

Set db = CurrentDb

Dim sql As String
sql = “select * from テーブル名”
Set rs = db.OpenRecordset(sql)

Do Until rs.EOF
Debug.print rs!項目名
rs.MoveNext
Loop
と書いたら、指定した項目名をすべて表示できる。
rs.MoveNextを書き忘れるとフリーズする。

rs.EOFは、取得した結果のカーソルが、取得したレコードの最後の行より後ろにあるかどうかを判定する。
rs.BOFは、取得した結果のカーソルが、取得したレコードの最初の行より前にあるかどうかを判定する。
rs.EOFとrs.BOFが両方Trueだったら、取得したレコードが1つもないことを表す。
If rs.EOF And rs.BOF then

End If
と書いたら、値が取得できなかったときの処理を書ける。


insertやupdateのように、結果が返ってこない場合は以下のように書けばいい。
Dim sql As String
sql = “insert into テーブル名(要素,要素) values(‘値’,’値’)”
DoCmd.RunSQL sql

テーブルにレコードを追加するとき、確認メッセージが出るので
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
と書けば、確認メッセージが出ないようにできる。

帳票フォームの情報をVBAで取得

Recordset rs As DAO.Recordset
Set rs = Me.Recordset
と書けば、帳票フォームのレコードを取得できる。
rs.RecordCountで、レコードの数を取得できる。
rs.MoveFirstで、レコードの先頭に移動。
rs.MoveNextで、次のレコードに移動。
rs!項目名で、今参照しているレコードの値を参照できる。

コントロールのExit

LostFocusと同じようなイベントに、Exitがある。
Exitは、引数にCancelという値を持つ。
このCancelをfalseに設定すれば、カーソルの移動をキャンセルできる。
これを使えば、その項目にカーソルが当たっているときに、ボタンが押されたとしても、Canselをfalseにすることで、ボタン押下を取り消し、カーソルを項目に維持することができる。

RecordsetClone

Dim rs As Recordset
Set rs = Me.RecordsetClone
と書くと、そのフォームのレコードセット(クエリなどで出力したレコード)を取得できる。
rs.EOFや、rs.MoveNextなどの関数でレコードのカーソルの参照、移動などが行える。
rs!項目名で、レコードの値を取得もできる。
RecordsetCloneは、クローンなのでそのものでなくコピーなのかもしれない。
Set rs = Me.Recordsetとすれば、そのものを取得できる。

タイトルとURLをコピーしました