Access2003 で開発をしています。
サブフォームで選択行のある項目の値を取得したいのですが、
下記ロジック(1)で正しく動作するアプリAと、動作しないアプリBが出てきました。
動作しないアプリは、他の行の値を取ってきてしまいます。
【ロジック(1)】
Set db = CurrentDb
Set rs = db.OpenRecordset("サブフォーム用テーブル", dbOpenTable)
Cnt = 1
If rs.BOF = True And rs.EOF = True Then
Else
Do Until Cnt = Forms![メイン]![サブフォーム].Form.CurrentRecord
rs.MoveNext
Cnt = Cnt + 1
Loop
MsgBox ("項目1の値:" & rs![項目1])
End If
色々調べたところ、正しく動かないアプリでは、ロジックを下記(2)のように変更したら、
正しく動きました。
【ロジック(2)】
Set rs = db.OpenRecordset("サブフォーム用テーブル", dbOpenDynaset)
MsgBox ("項目1の値:" & rs.Fields("項目1").Value)
こちらのロジックの方が簡単なのもありますが、
テーブルをopenする際、dbOpenTable と dbOpenDynaset がありますが、
サブフォームのレコードを扱う際には、dbOpenDynaset にするべきなのでしょうか。
ロジック(1)で正しく動作していると思われるアプリAは、現在稼動中のため、
ロジックに間違いがなければそのままにしたいのですが、
ロジック(1)の dbOpenDynaset だと間違いで不具合が起きる可能性があるのでしょうか?
ご教授いただければ幸いです。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
> サブフォームで選択行のある項目の値を取得したいのですが、
であれば、
MsgBox "項目1の値:" & Forms![メイン]![サブフォーム].Form.Recordset("項目1")
で求まると思います。
「項目1」自体をサブフォーム内で求めていなかったら、
サブフォーム内の一意に特定できる内容を上記ルートで求め、
WHERE 条件に付加して Recordset を得れば良いかと。
提示された処理の前後で何をやっているのかわかりませんが、
今までは、偶々動いていたというレベルと思います。
テーブルを開いただけでは、レコードの並び順は保証されていなかったかと・・・
Dynaset も同様だったかと・・・
偶々だったものが偶々でなくなり、さらに偶々動いたものと比較はできないかと・・・
No.1
- 回答日時:
目的は、Forms![メイン]![サブフォーム]の最終レコードの取得でしょうか?
ロジック1・2とも問題です。
テーブルを開いたときのレコードの並び順と
サブフォームの並び順は必ずしも一致しません。
(並び替えやフィルターをかければなおさらの事)
なのでDAOですが、メインフォーム上から実行する場合
Dim rs As DAO.Recordset
Set rs = Me!サブフォーム.Form.Recordset.Clone ’コピーを参照する
rs.MoveLast
MsgBox rs!項目1.Value
rs.close:set rs = Nothing
などでしょうか。
回答ありがとうございます。
ロジック(1)、(2)共に正しく動作することがあり、
(2)については正しいものかと思っていました。
最終レコードの取得ではなく、
サブフォーム上で選択している行の取得なのですが、
その場合は、どのようなロジックになるのでしょうか?
度々すみませんが、ご教授いただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Access サブフォームでの選択行の取得
その他(データベース)
-
ACCESS DAOでFindFirstの書き方
PowerPoint(パワーポイント)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
-
4
アクセスVBAのMe!と[ ]
Access(アクセス)
-
5
「RunSQL」と「Execute」の違い
Access(アクセス)
-
6
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
7
AccessからExcelへの条件付エクスポート
その他(データベース)
-
8
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
9
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
10
Excel→Accessへの日付データのインポート
Excel(エクセル)
-
11
ACCESSでタイトルバーを非表示にする方法
Access(アクセス)
-
12
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
13
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
14
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
15
アクセスでフォームビューがみれません?
Access(アクセス)
-
16
accessの SQL文 INSERT命令
Access(アクセス)
-
17
ACCESS VBAでファイルを開くダイアログを表示させたい
Access(アクセス)
-
18
AccessのFormの設定で、開いた時に必ず最大化で表示する方法が分からず困っています
Access(アクセス)
-
19
VBA ACCESS SQL WHERE句の数値型の変数の記述の仕方
その他(プログラミング・Web制作)
-
20
名前'dbOpenDynaset'は宣言されていません というエラーがでてしまいます。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォーム上にアイコン...
-
サブフォームの行ごとにコンボ...
-
VB.net(VB)で、フォームにExcel...
-
Google form を利用して 問い合...
-
子フォームから親フォームのオ...
-
ASP.NETとC#でWebフォームを呼...
-
Accessでフォームから別フォー...
-
Googleフォーム・複数人の申し...
-
ディスプレイ解像度より大きな...
-
ToolStripStatusLabelを固定し...
-
VBAにてメッセージボックスを最...
-
メッセージボックスの背景色
-
[C#]別フォームとの連動について
-
フォーム上の全てのコントロー...
-
デロンギのオーブンが故障して...
-
ACCESS 表形式フォームで1レ...
-
PDFフォームに本日の日付を自動...
-
access開いているフォームのモ...
-
ExcelVBAでフォーム内でブック...
-
Accessでの顧客管理フォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
accessで2つ以上のフォームを起...
-
VB.net(VB)で、フォームにExcel...
-
筋トレ初心者です。 ジムでひた...
-
Access 無操作の場合、自動で閉...
-
サブフォームのイベント取得
-
サブフォームの行ごとにコンボ...
-
VBプログラムの終了
-
ユーザーフォーム上にアイコン...
-
アクセスVBA フォームのス...
-
ディスプレイ解像度より大きな...
-
PDFフォーム内で日付計算したい...
-
フォーム上の全てのコントロー...
-
VBAでフォームのスクロールバー...
おすすめ情報