Access(ADP & VBA)とMSDEで作るクライアントサーバーシステム(c/s)

 
実践テクニック、Accessで作るクラサバシステム



2006/08/08配信
 

第7コース  第10回 「商品マスタの作成」




 

 ■メニュー

   1.商品マスタの作成(6回目)

===================================================================

 商品マスタの作成、6回目です。

 では、はじめましょう。

------------------------------------------------------------------- 

1.カナ名の処理

  1-1.カナ名_AfterUpdateについて

If mojisu = Int(0) Then
[カナ名] = ""
Set Me.Recordset = Nothing
Me![商品コード].ControlSource = ""
Me![商品名].ControlSource = ""
Me![消費税区分名].ControlSource = ""
Me![売上単価].ControlSource = ""
Me![仕入単価].ControlSource = ""
Exit Sub
End If

If ftKeyCode = 120 Then
Exit Sub
End If

If ftKeyCode = 118 Then
Exit Sub
End If

If ftKeyCode = 116 Then
Exit Sub
End If

If ftKeyCode = 35 Then
Exit Sub
End If

If mojisu >= Int(1) Then

'◎ポイント解説 1 -----*-----*-----*-----

Call 検索処理
Exit Sub
End If


-------------------------------------------------------------------

  [カナ名]がNullまたは空白なら、mojisu = Int(0)をいれます。
  各項目をクリアしてこの処理をせずに抜けます。

  何かしら文字があれば、mojisu = Len([カナ名])で処理します。
  Len 関数は、バイト数を返してくれます。
  If mojisu >= Int(1) Then なら、商品を表示させます。

  中ごろにftKeyCode = 120、118、116、35があります。
  これは、formのKeyDownで記述しています。

  全表示(F9)    → 120
  btn1字消去(F5)  → 116
  btn全消去(F5)  → 118
  終了(END)   →  35

  これらのボタンが押されたときに、Call 検索処理をさせていません。
  では、ないとどうなるのか?
  実験して見てください。

  ファンクションキーに処理を割り解けると簡単に操作ができます。

  ファンクションキーにどんな数字が割り付けているのかを調べる
  方法は、Form_KeyDownにftKeyCode = KeyCodeのところです。

  1.そこにブレイクモードの設定をします。
   すると茶色にかわります。
  2.何かしらのファンクションキーを押します。
  3.そこで止まりますのでKeyCodeの内容をクイックウォッチで
   調べます。

  ftKeyCodeに退避させて、その数値でさせたい処理を他の所で
  記述すれば簡単にできます。
  試してみて下さい。


 1-1.◎ポイント解説 1 について

   商品マスタ読み込んで詳細に表示させます。

   それが、 Call 検索処理 です。

-------------------------------------------------------------------

 2.検索処理について

   Subで検索処理()を作成します。


'◎ポイント解説 2 -----*-----*-----*-----

Set rs = New ADODB.Recordset
SqlStr = ""
SqlStr = "select 商品コード,商品名,消費税区分名,売上単価,仕入単価 _
from 商品マスタ where 商品マスタ.カナ名 Like "
SqlStr = SqlStr & "'" & [カナ名] + "%" & "'"
SqlStr = SqlStr & " order by 商品マスタ.カナ名,商品マスタ.商品コード"

rs.Open SqlStr, cn, adOpenStatic

If rs.BOF Then

'◎ポイント解説 3 -----*-----*-----*-----

Set Me.Recordset = Nothing
Me![商品コード].ControlSource = ""
Me![商品名].ControlSource = ""
Me![消費税区分名].ControlSource = ""
Me![売上単価].ControlSource = ""
Me![仕入単価].ControlSource = ""
Else

'◎ポイント解説 4 -----*-----*-----*-----

Set Me.Recordset = rs
Me![商品コード].ControlSource = rs![商品コード].name
Me![商品名].ControlSource = rs![商品名].name
Me![消費税区分名].ControlSource = rs![消費税区分名].name
Me![売上単価].ControlSource = rs![売上単価].name
Me![仕入単価].ControlSource = rs![仕入単価].name
End If

rs.Close
Set rs = Nothing

