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

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

新規登録して質問してみよう
ただいま回答率
85.39%
DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

VBA

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

Access

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

Q&A

0回答

312閲覧

個数フィールドが全て空白の場合を正常にプログラムが検出するようにしたい。

AKI_TADA

総合スコア8

DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

VBA

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

Access

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

0グッド

0クリップ

投稿2023/05/18 09:45

実現したいこと

全てのレコードの個数フィールドが空白になった場合、会社名でかけていたフィルターが解除されるようにしたい。

前提

今現在、個数フィールドに入力された商品をまとめてサブフォームに入力するプログラムを作成しております。
その中で、発注は一つの会社に1つの発注書で行うため、1つ注文商品を選択した(個数を入力した)場合、その商品と同じ会社の商品のみが表示される仕組みを作成しました。
その中で、全ての個数フィールドが空白になった場合、フィルターが解除される仕組みの方も作ろうとしております。
しかし、個数フィールドが空白になった場合として、値がNULLでないフィールドを探して存在しなかった場合にフィルターを解除する仕組みにしているのですが、そのフィールドを探す仕組みがうまく作動せず、全て空白になった場合でも値があるものと認識してしまっております。
この仕組みを正常に作動させるのにはプログラムをどう改善すればよいのでしょうか。

発生している問題・エラーメッセージ

個数フィールドの値を消去したとき、値が空白でないか判別する機能が正常に作動しない。

該当のソースコード

Dim DB As DAO.Database 'データベースへの参照を代入する変数を宣言する Dim RS As DAO.Recordset 'レコードセットへの参照を代入する変数を宣言する Dim RS2 As DAO.Recordset Set DB = CurrentDb() '「Q_商品一覧」クエリを開きレコードセットを再設定する Set RS = DB.OpenRecordset("Q_商品一覧", dbOpenDynaset) '現在のレコードの個数フィールドが0もしくは空白でない場合、その会社名フィールドと同じ会社名でフィルターをかける。 If Me.個数 <> 0 Or Me.個数.Value <> Null Then 会社名.SetFocus RS.Filter = "会社名 LIKE '*" & Me.会社名.Text & "*'" Set RS = RS.OpenRecordset 'フォームのレコードセットを再設定する。 Set Me.Recordset = RS Me.Requery Else '現在のレコードの個数フィールドが空白である場合、「Q_商品一覧」クエリを開きレコードセットを再設定する Set RS2 = DB.OpenRecordset("Q_商品一覧", dbOpenDynaset) '個数が空白でないレコードを探し、存在しない場合フィルターを解除する。 RS2.FindFirst " 個数 IS NOT NULL " If RS2.NoMatch Then Set Me.Recordset = RS2 Me.Requery Else End If End If

試したこと

個数 IS NOT NULLをISNULL(個数) = FALSE に替えてみたが結果は同じだった。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

logres_Fan

2023/05/18 13:27

 仕組みが作動しない、まずは、そこにDebug.PrintやMsgboxを設置して下さい。反応が無ければ、該当コードに分岐していないという事なので、条件式を再考して下さい。  それはさておき、いまいちわからないのが、Q_商品一覧について、個数が空白でないレコードを探し、存在しない場合、という点。まっさらな状態ならば該当すると思いますが、発注個数が遅かれ早かれ登録されますよね?運用開始直後だけの話になるのかな。
AKI_TADA

2023/05/18 23:55

回答ありがとうございます。この機能は商品をまとめて注文する機能のために発注明細と関連付けたテーブルを別に作成してそこを参照しております。ですので、まとめて注文が終わったら注文個数はリセットされる仕組みにしてます。発注個数の登録についてはまた別に上記の通り発注明細テーブルにしております。 Debug.printは個数が空白じゃない番号の確認のために設置したことがありまして、そこで最後に個数を消去した(これを消去すると個数入力されたフィールドがなくなった状態になる)際の商品IDが記録されたので、恐らく個数消去した際のフィールドが空白と認識されないのが原因だと考えられます。そこでどういう風にコードを変更すればいいか考えている状態です。
sk.exe

2023/05/19 06:47

> 個数フィールドに入力された商品をまとめてサブフォームに入力するプログラム ・メインフォームのレコードソースはどのような構造のテーブル/クエリなのか。 ・サブフォームのレコードソースはどのような構造のテーブル/クエリなのか。 ・[個数]はメインフォーム/サブフォームのどちらのレコードソースに含まれているフィールドなのか。 > 発注は一つの会社に1つの発注書で行うため、1つ注文商品を選択した > (個数を入力した)場合、その商品と同じ会社の商品のみが表示される仕組み > 全ての個数フィールドが空白になった場合、フィルターが解除される仕組み ・それぞれの処理を、どのオブジェクト/コントロールのどのイベントの発生時に実行しようとしているのか。 とりあえず、以上の点について具体的に明記されることをお奨めします。
logres_Fan

2023/05/19 07:57

単純なデータベースを用意して試してみました。 > 個数 IS NOT NULLの場合、全て空白になった場合でも値があるものと認識してしまっております。 個数 <> 0を試してみて下さい。理屈はさておき、Accessが良い感じに解釈して、ご希望通りになりそうかな?
AKI_TADA

2023/05/19 09:27

皆様回答の方ありがとうございます。 個数が空白になったら会社名のフィルターが解除される機能をについて自分で考え直してみたところ、会社名をまた1から指定し直さなければならなくなるデメリットが出てくるということがあって、この機能は付けず、フィルター解除は解除ボタンを別に作って行うことにしました。 皆様のアドバイスを裏切る形となってしまい、誠に申し訳ございません。
logres_Fan

2023/05/19 09:54

わかりました。 > If Me.個数 <> 0 Or Me.個数.Value <> Null Then これもを条件1のみの場合、条件2のみの場合どうなるかそれぞれ再確認するといいかもしれません。 条件2が期待通りに動いていない可能性、Me.個数.Value <> “”と比較してみるとか。 条件1のみでも、Accessが良い感じに解釈して期待通りに動いてしまう可能性。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問