accessにおいて、ユーザー定義関数が機能してくれない

前提

変数にsql文を組み立てる際に、変数の中が空なはずなのに値が格納されていたり(orderByFunction関数の最初のDebug.Print "c : " & orderbyで何故か値が入っている)、呼び出し元に値が返ってこなかったり(Debug.Print "a : " & orderbyは何故か空)、格納した内容と異なっていたり(Debug.Print "b : " & orderbyでいらない"["や"]"が付いている)しています。何故なのでしょうか。

実現したいこと

End Subの手前に書かれてあるSQLが正常に動作するようにしたい

該当のソースコード

access

Private Sub 検索btn_Click() 'グループ化は2、金額_並べ替えは3 '初期化 Dim select句 As String select句 = "SELECT *" Dim where句 As String Dim orderby As String orderby = "" Dim groupby句 As String 'グループ化 Dim group(2) As String group(0) = "選択してください" group(1) = "業者名別" group(2) = "募集職種別" '業者名検索 If IsNull(業者名serch) = False Then '空白チェック where句 = " WHERE 業者名 LIKE '*" & 業者名serch & "*'" End If '金額並べ替え orderby = orderByFunction(グループ化, 金額_並べ替え) Debug.Print "a : " & orderby 'グループ化 If IsNull(グループ化) = False Then If group(グループ化 - 1) <> "選択してください" Then '空白チェック If group(グループ化 - 1) = "業者名別" Then '業者名別のグループ化 groupby句 = " GROUP BY 業者名" ElseIf group(グループ化 - 1) = "募集職種別" Then '募集職種別のグループ化 groupby句 = " GROUP BY 募集職種" End If select句 = "SELECT Min(WEB求人一覧紹介.[No]) AS No, WEB求人一覧紹介.業者名 AS 業者名, Min(WEB求人一覧紹介.募集職種) AS 募集職種, Min(WEB求人一覧紹介.掲載期間_いつから) AS 掲載期間_いつから, Min(WEB求人一覧紹介.掲載期間_いつまで) AS 掲載期間_いつまで, Min(WEB求人一覧紹介.金額) AS 金額, Min(WEB求人一覧紹介.郵便番号) AS 郵便番号, Min(WEB求人一覧紹介.都道府県) AS 都道府県, Min(WEB求人一覧紹介.住所) AS 住所, Min(WEB求人一覧紹介.電話番号) AS 電話番号, Min(WEB求人一覧紹介.FAX番号) AS FAX番号, Min(WEB求人一覧紹介.担当部署名) AS 担当部署名, Min(WEB求人一覧紹介.担当者役職名) AS 担当者役職名, Min(WEB求人一覧紹介.担当者名) AS 担当者名, Min(WEB求人一覧紹介.担当者メールアドレス) AS 担当者メールアドレス, First(WEB求人一覧紹介.備考) AS 備考" End If End If Debug.Print "SQL : " & select句 & " FROM WEB求人一覧紹介" & where句 & groupby句 & orderby & ";" Me.RecordSource = select句 & " FROM WEB求人一覧紹介" & where句 & groupby句 & orderby & ";" End Sub '関数 '引数1=コンボボックスのグループ化の値、引数2=コンボボックスの並べ替えの値 どっちも0、1、2が入る Function orderByFunction(ByVal groupby As String, ByVal sql As String) As String Debug.Print "c : " & orderby '並べ替え Dim sort(2) As String sort(0) = "選択してください" sort(1) = "昇順" sort(2) = "降順" If IsNull(groupby) = flse And groupby <> 1 Then If IsNull(sql) = False Then If sort(sql - 1) <> "選択してください" Then '空白チェック If sort(sql - 1) = "昇順" Then '昇順 orderby = " ORDER BY Min(WEB求人一覧紹介.金額)" ElseIf sort(sql - 1) = "降順" Then '降順 orderby = " ORDER BY Min(WEB求人一覧紹介.金額) DESC" End If End If End If Else If IsNull(sql) = False Then If sort(sql - 1) <> "選択してください" Then '空白チェック If sort(sql - 1) = "昇順" Then '昇順 orderby = " ORDER BY 金額" ElseIf sort(sql - 1) = "降順" Then '降順 orderby = " ORDER BY 金額 DESC" End If End If End If End If Debug.Print "b : " & orderby End Function

c : [ORDER BY Min(WEB求人一覧紹介].[金額)] DESC b : [ORDER BY Min(WEB求人一覧紹介].[金額)] DESC a : SQL : SELECT Min(WEB求人一覧紹介.[No]) AS No, WEB求人一覧紹介.業者名 AS 業者名, Min(WEB求人一覧紹介.募集職種) AS 募集職種, Min(WEB求人一覧紹介.掲載期間_いつから) AS 掲載期間_いつから, Min(WEB求人一覧紹介.掲載期間_いつまで) AS 掲載期間_いつまで, Min(WEB求人一覧紹介.金額) AS 金額, Min(WEB求人一覧紹介.郵便番号) AS 郵便番号, Min(WEB求人一覧紹介.都道府県) AS 都道府県, Min(WEB求人一覧紹介.住所) AS 住所, Min(WEB求人一覧紹介.電話番号) AS 電話番号, Min(WEB求人一覧紹介.FAX番号) AS FAX番号, Min(WEB求人一覧紹介.担当部署名) AS 担当部署名, Min(WEB求人一覧紹介.担当者役職名) AS 担当者役職名, Min(WEB求人一覧紹介.担当者名) AS 担当者名, Min(WEB求人一覧紹介.担当者メールアドレス) AS 担当者メールアドレス, First(WEB求人一覧紹介.備考) AS 備考 FROM WEB求人一覧紹介 GROUP BY 業者名;

試したこと

accessでユーザー定義関数を触ったことなかったので、いろいろ調べながらここまで来ました。なのですが思い通り機能してくれません。
以下が自分が採用したサイトの一部です。
https://www.sejuku.net/blog/28904

コメントを投稿

0 コメント