-*-------*-------*-------*-------*-------*-------*-------*-------*-

 では、詳しく解説します。

 2-1.◎ポイント解説 2 について

   ここでは、ストアドプロシージャで作成しませんでした。

   ここのポイントは、1、2となります。
   1. 商品マスタ.カナ名 Like [カナ名]%
   2. order by 商品マスタ.カナ名,商品マスタ.商品コード
   
   Like演算子を使いワイルドカード検索をします。

  *注意
   メルマガでは、半角カタカナは不正文字となりますので
   全角文字で解説します。
   カナ名に入る文字は半角カタカナとなります。

   [カナ名]に"オオ"のいれた場合を考えてみましょう。

   デバッグモードで調べるとSqlStrには、Like オオ% と
   記述されている箇所があります。

   これは、"オオ"ではじまるものは全て抽出しなさいと
   命令しています。

   これは、以前解説しましたが、再度取り上げます。

   以下のデータがあったとします。

   岡山太郎    カナ名"オカヤマタロウ"
   大分一郎    カナ名"オオイタイチロウ"
   大分二郎    カナ名"オオイタジロウ"
   大分三郎    カナ名"オオイタサブロウ"

   Like オオ%で表示されるものは、以下のとおりです。

   大分一郎    カナ名"オオイタイチロウ"
   大分三郎    カナ名"オオイタサブロウ"
   大分二郎    カナ名"オオイタジロウ"
   表示はこの順番で現れます。


   岡山太郎    カナ名"オカヤマタロウ"
   "オカ"なので岡山太郎は表示されません。
   Like オ%であれば、全て表示されます。

   大分一郎    カナ名"オオイタイチロウ"
   大分三郎    カナ名"オオイタサブロウ"
   大分二郎    カナ名"オオイタジロウ"
   岡山太郎    カナ名"オカヤマタロウ"
   この順番になります。

   それとorder byによって商品マスタ.カナ名順に表示されます。
   五十音順だと探しやすいためこのような形にします。
   カナ名が同じ場合は、コードの昇順に表示されます。

   order byは、昇順、降順を指定できます。
   ここでは、省略しているのでデフォルトで昇順(ASC)となります。

   降順にする場合は、DESCを付けます。
   order by 商品マスタ.カナ名 DESC となります。

 2-2.◎ポイント解説 3 について

   まったくデータがない場合は各項目をクリアします。

   Me![商品コード].ControlSource = ""
   Me![商品名].ControlSource = ""
   Me![消費税区分名].ControlSource = ""
   Me![売上単価].ControlSource = ""
   Me![仕入単価].ControlSource = ""

 2-3.◎ポイント解説 4 について

   Me![商品コード].ControlSource = rs![商品コード].name
   Me![商品名].ControlSource = rs![商品名].name
   Me![消費税区分名].ControlSource = rs![消費税区分名].name
   Me![売上単価].ControlSource = rs![売上単価].name
   Me![仕入単価].ControlSource = rs![仕入単価].name

   通常だと、ひとつのデータを取り出してそれを表示させる
   それをある条件になるまで繰り返すというパターンを取るのですが、
   この詳細にデータを送る場合は、一気に送る形となります。

   それが、
   ”データ名.name”から”表示名.ControlSource”となります。

   余計なデータがあるとそれらもいっしょに表示されますので
   SQL文は大変重要となります。

   SQL文をパンチしながら作るのは大変な作業です。
   SQL文を簡単に作る方法は、クエリ(ビュー)で作ってみることです
   そうすれば、確認しながら作れます。

   思い通り表示できたらSQL文を少し加工します。
   VBAまたはストアドプロシージャに貼り付ければ効率的に
   作り上げることができます。

 次回も、商品マスタの作成です。

===================================================================

                ◆ 実践テクニック、Accessで作るクラサバシステム ◆

  編集・構成:高橋浩
  提供・発行:ティウェア

http://www.1tware.com/index.html

Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築

※当メールマガジンに掲載された記事を許可なく転載することを禁じます。

===================================================================

実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)

SEが10年以上の開発ノウハウを惜しみなく完全公開!

Mail:  (半角英数字)     Powered byまぐまぐ


HOME / お客様の声 / メルマガ / 販売管理ソフト教材 / 会社概要/ 特定商取引法/ お申し込み
 お問い合わせ / メルマガのご意見ご感想 / メルマガのバックナンバー/ プライバシーポリシー
 


 Copyright (c) 2001 ティウェア All rights reserved.