Accessモジュールで定義した関数をクエリで使用

Accessモジュールで定義した関数をクエリで使用(呼び出す)方法を紹介します。
クエリのSQLの中で少し複雑なことをしたいと思った時に
IF文だとなかなか難しい編集もあります。
そんな時に、Accessモジュールで関数を作成しておいてそれをSQLで使えるのです。
結構便利ですが滅多に使わないし、使わないで済むならそれで良いとも思います。
レポート出力の場合は、取得結果をそのまま使いたい事のほうが多いのでその時に使いました。

モジュール

Rem ----------------------------------------------------------------------------------
Rem     関数名   : getSecNumeric
Rem     処理内容 : Q_レポート明細UNIONで使用しています。
Rem                寸法文字列を数値に変換し抽出しソート指定が可能にします。
Rem     引  数  : source_str、no(何番目の寸法か指定 1~4)
Rem     戻り値  : 抜き取った数値
Rem ----------------------------------------------------------------------------------
Public Function getSecNumeric(source_str As String, no As Integer) As Double
Dim index As Integer
Dim leng As Integer
Dim pos As Integer
Dim suuchi As Variant
Dim retNum As Double

    retNum = 999999
    suuchi = ""
    index = 1
    leng = Len(source_str)
    
    ' 9999x9999x9999x9999
    For pos = 1 To leng
        If index = no Then
            If Mid(source_str, pos, 1) >= 0 And Mid(source_str, pos, 1) <= 9 Then
                suuchi = suuchi & Mid(source_str, pos, 1)
            ElseIf Mid(source_str, pos, 1) = "." Then
                suuchi = suuchi & Mid(source_str, pos, 1)
            ElseIf Mid(source_str, pos, 1) = "x" Then
                index = index + 1
            End If
        Else
            If Mid(source_str, pos, 1) = "x" Then
                index = index + 1
            End If
        End If
    Next
    If IsNumeric(suuchi) Then
        retNum = CDbl(suuchi)
    End If
    getSecNumeric = retNum
End Function

クエリでの使用例

select
  1 as mode
  , base.crp_base_id
  , base.from_date
  , m_item.item_spec1
  , m_item.item_spec2
  , m_item.item_spec3
  , m_item.item_spec4
  , m_item.item_spec
  , getSecNumeric(m_item.item_spec, 1)  AS item_spec_num1
  , getSecNumeric(m_item.item_spec, 2)  AS item_spec_num2
  , getSecNumeric(m_item.item_spec, 3)  AS item_spec_num3
  , getSecNumeric(m_item.item_spec, 4)  AS item_spec_num4
from

コメント

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