Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


269 / 2272 ツリー ←次へ | 前へ→

【12304】フォームを開く時のデータ くやっち 13/4/15(月) 14:04 質問[未読]
【12305】Re:フォームを開く時のデータ かるびの 13/4/16(火) 1:36 回答[未読]
【12306】Re:フォームを開く時のデータ hatena 13/4/16(火) 13:08 回答[未読]
【12307】Re:フォームを開く時のデータ くやっち 13/4/16(火) 15:00 質問[未読]
【12308】Re:フォームを開く時のデータ hatena 13/4/16(火) 17:15 回答[未読]
【12309】Re:フォームを開く時のデータ くやっち 13/4/16(火) 17:33 お礼[未読]
【12310】Re:フォームを開く時のデータ hatena 13/4/16(火) 18:24 回答[未読]
【12315】Re:フォームを開く時のデータ くやっち 13/5/17(金) 10:40 お礼[未読]

【12304】フォームを開く時のデータ
質問  くやっち  - 13/4/15(月) 14:04 -

引用なし
パスワード
   こんにちは。

新しくデータを入力する場合に、コマンドボタンを押下し、フォームを開いてデータを入力するようにしています。
この時、既に入力していたデータは表示されず、新規のデータのみを入れられるようにしています。

今回新たに、ある条件で抽出するクエリを作成しました。
別のコマンドボタンを押すことで、このクエリが実行され、抽出されたデータのみが入力された状態で、フォームを開きたいのですが、どのようにすればよいでしょうか?

なお、ここで使用するフォームは新たに作るフォームではなく、新しくデータを入力する時に使用しているフォームです。


Access初心者で、右も左もわからない状態です。
よろしくお願いいたします。

【12305】Re:フォームを開く時のデータ
回答  かるびの  - 13/4/16(火) 1:36 -

引用なし
パスワード
    テーブルのレコードを、フォームに配置したテキストボックスに表示しようという場合、
まずフォームとテーブルが結び付いている必要があります。
 フォームとテーブルとを結び付けるのが、フォームのレコードソース・プロパティです。
 レコードソース・プロパティには、テーブル名やクエリ名を指定します。


 これだけでは、テキストボックスにはレコードの内容は表示されません。
 さらに、フォームとテキストボックスとを結び付ける必要があります。
 この機能を担うのが、テキストボックスのコントロールソース・プロパティです。
 コントロールソース・プロパティには、レコードソースで指定したテーブルやクエリの
フィールド名を指定します。


>別のコマンドボタンを押すことで、このクエリが実行され、抽出されたデータのみが入力された状態で、フォームを開きたいのですが、どのようにすればよいでしょうか?

 したがって、コマンド・ボタンをクリックしたときに、
フォームのレコードソース・プロパティと
テキストボックスなどのコントロールのコントロールソース・プロパティを
書き替えてやればいいです。
 これにはマクロかVBAを使います。

【12306】Re:フォームを開く時のデータ
回答  hatena  - 13/4/16(火) 13:08 -

引用なし
パスワード
   Accessのバージョンを明記してください。

>新しくデータを入力する場合に、コマンドボタンを押下し、フォームを開いてデータを入力するようにしています。
>この時、既に入力していたデータは表示されず、新規のデータのみを入れられるようにしています。

コマンドボタンにはマクロが設定してありますか。それともイベントプロシージャですか(ウィザードで作成)。


>今回新たに、ある条件で抽出するクエリを作成しました。
>別のコマンドボタンを押すことで、このクエリが実行され、抽出されたデータのみが入力された状態で、フォームを開きたいのですが、どのようにすればよいでしょうか?
>
>なお、ここで使用するフォームは新たに作るフォームではなく、新しくデータを入力する時に使用しているフォームです。

とりありずは、フォームのレコードソースにこのクエリを設定します。

この状態で、データベースウィンドウからフォームをダブルクリックして開いてみてください。それで抽出された状態で開くか、新規だけで開くか教えて下さい。

【12307】Re:フォームを開く時のデータ
質問  くやっち  - 13/4/16(火) 15:00 -

引用なし
パスワード
   ▼くやっち さん:
かるびのさん、hatenaさん。
ご回答ありがとうございました。

Accessのバージョンですが、以前は2000でしたが、現在は2003を使用しています。
十年くらい前に作成したものをリニューアルしています。

メインメニューのフォームにボタンを配置し、イベントプロシージャでフォームが開くようにしていました。

その時のVBは以下のようになっています。

Private Sub サービスレポート_Click()
On Error GoTo Err_サービスレポート_Click

  Dim stDocName As String
  Dim stLinkCriteria As String

  stDocName = "サービスレポートフォーム"
  DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_サービスレポート_Click:
  Exit Sub

Err_サービスレポート_Click:
  MsgBox Err.Description
  Resume Exit_サービスレポート_Click


