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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Access

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

Q&A

解決済

2回答

2831閲覧

Accessのレコードソースについて

Chandler_Bing

総合スコア673

Access

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

0グッド

0クリップ

投稿2021/10/07 11:30

いつもお世話になっております。

度々Accessの件で質問させて頂いております。

サブフォームと対応しているクエリを調べるために以下の処理をデバッグ確認致しました。

VBA

1Debug.Print フォーム名.Form.RecordSource

そうすると対応しているセレクト文のクエリが取得できました。

これを踏まえて以下、2つ質問があります。

★質問一つ目★
カレントデータベースの全クエリファイルにを吐き出すModuleを実行すると、
フォーム名.Form.RecordSourceの結果と同じセレクト文が定義されている
.sqlファイルが取得できました。

======↓↓↓取得できたファイル名↓↓↓======
sq_cfmフォーム名~sq_cfmサブフォーム名.sql
======↑↑↑取得できたファイル名↑↑↑======

クエリを吐き出すModuleは以下です。

VBA

1' クエリごとにファイルに吐き出す 2Private Sub exportSql() 3 4 Dim Dbs As DAO.Database 5 Dim Qdf As DAO.QueryDef 6 Dim FileName As String 7 Dim FNum As Integer 8 Dim stSQL As String 9 Dim ret As Double 10 11 ' データベースセット 12 Set Dbs = CurrentDb 13 'Set Dbs = DAO.OpenDatabase("c:\test.mdb") ' DBの指定がある場合 14 15 'クエリ分ループ 16 For Each Qdf In Dbs.QueryDefs 17 outputFilePath = "パス" 18 With CreateObject("ADODB.Stream") 19 .Charset = "UTF-8" 20 .Open 21 .WriteText Qdf.Sql, 1 22 .SaveToFile outputFilePath, 2 23 .Close 24 End With 25 Next 26 27 Set Dbs = Nothing 28End Sub 29

しかし、カレントプロジェクトのナビゲーションのクエリから
取得できたファイル名で検索をかけてもヒットしません。(cfmとつくクエリすらありませんでした)

sq_cfmxxxxxx~xxxxxxxのようなクエリ名で吐き出されるクエリはどこに定義があるのでしょううか?
フォームのモジュール内でしょうか?

★質問二つ目★
レコードソースを定義する際は
xxxx.RecordSource = 'table_a' や
xxxx.RecordSource = 'select * form table_a'
のようにするのが普通なのでしょうか?

文章がややこしいですが、ご教授のほどよろしくお願いします。

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

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

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

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

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

guest

回答2

0

2つ目のご質問ですが、何を持って「普通」をするかわかりませんが、そのようにできるのですから、VBAでレコードソースを設定したいのであれば、そうなるかと。
ただし、私個人的には、VBAを利用するのであれば、そもそも連結フォームは使用しないので、このような書き方はしません。

投稿2021/10/07 12:34

hex309

総合スコア761

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

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

0

ベストアンサー

★質問一つ目★

フォームやレポートのレコードソース、コンボボックスやリストボックスのレコードソースに設定されているSQLが表示されるみたいですね。
システムが管理用に使っているものだと思います。ユーザーに勝手に変更されては困るので見えないようにしているのでしょう。
ですので、気にしてもしょうがないことです。

★質問二つ目★

xxxx.RecordSource = 'table_a' や

xxxx.RecordSource = 'select * form table_a'
のようにするのが普通なのでしょうか?

VBAでレコードソースを設定するという意味ですか。
普通はそのようなことはしないですね。
デザインビューで「レコードソース」プロパティに設定します。

フォームのレコードソースを動的に変更したいときは、することもありますが、
たいていは、フィルタープロパティや並べ替えプロパティの設定で間に合うので、
レコードソースの設定はVBAですることはめったにありません。
(そのようなことになるのはテーブルの設計に問題があると考えたほうがいいでしょう。)

投稿2021/10/07 12:29

hatena19

総合スコア33795

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

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

Chandler_Bing

2021/10/07 12:34

解答ありがとうございます。 >ですので、気にしてもしょうがないことです。 ではどのようにして、フォームとクエリを紐づけるのでしょうか???
hatena19

2021/10/07 12:37 編集

フォームのデザインビューで「レコードソース」プロパティにテーブル名、クエリ名、SQL文を設定します。 これまでの一連の質問を見てみましたが、まずは入門書か入門サイトで一通り勉強された方が早道かと思います。
Chandler_Bing

2021/10/07 12:55

ありがとうございます。 プログラミング経験はるのですが、アクセスは始めたばかりですみません。。 まだまだ業務レベルではありません。 デザインビューを開いてもデータタブにレコードソース欄がなかったので、 xxxx.RecordSourceで確認致しました。 どうかご教授のほどよろしくお願いします。
hatena19

2021/10/07 13:02

ナビゲーションウィンドウでフォームを右クリックしてデザインビューをクリックします。 フォームがデザインビューで開きますので、そのままどこも触らないで、プロパティシートのデータタブをみてください。一番上にある「レコードソース」があります。 フォーム上のどこかをクリックするとクリックしたもののプロパティになるのでクリックする前に確認してください。 クリックしてコントロールなどを選択したあとにフォームのプロパティを確認したい場合は、ルーラーの左上に四角のボックスがありますのてそこをクリックするとフォームプロパティになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問