メールマガジン【アクセスで作るシリーズ】
バックナンバー 【住所録ソフト編】 Vol.17
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
ACCESSで作るシリーズ 【住所録ソフト編】
発 行 : Yoshihisa Fukuda 2001.03.02 Vol.17
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、住所フォームと住所一覧フォームの修正です。
______________________________________
□ 住所フォームに削除ボタンを付ける。
1.データベースウィンドウの[フォーム]タブを選択します。
2.住所フォーム[AddressForm]を選択し[デザイン]ボタンを押下します。
3.ツールバーのコマンドボタンを選択し[閉じる]ボタンの右横あたりにボタンを
追加します。(コントロールウィザードは無効にしておきます)
4.追加したボタンの以下のプロパティを設定します。
名前 ・・・ RecDelBtn
標題 ・・・ 削除
5.削除ボタンを選択した状態で[クリック時]プロパティに[イベントプロシージャ]
を設定し、右端の[...]ボタンを押下してモジュールウィンドウを開きます。
6.モジュールウィンドウを開いたら、Private Sub RecDelBtn_Click() と
End Sub の間に以下のコードを記述します。
Private Sub RecDelBtn_Click()
Dim SqlStr As String
SqlStr = "delete * from JointlyTable WHERE OwnerID=" & Me.ID
DoCmd.RunSQL SqlStr
SqlStr = "delete * from AddressTable WHERE ID=" & Me.ID
DoCmd.RunSQL SqlStr
Me.Requery
End Sub
8.モジュールを保存してウィンドウを終了します。
9.フォームを保存して終了します。
【解説】
住所フォームの削除ボタンのプログラム解説です。
住所フォームで削除ボタンを押した場合、表示中の住所データを削除する訳ですが、
住所フォームには住所テーブルのデータ以外に連名テーブルのデータもあります。
従って、削除ボタンを押された時は、連名テーブルのデータを削除してから、住所
テーブルのデータを削除します。
では、コードを1行目から順番に見て行きましょう。
1.1行目の Dim 文は、お馴染みの変数宣言です。
SqlStrと言う変数を変数型String(文字列)として宣言しています。
2.3行目はSqlStrと言う変数に文字列を代入しています。
代入する文字列はSQL文です。
"delete * from JointlyTable WHERE OwnerID=" & Me.ID を代入する訳ですが
"delete * from JointlyTable WHERE OwnerID=" までは単なる文字列です。
その後ろの & Me.ID は Me.ID を結合します。
Me.IDは現在住所フォームで表示しているデータのIDです。
例えば、現在表示しているデータの ID が5だとすると、このSQL文字列は
"delete * from JointlyTable WHERE OwnerID=5" となります。
これで、現在表示中のデータの連名テーブルのデータが削除されます。
では、このSQL文を解説しましょう。
まず delete はテーブルのデータの削除です。
どのテーブルのデータを削除するかは from JointlyTable で、連名テーブル
からデータを削除します。
どのデータを削除するかは、次の WHERE句で決まります。
ここでは WHERE OwnerID=" & Me.ID となっているので、OwnerID がMe.IDと
同じデータ、先程の例で言うと OwnerID が5のデータを削除となります。
このWHERE句を付けないと連名テーブルの全データを削除します。
※SQLに関しては【会計ソフト編】のVol.53、54、55でも、説明していますので
参考にして下さい。
【会計ソフト編】バックナンバーは http://homepage2.nifty.com/f-soft/
のメールマガジンのページから、【会計ソフト編】バックナンバーへ行けます。
3.4行目の DoCmd.RunSQL SqlStr は変数 SqlStr のSQL文を実行します。
DoCmd.RunSQL で第一引数に指定した SQL文を実行します。
例えば、SqlStrと言う変数を使わないで、ここで直接
DoCmd.RunSQL "delete * from JointlyTable WHERE OwnerID=" & Me.ID と
記述しても同じです。
4.6行目は、3行目と同じで、SQL文を変数 SqlStr に代入しています。
異なる点は削除するテーブルが連名テーブルから住所テーブルに変わっている
のと、WHERE句の条件の OwnerID が ID に変わっています。
5.7行目は4行目とまったく同じです。
ここで6行目で代入したSQL文を実行しています。
6.9行目の Me.Requery は、住所フォームのレコードソース(即ちAddressTable)
を再クエリーしています。
この再クエリーをしないと、データを削除した後、フォームの表示で全フィー
ルドに #Deleted と表示されます。
これは、現在表示中のレコードが無い(削除された)事を意味します。
そこで、 Me.Requery で再クエリーする事で、住所フォームの削除レコードは
表示されなくなります。
______________________________________
□ 住所一覧選択でエンターキーでも選択できる様にする。
1.データベースウィンドウの[フォーム]タブを選択します。
2.住所一覧選択[AddrListForm]を選択し[デザイン]ボタンを押下します。
3.リストボックス[AddrList]を選択し[キークリック時]プロパティを[イベント
プロシージャ]にして、右端の[...]ボタンを押下します。
4.モジュールウィンドウが開いたら、
Private Sub AddrList_KeyDown(KeyCode As Integer, Shift As Integer)
と End Sub の間に、以下のコードを記述します。
If KeyCode = vbKeyReturn Then
Dim varItm As Variant
For Each varItm In Me.AddrList.ItemsSelected
Forms![AddressForm]![Address] = Me.AddrList.Column(0, varItm) & _
Me.AddrList.Column(1, varItm) & _
Me.AddrList.Column(2, varItm)
Next varItm
DoCmd.Close
End If
5.モジュールウィンドウを閉じて、フォームを保存して終了します。
以上で、エンターキーでも住所を選択できる様になりました。
______________________________________
□ 住所一覧選択で「以下に掲載がない場合」を削除する。
郵便番号を入力して[郵便番号<=>住所]ボタンで住所を設定する場合で、該当住所
が1つの時(住所一覧が表示されない時)は「町域名」に「以下に掲載がない場合」
と入っている場合、それを削除していましたが、該当住所が複数ある時(住所一覧
が表示される時)に選択した住所の「町域名」に「以下に掲載がない場合」と入っ
ていても、そのまま表示されてしまいます。
これを、該当住所が1つの時と同様に、「以下に掲載がない場合」を削除します。
1.データベースウィンドウの[フォーム]タブを選択します。
2.住所一覧選択[AddrListForm]を選択し[デザイン]ボタンを押下します。
3.リストボックス[AddrList]を選択し[ダブルクリック時]プロパティの右端の[...]
ボタンを押下し、モジュールウィンドウを開きます。
4.AddrList_DblClick関数のコードを以下の様に修正します。
Private Sub AddrList_DblClick(Cancel As Integer)
Dim varItm As Variant
Dim AddrStr As String
For Each varItm In Me.AddrList.ItemsSelected
AddrStr = Me.AddrList.Column(0, varItm) & _
Me.AddrList.Column(1, varItm)
If Me.AddrList.Column(2, varItm) <> "以下に掲載がない場合" Then
AddrStr = AddrStr & Me.AddrList.Column(2, varItm)
End If
Forms![AddressForm]![Address] = AddrStr
Next varItm
DoCmd.Close
End Sub
5.モジュールウィンドウを閉じます。
6.先程追加したエンターキーの場合([キークリック時]プロパティ)も同様の修正
を行いましょう。
7.修正が完了したら、フォームを保存して終了します。
※ 「以下に掲載がない場合」の削除に関して、今はプログラムで削除していますが
後々は、メンテナンス画面を使用し、郵便番号データ自体から「以下に掲載が
ない場合」を削除しようと考えています。
その場合、今回のプログラムの修正は必要ありません。
______________________________________
□ お知らせ
都合により、ホームページの更新が3月3日(日)以降になります。
サンプルMDBをダウンロードされる方は、恐れ入りますが、少々お待ち下さい。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元 :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
ご質問等 :fukud@nifty.com
◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://homepage2.nifty.com/f-soft/
◇ 登録・解除 :http://homepage2.nifty.com/f-soft/
Copyright(C) 2001-2002 Yoshihisa Fukuda All rights reserved.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
ACCESSで作るシリーズ 【住所録ソフト編】
発 行 : Yoshihisa Fukuda 2001.03.02 Vol.17
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、住所フォームと住所一覧フォームの修正です。
______________________________________
□ 住所フォームに削除ボタンを付ける。
1.データベースウィンドウの[フォーム]タブを選択します。
2.住所フォーム[AddressForm]を選択し[デザイン]ボタンを押下します。
3.ツールバーのコマンドボタンを選択し[閉じる]ボタンの右横あたりにボタンを
追加します。(コントロールウィザードは無効にしておきます)
4.追加したボタンの以下のプロパティを設定します。
名前 ・・・ RecDelBtn
標題 ・・・ 削除
5.削除ボタンを選択した状態で[クリック時]プロパティに[イベントプロシージャ]
を設定し、右端の[...]ボタンを押下してモジュールウィンドウを開きます。
6.モジュールウィンドウを開いたら、Private Sub RecDelBtn_Click() と
End Sub の間に以下のコードを記述します。
Private Sub RecDelBtn_Click()
Dim SqlStr As String
SqlStr = "delete * from JointlyTable WHERE OwnerID=" & Me.ID
DoCmd.RunSQL SqlStr
SqlStr = "delete * from AddressTable WHERE ID=" & Me.ID
DoCmd.RunSQL SqlStr
Me.Requery
End Sub
8.モジュールを保存してウィンドウを終了します。
9.フォームを保存して終了します。
【解説】
住所フォームの削除ボタンのプログラム解説です。
住所フォームで削除ボタンを押した場合、表示中の住所データを削除する訳ですが、
住所フォームには住所テーブルのデータ以外に連名テーブルのデータもあります。
従って、削除ボタンを押された時は、連名テーブルのデータを削除してから、住所
テーブルのデータを削除します。
では、コードを1行目から順番に見て行きましょう。
1.1行目の Dim 文は、お馴染みの変数宣言です。
SqlStrと言う変数を変数型String(文字列)として宣言しています。
2.3行目はSqlStrと言う変数に文字列を代入しています。
代入する文字列はSQL文です。
"delete * from JointlyTable WHERE OwnerID=" & Me.ID を代入する訳ですが
"delete * from JointlyTable WHERE OwnerID=" までは単なる文字列です。
その後ろの & Me.ID は Me.ID を結合します。
Me.IDは現在住所フォームで表示しているデータのIDです。
例えば、現在表示しているデータの ID が5だとすると、このSQL文字列は
"delete * from JointlyTable WHERE OwnerID=5" となります。
これで、現在表示中のデータの連名テーブルのデータが削除されます。
では、このSQL文を解説しましょう。
まず delete はテーブルのデータの削除です。
どのテーブルのデータを削除するかは from JointlyTable で、連名テーブル
からデータを削除します。
どのデータを削除するかは、次の WHERE句で決まります。
ここでは WHERE OwnerID=" & Me.ID となっているので、OwnerID がMe.IDと
同じデータ、先程の例で言うと OwnerID が5のデータを削除となります。
このWHERE句を付けないと連名テーブルの全データを削除します。
※SQLに関しては【会計ソフト編】のVol.53、54、55でも、説明していますので
参考にして下さい。
【会計ソフト編】バックナンバーは http://homepage2.nifty.com/f-soft/
のメールマガジンのページから、【会計ソフト編】バックナンバーへ行けます。
3.4行目の DoCmd.RunSQL SqlStr は変数 SqlStr のSQL文を実行します。
DoCmd.RunSQL で第一引数に指定した SQL文を実行します。
例えば、SqlStrと言う変数を使わないで、ここで直接
DoCmd.RunSQL "delete * from JointlyTable WHERE OwnerID=" & Me.ID と
記述しても同じです。
4.6行目は、3行目と同じで、SQL文を変数 SqlStr に代入しています。
異なる点は削除するテーブルが連名テーブルから住所テーブルに変わっている
のと、WHERE句の条件の OwnerID が ID に変わっています。
5.7行目は4行目とまったく同じです。
ここで6行目で代入したSQL文を実行しています。
6.9行目の Me.Requery は、住所フォームのレコードソース(即ちAddressTable)
を再クエリーしています。
この再クエリーをしないと、データを削除した後、フォームの表示で全フィー
ルドに #Deleted と表示されます。
これは、現在表示中のレコードが無い(削除された)事を意味します。
そこで、 Me.Requery で再クエリーする事で、住所フォームの削除レコードは
表示されなくなります。
______________________________________
□ 住所一覧選択でエンターキーでも選択できる様にする。
1.データベースウィンドウの[フォーム]タブを選択します。
2.住所一覧選択[AddrListForm]を選択し[デザイン]ボタンを押下します。
3.リストボックス[AddrList]を選択し[キークリック時]プロパティを[イベント
プロシージャ]にして、右端の[...]ボタンを押下します。
4.モジュールウィンドウが開いたら、
Private Sub AddrList_KeyDown(KeyCode As Integer, Shift As Integer)
と End Sub の間に、以下のコードを記述します。
If KeyCode = vbKeyReturn Then
Dim varItm As Variant
For Each varItm In Me.AddrList.ItemsSelected
Forms![AddressForm]![Address] = Me.AddrList.Column(0, varItm) & _
Me.AddrList.Column(1, varItm) & _
Me.AddrList.Column(2, varItm)
Next varItm
DoCmd.Close
End If
5.モジュールウィンドウを閉じて、フォームを保存して終了します。
以上で、エンターキーでも住所を選択できる様になりました。
______________________________________
□ 住所一覧選択で「以下に掲載がない場合」を削除する。
郵便番号を入力して[郵便番号<=>住所]ボタンで住所を設定する場合で、該当住所
が1つの時(住所一覧が表示されない時)は「町域名」に「以下に掲載がない場合」
と入っている場合、それを削除していましたが、該当住所が複数ある時(住所一覧
が表示される時)に選択した住所の「町域名」に「以下に掲載がない場合」と入っ
ていても、そのまま表示されてしまいます。
これを、該当住所が1つの時と同様に、「以下に掲載がない場合」を削除します。
1.データベースウィンドウの[フォーム]タブを選択します。
2.住所一覧選択[AddrListForm]を選択し[デザイン]ボタンを押下します。
3.リストボックス[AddrList]を選択し[ダブルクリック時]プロパティの右端の[...]
ボタンを押下し、モジュールウィンドウを開きます。
4.AddrList_DblClick関数のコードを以下の様に修正します。
Private Sub AddrList_DblClick(Cancel As Integer)
Dim varItm As Variant
Dim AddrStr As String
For Each varItm In Me.AddrList.ItemsSelected
AddrStr = Me.AddrList.Column(0, varItm) & _
Me.AddrList.Column(1, varItm)
If Me.AddrList.Column(2, varItm) <> "以下に掲載がない場合" Then
AddrStr = AddrStr & Me.AddrList.Column(2, varItm)
End If
Forms![AddressForm]![Address] = AddrStr
Next varItm
DoCmd.Close
End Sub
5.モジュールウィンドウを閉じます。
6.先程追加したエンターキーの場合([キークリック時]プロパティ)も同様の修正
を行いましょう。
7.修正が完了したら、フォームを保存して終了します。
※ 「以下に掲載がない場合」の削除に関して、今はプログラムで削除していますが
後々は、メンテナンス画面を使用し、郵便番号データ自体から「以下に掲載が
ない場合」を削除しようと考えています。
その場合、今回のプログラムの修正は必要ありません。
______________________________________
□ お知らせ
都合により、ホームページの更新が3月3日(日)以降になります。
サンプルMDBをダウンロードされる方は、恐れ入りますが、少々お待ち下さい。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元 :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
ご質問等 :fukud@nifty.com
◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://homepage2.nifty.com/f-soft/
◇ 登録・解除 :http://homepage2.nifty.com/f-soft/
Copyright(C) 2001-2002 Yoshihisa Fukuda All rights reserved.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□