ccess2003のレポートについて教えてください。http://q.hatena.ne.jp/1267778643の続きです。

my_table,my_form,my_reportが登場します。

・my_formフォームにボタンを設置。クリックすると、「my_report」というレポートを呼び出す。

Private Sub cmd_Execute_Click()
DoCmd.OpenReport my_report, acViewPreview

・レポート上(my_report)には、r_ID,r_Nameというテキストボックスが配置されています。この2つのテキストボックスにIDと名前を表示したいと思っています。

・レポートオープン時には、下記が流れてレコードソースがセットされます。
Private Sub Report_Open(Cancel As Integer)
Dim sql As String
sql = "SELECT ID,Name from my_table where ID Between 0 and 100"
Me.RecordSource = sql
end sub

質問続きは補足で。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/03/10 01:39:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mj99 No.1

回答回数138ベストアンサー獲得回数38

ポイント100pt

RecordSetを別途持って、RecordSourceを使わないサンプルがあります。

http://hatenachips.blog34.fc2.com/blog-entry-76.html

同ページ、下のほうにちょっと複雑なサンプルがあります。

http://www42.tok2.com/home/hatena19/samplefile/RptNonConnect.zip


ページセクションの制御を自身のコードを制御する必要があり、めんどうです。

実用性が無い気がします。

----

RecordSourceを使う場合は、ページセクションの制御をAccessに任せれるので楽です。

RecordSourceの内容と一致するようにコントロールの連結内容を変更するだけでOKです。

Private Sub Report_Open(Cancel As Integer)
    Dim sql As String
    sql = "SELECT ID,NAME from my_table where ID Between 0 and 100"
    Me.RecordSource = sql

    '左辺にレポートのコントロールを指定、右辺にSQL内のフィールドを指定します。
    Me.r_ID.ControlSource = "[ID]"
    Me.r_NAME.ControlSource = "[NAME]"
End Sub
id:akaired

Me.r_ID.ControlSource = "[ID]"こういったやりかたを知りませんでした。このようにして指定できるんですね、ありがとうございます!感謝です!

2010/03/09 22:46:34
  • id:akaired
    一番わからないのは、詳細_Formatにr_ID,r_Nameテキストボックスが配置されています。
    ここに"SELECT ID,Name from my_table where ID Between 0 and 100"で引っ張ってきたレコードセットの
    値をr_ID,r_Nameにセットしたいのですが、どのように設定すればよいのでしょうか?
    Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

    End Sub

    ここがわからないのですが、レコードソース=レコードセットなのでしょうか?
    参考ページ:
    http://www.accessclub.jp/property/data/ControlSource.html
    http://www.geocities.jp/cbc_vbnet/cnntrol/form.html
  • id:taknt
    たまに Accessの Aが 抜けるね。
  • id:GreenStar
    > SELECT ID,Name from my_table where ID Between 0 and 10

    もしもだけど SELECT ID,Name from my_table の部分は常に同じというなら、それをレポートのプロパティのレコードソースとして書いておいて、VBAではフィルタの欄にID Between 0 and 10を書き込むだけにしたほうが楽だよ。
    最初にコメントした質問がキャンセルで消えちゃったんだけど、書かなかった??

    それとも SELECT ID,Name from my_table の部分も時と場合によって違ってきたりするのかな?

    Accessの使える環境が空いたら、質問そのままに答えるコード書いてもいいけど、どうなのかな?

    確かにAは抜けてるね!!
  • id:akaired
    taktさん
    ご指摘ありがとうございます。気をつけます。

    GreenStarさん
    レポートのプロパティにSQL文を書き込んだやりかた、以前のコメントで参考にさせて頂きました。質問キャンセルしたらコメント消えるとは知らずに消してしまいました、失礼しました。実際にやりたいことは、a.mdbとb.mdbの二つのmdbファイルがあります。a.mdbにレポート、フォームなどがあり、b.mdbにテーブルが存在します。質問の中のレポート、フォームなどはa.mdbにあります。

    ・a.mdbのmy_formからb.mdbのmy_tableにアクセスしてSQLでレコードセットを取得し、そのレコードセットをa.mdbのmy_reportにセットしたいと考えていましたので、プロパティのレコードソース、フィルタで設定するのではなく、VBAでできたらいいなと思っていました。もしコードをしめして頂けると嬉しいです、よろしくお願いします。
  • id:GreenStar
    n を抜いて書くとは! 洒落てるね!! スルーすべきだった?

    他の質問でコード書いてて遅くなりましたが、なるほど、そういう理由!!
    でも、それなら単純にb.mdbのテーブルを、リンクテーブルにしてしまえばa.mdb内にあるテーブルとまったく同じように扱えるのだけど、リンクテーブルはダメって事?
    仮にリンクテーブルにしなかったとしても、レポートのレコードソースプロパティに
    SELECT * FROM b.my_table;
    って書けば利用できるのだけど、これもダメ?

    ちなみに、レポートのレコードソースを空にしておいて、VBAでレコードセットをわますって手は今ちょっと苦戦中!!AccessVBAかなり忘れてるかも!! 後日にして頭を冷やさないといけないかもしれないし、他の人が答えてくれるかもしれないので、待ってとしか言えない! ごめん!!
  • id:GreenStar
    レポートのレコードソースプロパティをVBAで書き換える案が回答されましたね。
    レコードセットをまわす方法は確かに面倒なので、考えるの、もう止めときますね。
  • id:akaired
    GreenStarさん
    やはりレコードセットでまわすのは実用的じゃないんですね。よく理解できました。補足いれて頂き感謝です。ありがとうございます!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません