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

スポンサーリンク

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

モジュール
[vb]
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
[/vb]

クエリでの使用例
[sql]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
[/sql]

スポンサーリンク
広告
広告

フォローする