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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

Q&A

解決済

2回答

811閲覧

Access フォームのレコードソースで定数を使う

mnbwqz

総合スコア74

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

0グッド

0クリップ

投稿2022/02/02 00:30

Accessのフォームに表示されるデータを、定数を使って絞り込みたいです。
定数は標準モジュールに定義しています。

AccessVBA

1(標準モジュール) 2Public Const startid As Integer = 2 3Public Const endid As Integer = 4

下記のテーブルがあり
イメージ説明

下記のようにidを2~4まで絞りこんで表示したいです。
イメージ説明

レコードソースに定数を記述できるのでしょうか。
between 2 and 4 の部分を between startid and endid に変更しても
「パラメータの入力」となり、できませんでした。
イメージ説明
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

他の方の回答とかぶりますが、下記のようにFunctionにしておいて、

(標準モジュール)

vba

1Private Const c_startid As Integer = 2 2Private Const c_endid As Integer = 4 3 4Public Function startid() As Integer 5 startid = c_endid 6End Function 7 8Public Function endid() As Integer 9 endid = c_endid 10End Function

それをSQLから呼び出すことになります。

sql

1SELECT * FROM [Table] 2WHERE [Table].ID between startid() and endid();

ただ、未来永劫この定数を変更しないならそれでもいいですが、変更する可能性があるなら、
テーブルに格納しておいてそれを参照するような設計にした方がいいでしょう。

テーブル名 ​T_Const

CNameCValue
startId2
endId4

sql

1SELECT * FROM [Table] 2WHERE [Table].ID between DLookup("CValue","​T_Const","CName='startID'") and DLookup("CValue","​T_Const","CName='endID'");

投稿2022/02/03 00:57

hatena19

総合スコア33759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnbwqz

2022/02/04 04:13

ありがとうございます。 関数を使う方法で対応できるのですね。 テーブルに格納した値を使う方法もありがとうございます。
guest

0

ベストアンサー

先輩や上司に怒られそうな修正案だけど、

Option Compare Database Option Explicit 'Public Const startid As Integer = 2 'Public Const endid As Integer = 4 Public Function startid() As Integer startid = 2 '固定で返す End Function Public Function endid() As Integer endid = 4 '固定で返す End Function

と、
Function startid() で2を返す
Function endid() で4を返す
だけの関数を作成して、

使うときは、

SELECT [テーブル1].ID, [テーブル1].DATA FROM テーブル1
WHERE ((([テーブル1].ID) between startid() and endid() ));

で使う。
※SQL内の条件で関数を呼ぶと、遅くなったりするけど、まぁいっか。
そんなに件数無ければ、、、

下記テストした動画です
https://youtu.be/NODTLXMyasA?t=31
↑暇な時に見て、だめっぷりを笑ってください・・・

もっと、スマートに書けそうな気もしますが、ヒントとなれば幸いです。
※ど外し回答なきもしつつ・・・

投稿2022/02/02 04:03

ken3memo

総合スコア132

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnbwqz

2022/02/04 04:12

ありがとうございます。 関数を使う方法で対応できるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問