Access 2013 vba
メイン画面に、2つのサブフォーム(共に帳票)があり
親→子→孫
となっています。
この時、親、子、孫のレコードを取得して
ある書類を作成しエクセルに出力しようとしています。
この場合、親のデータは普通に変数Aに入れて
子のデータは一次元配列B()に入れ
孫のデータは一次元配列C(0)~C(3)に入れたものを、更に子用の一次元配列B1()~B4()に入れるように作りにしようと考えています。
この場合、
子の画面で次の2レコード目に進んだ時、子画面用のB1...B4の配列変数に入れている孫のC(0)~C(3)の配列の中身は、子画面の一レコードと二レコード目では同じものになるのでしょうか。
もし、同じものになるのであれば、この方法は使えないと思っていますが。。。
他に何か良い方法はありますでしょうか。
Accessで、クラスを作って、それを配列変数に入れるとか・・・
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
細かいことですが「RecordsetClone」は「変数」ではなくて「プロパティ」です。
さて、本題ですが、
> 一つお聞きしたいのですが、RecordsetClone変数だと、フィールド更新後に使うと、値が古いものが取得されてしまい、うまく計算が出来ない時があります。
フィールドは更新したが、まだレコード保存していない状態だとそうなるかもしれません。
フィールドを更新して、それを参照して使用する場合は、事前にレコード保存してテーブルに格納しておくべきですね。
テーブルに格納せずに、エラーや操作ミスで終了してしまった場合、テーブルの値と参照使用した値に矛盾が生じてしまう可能性があります。
フィールドを更新した場合は、RecordsetClone でデータを参照する前に、
DoCmd.RunCommand acCmdSaveRecord
でレコード保存しておくといいでしょう。。
Me.Recordset だと、レコードセットでの操作(レコード移動など)が直接フォームに影響を与えてしまうので、
処理が重くなるので避けるべきです。
他にもフォームのレコードセットを参照する方法として、RecordSet.Clone があります。
「フォームの Recordset, RecorsetClone, RecordSet.Clone の違い」はWEB検索すると詳しい解説が見つかると思います。
ご回答ありがとうございます。
RecordsetCloneを取得する前に、レコード保存をする・・・
これをしているとうまく処理ができています。ありがとうございます。
>「フォームの Recordset, RecorsetClone, RecordSet.Clone の違い」はWEB検索すると詳しい解説が見つかると思います。
こちらは、参照してみました。処理速度の違いもあるということですね。ありがとうございます
No.2
- 回答日時:
Accessのテーブルデータを他のアプリケーションに渡す一つの手法としてユーザー定義型(C言語の構造体)を利用する手があります。
その場合、BSave(変数名)
などの関数で、バイナリーデータとして一気に吐き出し
BLoad(変数名)
などの関数で、バイナリーデータを変数に一気に取り込むことも可能です。
http://www.cc.kyoto-su.ac.jp/~yamada/pB/struct.h …
質問の案件では、構造体をメンバにする構造体を作成することになるかと思います。
fa007さん、ご説明ありがとうございました。
ご説明していただいた構造体.構造体変数を使いました。
またよろしくお願いします。
No.1
- 回答日時:
RecordsetCloneプロパティで直接フォームのレコードセットにアクセスできます。
あるいは、レコードソースのテーブルをレコードセットとして開いてアクセスすることもできます。
レコードセットは、配列の高機能版と考えられるので、わざわざ配列に格納したり、クラスを作成するという手間をかける必要はないでしょう。
hatenaさん、ご回答ありがとうございます。
親フォームに複数のサブフォームが有り、そこからまた、マスターの値などを取得しなくてはいけなくて、なかなか複雑になりそうなので、RecordsetCloneを使うのと、同時に、構造体の構造体変数も使う事になりました。
一つお聞きしたいのですが、RecordsetClone変数だと、フィールド更新後に使うと、値が古いものが取得されてしまい、うまく計算が出来ない時があります。
この時には、Me.Recordset
で画面に直結したレコードセットを取得して値を取得するようにしましたが、これでもよろしいのでしょうか?
不都合があるとすれば、間違ってCloseしてしまうと、画面もエラーになってしまうぐらいかなと思いますが・・・
よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) 表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた 3 2023/06/16 00:31
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) Accessの代わりのノンプログラムデータベース作成 4 2022/10/21 09:26
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データの二重表示の原因
-
Accessでの排他制御
-
Access 削除クエリが重い
-
3つ以上のテーブルをUNIONする...
-
Accessにインポートしたら並び...
-
accessで検索&入力 データの...
-
数百万件レコードのdelete
-
Access カレントレコードがあり...
-
非連結サブフォームのレコード...
-
C# Windows Forms で、Accessみ...
-
Access 1レコードずつcsvで出力...
-
Access VBA Me.Requery レコー...
-
一部重複しているレコードの削除
-
Accessでのレコードの削除時の...
-
ManagementStudioからのデータ削除
-
レコードロックする方法
-
テーブルのレコード削除ができ...
-
AccessのSQLについて教えてくだ...
-
ACCESSのBookmarkプロパティの...
-
(ACCESS)並び替えをしないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessにインポートしたら並び...
-
データの二重表示の原因
-
2つの項目が重複するレコード...
-
3つ以上のテーブルをUNIONする...
-
数百万件レコードのdelete
-
Access VBA Me.Requery レコー...
-
非連結サブフォームのレコード...
-
Access 削除クエリが重い
-
ACCESSのBookmarkプロパティの...
-
Access 1レコードずつcsvで出力...
-
ManagementStudioからのデータ削除
-
Accessの重複クエリで最小以外...
-
Accessでの排他制御
-
Accessで重複したデータを一件...
-
(ACCESS)並び替えをしないで...
-
フォームからのレコード削除に...
-
SQLServerで同一条件レコードの...
-
Accessでの禁止文字チェック
-
Accessでレコードが更新された...
-
テーブルのレコード削除ができ...
おすすめ情報