#04 モジュールをJANコード対応にする

通常の入出力インタフェースに関しては、テーブルとフォーム/レポートの変更だけで済みます。しかし、オートナンバー型、つまり数値型からテキスト型に変更したことによって、モジュールのプログラムも変更が必要となります。ただし、変更ヶ所は多いのですが、一定のルールに従ってすべてを書き換える、またはVBEで置換を行っていくことで済みます。

ここで一番のポイントは、SQL文やフィルタのWhere句にあたる部分の記述の仕方にあります。

オートナンバー型の場合、これは数値型(細かくは長整数型)ですので、次のような書き方をしています。
"商品コード = 1"
一方、テキスト型フィールドに対してWhere句を指定する場合には、その値を「'(シングルクォーテーション)」または「"(ダブルクォーテーション)」で囲む必要があります。「商品コード」フィールドをテキスト型にした場合、次のように記述を変更します。

"商品コード = '4912345678901'"
※ダブルクォーテーションでの表記の場合には、VBAの記述においてWhere句全体も文字列として表現するため、実際にはダブルクォーテーション2つで表す必要があります。


実際のプログラムでは、商品コードの部分が変数になっている場合やフォームのテキストボックスコントロールの値を参照している部分があります。その場合にも、注意して「'」を文字列に追加します。特にこの場合、単に「'」を書き加えるだけでは文法エラーとなってしまいますので、「&」記号を使って文字列の結合をするようにします。このときの後ろの「"'"」という記述は、シングルクォーテーション1ケをダブルクォーテーションで囲むという書き方になっています。ダブルクォーテーションが3つになったりダブルクォーテーション間に余分なスペースが入ったりしないよう注意してください。

<現在>
strFilter = "商品コード = " & Me!商品コード

<変更後>
strFilter = "商品コード = '" & Me!商品コード & "'"


モジュールに関しては、「売上伝票入力」のフォームに関しては該当する部分はありませんが、データベース全体としてはこのような箇所をすべて検索して変更しなければなりません。実行時エラーとなる場合もありますが、"エラーは起こらないが正常に抽出処理されない"といった場合もありますので、テスト段階で1つずつ潰していくという考えで進めていってもよいかもしれません。


参考までに、「frm在庫明細一覧」フォームの[抽出実行]ボタンのクリック時イベントプロシージャのコードは、次のようになります(一部抜粋)。


Private Sub cmdExeFilter_Click()
'[抽出実行]ボタン

  Dim strFilter As String
  
  strFilter = ""
  '抽出条件を組み立て
  If Len(Me!商品コード) > 0 Then
    '商品コードが指定されていたら商品コードだけを条件として抽出
    strFilter = "商品コード = " & Me!商品コード
  
  Else
    If Len(Me!在庫数量) > 0 Then
      '在庫数量が指定されているとき
      If strFilter = "" Then
        strFilter = "在庫数量" & _
                    Choose(Me!在庫数量範囲, " >= ", " < ") & _
                    Me!在庫数量
      Else
        strFilter = strFilter & " AND 在庫数量" & _
                    Choose(Me!在庫数量範囲, " >= ", " < ") & _
                    Me!在庫数量
      End If
    End If
    
    If Len(Me!在庫金額) > 0 Then
      '在庫金額が指定されているとき


Private Sub cmdExeFilter_Click()
'[抽出実行]ボタン

  Dim strFilter As String
  
  strFilter = ""
  '抽出条件を組み立て
  If Len(Me!商品コード) > 0 Then
    '商品コードが指定されていたら商品コードだけを条件として抽出
    strFilter = "商品コード = '" & Me!商品コード & "'"
  
  Else
    If Len(Me!在庫数量) > 0 Then
      '在庫数量が指定されているとき
      If strFilter = "" Then
        strFilter = "在庫数量" & _
                    Choose(Me!在庫数量範囲, " >= ", " < ") & _
                    Me!在庫数量
      Else
        strFilter = strFilter & " AND 在庫数量" & _
                    Choose(Me!在庫数量範囲, " >= ", " < ") & _
                    Me!在庫数量
      End If
    End If
    
    If Len(Me!在庫金額) > 0 Then
      '在庫金額が指定されているとき
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved