前提
変数にsql文を組み立てる際に、変数の中が空なはずなのに値が格納されていたり(orderByFunction関数の最初のDebug.Print "c : " & orderbyで何故か値が入っている)、呼び出し元に値が返ってこなかったり(Debug.Print "a : " & orderbyは何故か空)、格納した内容と異なっていたり(Debug.Print "b : " & orderbyでいらない"["や"]"が付いている)しています。何故なのでしょうか。
実現したいこと
End Subの手前に書かれてあるSQLが正常に動作するようにしたい
該当のソースコード
access
1Private Sub 検索btn_Click() 2'引数1は2、引数2は3 3 '初期化 4 select句 = "SELECT *" 5 Dim where As String 6 Dim orderby As String 7 Dim groupby As String 8 9 'グループ化 10 Dim group(2) As String 11 group(0) = "選択してください" 12 group(1) = "名前" 13 group(2) = "性別" 14 15 '名前検索 16 If IsNull(名前) = False Then 17 '空白チェック 18 where = " WHERE 名前 LIKE '*" & a & "*'" 19 End If 20 '金額並べ替え 21 orderby = function(引数1, 引数2) 22 Debug.Print "a : " & orderby 23 'グループ化 24 If IsNull(グループ化) = False Then 25 If group(グループ化 - 1) <> "選択してください" Then 26 '空白チェック 27 If group(グループ化 - 1) = "名前" Then 28 '名前別のグループ化 29 groupby = " GROUP BY 名前" 30 ElseIf group(グループ化 - 1) = "性別" Then 31 '性別別のグループ化 32 groupby = " GROUP BY 性別" 33 End If 34 select = "SELECT * 35 End If 36 End If 37 Debug.Print "SQL : " & select & " FROM table" & where & groupby & orderby & ";" 38 Me.RecordSource = select & " FROM table" & where & groupby & orderby & ";" 39 40End Sub 41 42'関数 43'引数1=コンボボックスのグループ化の値、引数2=コンボボックスの並べ替えの値 どっちも0、1、2が入る 44Function orderByFunction(ByVal groupby As String, ByVal sql As String) As String 45 Debug.Print "c : " & orderby 46 '並べ替え 47 Dim sort(2) As String 48 sort(0) = "選択してください" 49 sort(1) = "昇順" 50 sort(2) = "降順" 51 52 If IsNull(groupby) = flse And groupby <> 1 Then 53 If IsNull(sql) = False Then 54 If sort(sql - 1) <> "選択してください" Then 55 '空白チェック 56 If sort(sql - 1) = "昇順" Then 57 '昇順 58 orderByFunction = " ORDER BY 年齢" 59 ElseIf sort(sql - 1) = "降順" Then 60 '降順 61 orderByFunction = " ORDER BY 年齢 DESC" 62 End If 63 End If 64 End If 65 Else 66 If IsNull(sql) = False Then 67 If sort(sql - 1) <> "選択してください" Then 68 '空白チェック 69 If sort(sql - 1) = "昇順" Then 70 '昇順 71 orderByFunction = " ORDER BY 金額" 72 ElseIf sort(sql - 1) = "降順" Then 73 '降順 74 orderByFunction = " ORDER BY 金額 DESC" 75 End If 76 End If 77 End If 78 End If 79 80 Debug.Print "b : " & orderby 81End Function
試したこと
accessでユーザー定義関数を触ったことなかったので、いろいろ調べながらここまで来ました。なのですが思い通り機能してくれません。
以下が自分が採用したサイトの一部です。
https://www.sejuku.net/blog/28904
回答1件
あなたの回答
tips
プレビュー