質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

解決済

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

syosinsya109
syosinsya109

総合スコア29

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

1回答

0リアクション

0クリップ

176閲覧

投稿2022/10/06 05:46

編集2022/10/06 09:26

前提

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

実現したいこと

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

該当のソースコード

access

Private Sub 検索btn_Click() '引数1は2、引数2は3 '初期化 select句 = "SELECT *" Dim where As String Dim orderby As String Dim groupby As String 'グループ化 Dim group(2) As String group(0) = "選択してください" group(1) = "名前" group(2) = "性別" '名前検索 If IsNull(名前) = False Then '空白チェック where = " WHERE 名前 LIKE '*" & a & "*'" End If '金額並べ替え orderby = function(引数1, 引数2) 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 * End If End If Debug.Print "SQL : " & select & " FROM table" & where & groupby & orderby & ";" Me.RecordSource = select & " FROM table" & 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 '昇順 orderByFunction = " ORDER BY 年齢" ElseIf sort(sql - 1) = "降順" Then '降順 orderByFunction = " ORDER BY 年齢 DESC" End If End If End If Else If IsNull(sql) = False Then If sort(sql - 1) <> "選択してください" Then '空白チェック If sort(sql - 1) = "昇順" Then '昇順 orderByFunction = " ORDER BY 金額" ElseIf sort(sql - 1) = "降順" Then '降順 orderByFunction = " ORDER BY 金額 DESC" End If End If End If End If Debug.Print "b : " & orderby End Function

試したこと

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

sazi

2022/10/06 07:03

orderby = orderByFunction(グループ化, 金額_並べ替え) 上記の「グループ化」や 「金額_並べ替え」はどこで定義されていますか?
syosinsya109

2022/10/06 07:27

回答ありがとうございます。 すいません。それらの値はフォームデザインで設置したテキストボックスやコンボボックスの名前となっているのでプログラムでは定義していません。 そのためプログラムの一番上のコメントアウトで定義させてもらっています。 グループ化=2、金額_並べ替え=3 です。わかりにくくてすいません

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。