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

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

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

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

Access

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

Q&A

1回答

2642閲覧

VBA DMAX()関数の障害について

runa

総合スコア38

VBA

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

Access

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

0グッド

0クリップ

投稿2021/07/14 07:00

教えてください。
DMAX関数で、最大値が取得できません。

<症状>
DMAX("No","t_Test","(No >11019200) And (No <11019264)");
の戻り値が 「Null」になってしまいます。

DMAX("No","t_Test","(No >11019200) And (No <11019263)");
の場合は OKで「11019201」が返ります。

テーブルカラム
No(long)
11019101
11019201
11019301

クエリーでも NG です。

SELECT Max(No) AS Noの最大
FROM t_test
WHERE (((t_test.製造No)>11019200 And (t_test.製造No)<11019264));

<<環境>>
Access2000 Access2003 のmdbです。(36bit版)

OSは、Winows7 & Windows10 の 32bit 64bitのどちらでも発生します。

テーブルを、ODBCにてSQLサーバ等に接続した場合に発生します。
テーブルが mdbの場合は、発生しません。

ちなみに、
1101963 の 16進表記は 0xA823FF です。<-- OK
1101964 の場合 0xA82400 です。 <-- NG

以上、よろしくお願いします。

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

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

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

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

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

sazi

2021/07/14 07:56

サーバー側での項目の型とそのテーブルをリンクテーブルとして使用している場合はリンクテーブルでの型を質問に追記して下さい。
runa

2021/07/14 23:15

SQL-Server 上では、integer です。
sazi

2021/07/15 03:14

リンクテーブルは未使用ですか? 使用しているならリンクテーブル上での型は?
guest

回答1

0

私の環境
Windows10Pro(x64)
MsAccess2016
MDBファイルのファイル形式は2003形式
SQL-Server2014

リンクテーブルを貼って質問者さんのコードを実行すると
確かにNullになりました。


Microsoftの公式ドキュメントによると
https://docs.microsoft.com/ja-jp/office/vba/api/access.application.dmax

criteria に含まれるフィールドは 、ドメイン 内のフィールドである必要 があります。それ以外の場合 、DMax 関数は Null を返 します。

No はAccessまたはSQL-serverの予約語になっている可能性があります。
No を [No] とカッコで囲むと期待する動きになりました。
1101963 の場合だけなぜOKなのかはわかりません。
Accessはたまに予想外の動きをします。

VBA

1Debug.Print DMax("[No]", "t_Test", "[No] > 11019200 And [No] < 11019263") 2' 結果 11019201 3Debug.Print DMax("[No]", "t_Test", "[No] > 11019200 And [No] < 11019264") 4' 結果 11019201 5

投稿2021/07/14 08:07

odataiki

総合スコア973

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

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

runa

2021/07/14 23:28

御返答 ありがとうございます。 すみません、 >「ドメイン 内のフィールドである必要 があります。」 とは、具体的には どういった状況をさすのでしょうか? >No はAccessまたはSQL-serverの予約語 実際は「Aticl_No」です。簡素化して記載てしまいました。 >No を [No] とカッコで囲むと期待する動きになりました。 ダメでした。状況は 変りませんでした。
runa

2021/07/14 23:33

訂正 ✕「Aticl_No」 No 、実際は 製造No です。
odataiki

2021/07/15 01:46

慣れていないと文章わかりにくいですよね。 >「ドメイン 内のフィールドである必要 があります。」 翻訳すると 「t_Test」 テーブルに 「Aticl_No」 カラム(フィールド)が存在している必要がある ということです。 提示頂いたSQL文で私の環境でも再現したのでこれが正解と思ったのですが そもそも提示内容が違っていたのですね。 事情もあるでしょうが、可能な範囲でソースやSQLを開示していただくのが解決の近道と思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問