Microsoft Access 掲示板

非連結テキストボックスの変更前の値取得

9 コメント
views
4 フォロー

フォームにあるテキストボックスの値が以前と変更があったかどうかの確認したいですが、
下記のURLを見つけてやってみたのですが非連結テキストボックスではできないようです。
下記のURLでは連結テキストボックスでoldvalueの値が取得できるようです。
https://tsware.jp/tips/tips_219.htm

非連結テキストボックスではどのようにしたらいいでしょうか。
他のサイトでは更新フラグを立てておけばいいのでは?というページを見ましたが、
Changeイベントでは触っただけでもイベントになってしまうので、前と後で値が変わったらフラグを立てる
ということがしたいのですが、いい方法をご存じでしょうか。

チョコラブ
作成: 2023/03/17 (金) 11:05:16
通報 ...
1

OldValue の代わりになる Variant 型の変数をモジュールレベルで宣言しておき、
適当なイベントであらかじめ「更新前の値」をその変数に保存しておくしかないでしょう。

あらゆる非連結テキストボックスで使い回しできるようになさりたいのであれば、
そういうクラスモジュールを作成することになります。

6
チョコラブ 2023/03/28 (火) 09:25:55 9af1b@93fe9 >> 1

そのプログラムは難しそうですね。
クラスモジュール、あまり触ったことがなく...。
検索してみます。
コメントありがとうございます。

2
りんご 2023/03/17 (金) 14:56:18 935bc@0e907

 うろ覚えですが、テキストプロパティとバリュープロパティがあったと思う。違いを利用すれば、出来そうな気もするが、最近触ってないので外しているかもしれない。他には、もうひとつ非連結テキストボックスを用意してコピーしておくとか。
 それはさておき、前後の流れを踏まえた上で、そのフラグ立てに本当に何か意味があるのか、と検討するほうが大変です。

5
チョコラブ 2023/03/28 (火) 09:24:22 9af1b@93fe9 >> 2

お返事が遅くなり申し訳ありません。
非連結テキストボックスをもう一つ用意しておく…なるほどです。
ですが、もうすでにテキストボックスが膨大にたくさんあるのでこれ以上は操作が重たくなってしまいますね…。
もう少し検討します。
コメントありがとうございます。

3

フォームにあるテキストボックスの値が以前と変更があったかどうかの確認したいですが、

この以前の値というのがなんなのかをまずは明確にしてください。
あるいはその非連結コントロール(非連結フォーム)の使用目的も明確にしてください。

連結コントロールの場合のOldValueは下記の公式ドキュメントに解説があります。

Control.OldValue プロパティ (Access) | Microsoft Learn
OldValue プロパティは、連結コントロールの編集前の値を格納するために使用されます。 フォームの連結コントロールを編集しても、変更内容は、他のレコードに移動するまで保存されません。 OldValue プロパティには編集前のデータが格納されます。

レコードを保存すると、レコード ソースは更新され、コントロールの現在の値と OldValue プロパティの値は等しくなります。

連結フォーム上でコントロールを編集しても保存アクションを実行しないかぎりテーブルは更新されません。この更新前のテーブルの値がOldValue、編集中のコントロールの値がValueということになります。

その非連結フォームが、
テーブルから値を読み込みコントロールに設定する。
ユーザーがコントロールを編集する。
保存ボタン等で編集内容をテーブルに保存する。
という機能を持っているものなら、
読み込み時のテーブルの値が、連結コントロールのOldValueと同等のものいうことになります。

4
チョコラブ 2023/03/28 (火) 09:22:46 9af1b@93fe9 >> 3

hatenaさん
お返事が遅くなり申し訳ありません。
この以前の値が何かというのは二つあり、
例としてひとつは
11.00~15.00という値があるテキストボックスから抽出し、下限11.00、上限15.00という風に
一つのテキストボックスから下限の値と上限の値を自動で抽出してくれるようにプログラムを作りました。
ただ、テキストボックスにも下限、上限の値だけではなく他の文字列が混ざることがありうまく抽出できないので
抽出できなかった場合はテーブルに登録をしたいのです。
そこで、下限と上限の値に変更があれば登録をしたいんですが、プログラムでテキストボックスから自動で抽出された値に変更があれば登録しますか?という画面を出したいのです。

もう一つはhatenaさんのおっしゃるようにテーブルに登録した後に修正したい場合は読み込み時のテーブルがOldValueに該当するというのがこれですね。
一旦すべて登録してしまい、修正する形のほうがやりやすいでしょうか。
どのようなやり方がいいのか迷っています。

7

11.00~15.00という値があるテキストボックスから抽出し、・・・

この例の場合は、そのフォームを開いたときに、初期値(規定値)として、11.00~15.00 という値が表示されているということでしょうか。だとしたら、その初期値はどのように表示してますか。

テキストボックスにも下限、上限の値だけではなく他の文字列が混ざることがありまく抽出できない

抽出条件を設定するためのテキストボックスなら、そのような状態にならないような設計(時刻しか入力できないような入力規則)にする、あるいはそのようなことになったら再入力を求めるメッセージを表示するなど、とするのが普通だと思いますが。

そこで、下限と上限の値に変更があれば登録をしたいんですが、プログラムでテキストボックスから自動で抽出された値に変更があれば登録しますか?という画面を出したいのです。

ちょっと、状況が理解できません。
どちらにしても、何と比較して変更とするか、ですので、チョコラブさんが考える変更前の値をどこかに保存しておいて、それと比較するというブログラムを自前で作成することになるでしょう。保存する場所としては、フォームモジュールレベルの変数として格納するとか、テキストボックスのTagプロパティに格納するとか、、、でしょうか。

もう一つはhatenaさんのおっしゃるようにテーブルに登録した後に修正したい場合は読み込み時のテーブルがOldValueに該当するというのがこれですね。
一旦すべて登録してしまい、修正する形のほうがやりやすいでしょうか。

「一旦すべて登録してしまい」というのがどのような意味があるのが理解できませんが、
読み込み時のテーブルの値と、テキストボックスの値と比較すれば、変更があったかどうか確認できるのと違いますか。

8
チョコラブ 2023/03/28 (火) 12:56:02 9af1b@93fe9 >> 7

hatenaさんのおっしゃるようにデータベース化するにあたり、最適なフィールドになっていないのは承知です。
電子化するために部署内でバラバラだった帳票を整理しているところなのです。
以前はWordだった帳票をAccessに移行しているのでちょっとデータの型がバラバラなので整理するために
下限値と上限値の抽出を自動でできたら便利だと思って作ったのですが
作成者によって書き方がバラバラで、上限値、下限値以外のことも入力しているので
それはこちらで修正が必要なのです。

一度、フォームモジュールレベルの変数として格納するとか、テキストボックスのTagプロパティに格納する方法も検討してみます。
コメントありがとうございます。

9
りんご 2023/03/28 (火) 19:06:53 935bc@0e907

外注がお勧めですし、経営・人事が変わって後から大問題になると泣きっ面に蜂です。