- ベストアンサー
ACCESSのサブフォームでの既定値について
ACCESSで、サブフォームの1つの列の既定値を、隣の列のデータと同じにしたいです。 同じデータのひとつは、修正します。そのため、片方は原本とします。 こんな場合は、どうすればいいのでしょうか。 フォームの既定値に、「=サブフォームの列の名前」や「=テーブルの列の名前」にしてみましたがうまくいきませんでした。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
いろいろやってみましたが、変更の途中でフォームを 閉じたり、などを考えると、たとえば、 ID 元データ 修正後データ 1 中川 2 南 3 佐川 のようなテーブルがあるとします。名前を「テーブル1」 とします。 この、「テーブル1」には無い「たたき台」というフィールドを 新たに、「テーブル1」に設定します。 フィールド ID 元データ たたき台 修正後データ テーブル テーブル1 テーブル1 テーブル1 テーブル1 のようにします。 これを基に表形式のフォームを作成し、 出来たフォームをサブフォームとします。このサブフォームの 「たたき台」フィールドの更新後処理で、 Private Sub たたき台_AfterUpdate() Me!修正後データ = Me!たたき台 End Sub と、設定します。 つまり、「たたき台」のデータを変更すれば、まわりまわって 「テーブル1」の「修正後データ」が変更されます。 初期値では、「テーブル1」の「修正後データ」には 何も入っていません。「元データ」をすべて変更するならば 「修正後データ」にはデータを入れておく必要はありませんが、 変更するデータがまちまちならば、一旦すべてのデータを 「修正後データ」に入れておけばいいかもしれません。 その場合には、更新クエリを実行すれば一度にデータが はいります。更新クエリをSQLで表示すると、 UPDATE テーブル1 SET テーブル1.修正後データ = [テーブル1]![元データ]; のようになりますが、実際には、新しいクエリに「テーブル1」を表示し、 このクエリ更新クエリに変更し、フィールドの設定を、 フィールド 修正後データ テーブル テーブル1 レコードの更新 [テーブル1]![元データ] のように、設定します。これを適当な名前で保存し、 このクエリをクリックすれば「元データ」が「修正後データ」に 転記されます。つまり、 ID 元データ たたき台 修正後データ 1 中川 中川 2 南 南 3 佐川 佐川 この後は、変更するデータがあればフォームの「たたき台」に データを入れて変更後は、「修正後データ」のフィールドでも クリックすれば、「修正後データ」が変更されます。「元データ」 はそのままです。フォームを閉じても全てのフィールドのデータは 変更されずに保存されます。 こういう方法がデータの保持ということでは、安全では と思いますが。 後は、必要に応じて「修正後データ」あるいは、「元データ」 と「修正後データ」を取り出せばいいのでは、と思いますが。 あるいは、テーブルを別名で保存し、不要ならば「たたき台」 のフィールドを削除すればいいのでは、と思いますが。
お礼
ありがとうございます。 簡単に出来るものだと思っていました。 しかし、今回、回答いただいた文を読む限り、かなり例外的なことをしようとしていることがわかりました。 その結果、なぜ今回質問したことをしなければいけないか考え直すことにしました。 本当に詳しい説明をありがとうございます。 参考にさせていただきます。