で、今回新たにメインメニューに「抽出」ボタンを作りました。
テーブルから実際に抽出するクエリも作成しました。
クエリのみを実行すれば、抽出したいデータが表示されます。

しかし、新しく作ったボタンにサービスレポートフォームを開く際に抽出クエリを実行して開かせたいのですが、そもそも手順自体が分かっていないのだと思うのです。

ボタンを押すことでフォームを開き、クエリを実行してそのフォーム上にデータを入れ込むという考え方ではないのでしょうか?


hatenaさんのおっしゃっていた、フォームのレコードソースにこのクエリを設定してフォームを開くと、新規の状態で開きます。
また、クエリで設定しているフォームにデータを入力しようとすると、それ以外のフォームのデータの部分は「#Name?」と表示されます。
これはフォームに含まれる全データをクエリで設定しておく必要があるということでしょうか…。

【12308】Re:フォームを開く時のデータ
回答  hatena  - 13/4/16(火) 17:15 -

引用なし
パスワード
   > hatenaさんのおっしゃっていた、フォームのレコードソースにこのクエリを設定してフォームを開くと、新規の状態で開きます。

フォームをデザインビューで開いて、「データ入力用」プロパティが「はい」になっていると思いますので、「いいえ」にしてください。
これでフォームビューに変更して、既存のレコードが表示されるか確認ください。

> また、クエリで設定しているフォームにデータを入力しようとすると、それ以外のフォームのデータの部分は「#Name?」と表示されます。

レコードソースをクエリに変更する前は、テーブルを設定していたのですよね。
そのテーブルと、クエリのフィールド名はすべて同じになってますか。

まずは、上記の2点を確認ください。

【12309】Re:フォームを開く時のデータ
お礼  くやっち  - 13/4/16(火) 17:33 -

引用なし
パスワード
   ▼hatena さん:
ご指導いただきありがとうございました。
色々と試してみたところうまくいきました。


メニューに新しいボタンを配置し、それをマクロに関連付けしました。

マクロでは「フォームを開く」設定にして、フィルタ名に抽出用のクエリを設定したところ表示されるようになりました。

大変お騒がせをいたしました。


ちなみに、hatenaさんの二つ目の確認事項ですが、クエリのフィールド名とテーブルは同じものを使用しています。

前に駄目だったときは、クエリに無いデータ(リレーショナルには存在してますが、下部の欄にはすべてのデータを列記していませんでした)を選択すると#Name?になっていました。

【12310】Re:フォームを開く時のデータ
回答  hatena  - 13/4/16(火) 18:24 -

引用なし
パスワード
   うまく、行ったようでなによりです。

一応、おすすめの方法を提示しておきます。

サービスレポートフォーム の「データ入力用」は「いいえ」にしておきます。


「サービスレポート」コマンドボタンのクリック時のイベントプロシージャは下記のようにします。

Private Sub サービスレポート_Click()
On Error GoTo Err_サービスレポート_Click

  Dim stDocName As String
  Dim stLinkCriteria As String

  stDocName = "サービスレポートフォーム"
  DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormAdd

Exit_サービスレポート_Click:
  Exit Sub

Err_サービスレポート_Click:
  MsgBox Err.Description
  Resume Exit_サービスレポート_Click
End Sub

DoCmd.OpenForm の引数に acFormAdd を追加しただけです。

これで、「サービスレポート」コマンドボタンをクリックすると新規レコード入力状態で開きます。

次に、
抽出用のクエリを開いて、SQLビューにします。
WHERE句の条件式をコピーします。

例えば、

SELECT ・・・・・ FROM ・・・・
WHERE フィールド名 = 値;

となっていたら、フィールド名 = 値 の部分をコピーします。

「抽出」コマンドボタンのクリック次のイベントプロシージャ

Private Sub 抽出_Click()
On Error GoTo Err_サービスレポート_Click

  Dim stDocName As String
  Dim stLinkCriteria As String

  stDocName = "サービスレポートフォーム"
  stLinkCriteria = "フィールド名 = 値"
  DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_抽出_Click:
  Exit Sub

Err_抽出_Click:
  MsgBox Err.Description
  Resume Exit_抽出_Click
End Sub

stLinkCriteria に先ほどコピーした条件式を代入してます。

これで「抽出」コマンドボタンをクリックすると指定した条件で抽出されて表示されます。

これでうまくいったらクエリはもう不必要なので削除して結構です。

【12315】Re:フォームを開く時のデータ
お礼  くやっち  - 13/5/17(金) 10:40 -

引用なし
パスワード
   hatenaさん

お礼が遅くなり、大変申し訳ありませんでした。

クエリが不要な方法…。
私にはちんぷんかんぷんでした…(汗)

クエリは余計なことで、これが無い方がやっぱりいいということなんだと思いますが、今はまだこちらを試す勇気がありません。。。

もう少し理解してからかなって思っています。
大変貴重な構文をいただきありがとうございました。

もし、時間があったら試してみたいと思います。

269 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free