Access上で新しいデータベースを作成中なのですが、サブフォーム内の再クエリが上手くできません。
2つのコンボボックスを連動させた物がサブフォーム内にあるのですが、この2つを連動させる為にどうしてもサブフォームでの再クエリが必要となります。
そして、その再クエリのマクロでのコントロール名がわかりません。
最初のコンボボックスを[果物]次のコンボボックスを[りんご]と仮定すると、
[果物]→再クエリ→[りんご]のような形になる為、コントロール名は[りんご]になるはずなのですが、サブフォーム内の[りんご]の為、なんと表現していいのかわかりません。その結果、上手く再クエリが働いてくれません。
コントロール名はなんと書けばよろしいのでしょうか?
(何も書かなくても再クエリされないです…)
Access初心者なのでわかりやすく言っていただければと思います。
長い質問になってしまいましたがよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

文法 SQL」に関するQ&A: PL/SQLでのSQL文法

A 回答 (2件)

はずしていたすみません。



連動させるということは、「果物」コンボボックスで
指定した値を元に「りんご」コンボボックスのレコ
ードを抽出するっていう形でしょうか?

「果物」コントロールの更新後イベントモジュールで「りんご」コントロールの値集合ソースのSQL文を書き換え再クエリーをかけるっていうやり方はどうでしょう?

Private Sub 果物_AfterUpdate
りんご.RowSource="SELECT フィールド名1,フィールド名...... FROM テーブル名 WHERE (フィールド名="& 果物 &")"
りんご.Requery
End Sub

この回答への補足

CHOROLYNさん、ご返答をありがとうございます。
実はAccess初心者の為、SQLが使えません。
でもおっしゃるとおりにしてあるはずですが…

[りんご]の値集合体ソースに以下の文を入れています。

SELECT [元になるクエリ].[りんご] FROM 元になるクエリ WHERE ((([元になるクエリ].[果物])=[FORMS]![メインフォーム]![サブフォーム]![果物])) ORDER BY [元になるクエリ].[ID];
※元になるクエリとは[果物]と[りんご]の値の集合体です。

そして、[果物]の更新後処理として[りんご]の再クエリのマクロを組んでいます。
その再クエリマクロが働きません。
マクロ上ではアクションで再クエリを選択し、その際の「コントロール名」がわかりません。
[りんご]では働かないし…、
Forms![メインフォーム].form.[サブフォーム]![りんご]でもダメでした…。

う~ん?? どうすればいいんでしょう??
よろしくお願いいたします。

補足日時:2001/03/26 10:36
    • good
    • 0

メインフォームに「果物」サブフォームに「りんご」があるということでしょうか?



Forms![メインフォーム名].form.[サブフォーム名]![コンボボックス名].Requery

では駄目でしょうか?
ちょっと確認できないので細かい文法とか不安ですが...

この回答への補足

CHOROLYNさん、ご返答をありがとうございます。
やってみましたがダメでした…。

補足ですが、[果物]と[りんご]は両方サブフォームにあります。
サブフォームだけで試してみると、両方のコンボボックスはきちんと連動しています。
それを応用させてメインフォーム上で試してみるとダメなのです…。

「このウインドウでは"ApplyFilter/フィルタの実行アクションを実行できません」というエラーメッセージが出て、それをOKで返すと、「アクションの実行エラー」ダイアログで「再クエリ」で引っかかっていることがわかります。

なぜでしょう????
ご存知の方はよろしくお願いいたします。

補足日時:2001/03/25 12:16
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess 別フォームへの再クエリ(更新)がしたい。

宜しくお願いします。

仕様環境:WinVISTA Access2007

別フォームから別フォームへの再クエリの仕方を教えてください。

画像を貼らせて頂きます。
まず、後ろのメインフォームから新規作成ボタンを押して、
別のフォーム(作成画面)を開きます。
そこに新しいデータを入力して、閉じますと、
そのままではメインフォームには反映しません。
(テーブルには反映していますが)

別フォーム(新規の作成画面)に再クエリをかけても
そのフォームが更新させるだけで、メインフォームに変化はありません。

ちなみにメインフォームに作った更新ボタン(中身は再クエリ)を押すと反映されます。

どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?


やりたいことは別フォームのOKボタン(画像参照)を押すと
別フォームが閉じると同時にメインフォームが再クエリ(更新)されるとベストです。
(今のところOKボタンの中身は”閉じる”のマクロだけです)

構造は簡単で恐縮ですが、
テーブル:Tメイン
フォーム:メインフォーム
     作成画面フォームetc..

です。
クエリはメインフォーム自体にクエリビルダを使っていますが、
特別な施しなどはしていません、うまく動作しないところがあって、
いろいろ調べていてそうすると改善すると書いてあったので。。

ちなみにテーブルには「日付」の後順で並び替えをかけています。

当方、VBAに弱いのでマクロで操作できるのでしたらお願いします。
マクロで出来ないものでしたらVBAを教えて頂ければ、
イベントプロシージャに書き込みます。

大変恐縮ですがお知恵をお貸しください、宜しくお願いします。

宜しくお願いします。

仕様環境:WinVISTA Access2007

別フォームから別フォームへの再クエリの仕方を教えてください。

画像を貼らせて頂きます。
まず、後ろのメインフォームから新規作成ボタンを押して、
別のフォーム(作成画面)を開きます。
そこに新しいデータを入力して、閉じますと、
そのままではメインフォームには反映しません。
(テーブルには反映していますが)

別フォーム(新規の作成画面)に再クエリをかけても
そのフォームが更新させるだけで、メインフォームに変化はあり...続きを読む

Aベストアンサー

連投すみません。
・・というか、私も「削除されました」というのを見て一旦中止してました。
(中止した場合も含めて、回答はメモ帳で保存しているので無事でしたが)

> どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?

マクロの場合は、「オブジェクトの選択」アクションで対象フォームを選択した後、
「再クエリ」アクションを行えばOkです。
なお、「作成画面」フォームも連結フォーム(レコードソースが指定されたフォーム)と
いう前提で作成しました。

【1行目】
アクション: 閉じる
  オブジェクトの種類: フォーム
  オブジェクト名: 作成画面
  オブジェクトの保存: 確認
  ※今回の内容・順序では、オブジェクトの種類と名前は空白でも可。
   (指定なしの場合、現在のフォームが閉じられるので)
【2行目】
アクション: オブジェクトの選択
  オブジェクトの種類: フォーム
  オブジェクト名: メインフォーム
  データベース ウィンドウ内: いいえ
【3行目】
アクション: 再クエリ
  コントロール名: (空白のままにします)

<解説>
メインフォームを再クエリする前に、作成画面側のデータを保存してやる必要が
あります。
ここでは、「閉じる」アクションによって、実質的なレコード保存を行っています。
順序を逆(オブジェクトの選択→再クエリ→閉じる)では、メインフォームには
反映されないのでご注意下さい。

連投すみません。
・・というか、私も「削除されました」というのを見て一旦中止してました。
(中止した場合も含めて、回答はメモ帳で保存しているので無事でしたが)

> どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?

マクロの場合は、「オブジェクトの選択」アクションで対象フォームを選択した後、
「再クエリ」アクションを行えばOkです。
なお、「作成画面」フォームも連結フォーム(レコードソースが指定されたフォーム)と
いう前提で作成しました。

【1...続きを読む

QAccess 2003でサブフォームが更新されません。

リストボックスの値を変更すると、サブフォームが更新されるようにしたいのです。
サブフォームのレコードソースはクエリから引用しています。

Dim db As Database
Dim qry As QueryDef
Set db = CurrentDb
Set qry = db.QueryDefs("計画クエリ")
qry.SQL = newSQL
qry.OpenRecordset
qry.Close
db.Close
Set db = Nothing

Me!計画クエリのサブフォーム.Form.Requery

という形で、更新しようとしても更新されません。詳しい方教えてください。

Aベストアンサー

確認したところ、クエリのSQL文の更新は、その前に開かれていた
フォームに対しては反映されないようです。
(レコードソースにクエリが指定されている場合、クエリそのものを
 使用しているというより、そこに記述されたSQL文が使用されて
 いる、ということかもしれません)

解決策としては、レコードソース(RecordSource)の再設定、という
ことになるかと思います。
とりあえず、運用上「計画クエリ」のSQL文が、現在のサブフォームのSQL分と
整合性を求めるかどうかで、2通りの対処が考えられます。

【解決策1:「計画クエリ」のSQL文を連動させる必要がある場合】
計画クエリのSQL文を差し替えた後に、レコードソースに同クエリを
再設定します。

Dim db As DAO.Database, qry As DAO.QueryDef

Set db = CurrentDb
Set qry = db.QueryDefs("計画クエリ")
qry.SQL = newSQL
'ここではレコードセットを開く必要はないので、そのまま閉じます
qry.Close
'CurrentDbの場合、Closeは不要(無効)かと思います(多分(汗))
Set db = Nothing

Me!計画クエリのサブフォーム.Form.RecordSource = "計画クエリ"


【解決策2:「計画クエリ」のSQL文を連動させなくてもよい場合】
フォーム・サブフォームのレコードソースには、テーブルやクエリだけでなく、
SQL文も指定可能なので、計画クエリのSQL文は変更せずに、
レコードソースを直接編集します。
こちらの場合、切替に要するコードは1行だけです。

Me!計画クエリのサブフォーム.Form.RecordSource = newSQL


・・・以上です。

確認したところ、クエリのSQL文の更新は、その前に開かれていた
フォームに対しては反映されないようです。
(レコードソースにクエリが指定されている場合、クエリそのものを
 使用しているというより、そこに記述されたSQL文が使用されて
 いる、ということかもしれません)

解決策としては、レコードソース(RecordSource)の再設定、という
ことになるかと思います。
とりあえず、運用上「計画クエリ」のSQL文が、現在のサブフォームのSQL分と
整合性を求めるかどうかで、2通りの対処が考えられます。...続きを読む

QACCESSサブフォームにデータ反映されない

よろしくお願いします。

Access2010を使っています。
メインフォームにあるテキストボックス2つに条件を入力し、
抽出したデータをサブフォームで表示させたいと思います。

●メインフォーム名「フォーム1」
テキストボックス2つ「tex1」「tex2」

●データ元クエリ「q1」
フィールド名「ID1」「ID2」「Name」

●サブフォームSQL
SELECT q1.Name
FROM q1
WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And
((q1.ID2) = Forms![フォーム1]!tex2)));


フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。
サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。

サブフォームのコントロールソースへSQLを入力するだけでは、
メインフォーム内でのデータは反映されないんでしょうか??

Aベストアンサー

>サブフォームをデータシートで別に開くと、
>データ抽出できていることは確認できました。

の部分がよくわかりませんが。


普通は、たとえば、
メインフォームにボタンを一つ
設定し、そのボタンのクリックイベントで、

Private Sub コマンド0_Click()
Me!埋め込み0.Requery
End Sub

のように設定します。
ここで、「埋め込み0」というのはメインフォームの
デザインビューでサブフォームを表示するために
設定するコントロールのことで、サブフォーム
そのもではありません。初期値は「埋め込み0」
のような名前になっています。サブフォームと
同じ名前に設定しているならば、「埋め込み0」
のところをサブフォームと同じ名前に置き換えても
かまいません。


そのほかには、「tex2」の更新後処理に同様に、

Private Sub tex2_AfterUpdate()
Me!埋め込み0.Requery
End Sub

のように設定してもいいのですが、この場合には
「tex2」に入力後、一旦フォーカスを移動させる
必要があります。たとえば「tx1」にマウスを
移動させてクリックするとか。それによって
「tex2」の更新後処理が起動されます。

>サブフォームをデータシートで別に開くと、
>データ抽出できていることは確認できました。

の部分がよくわかりませんが。


普通は、たとえば、
メインフォームにボタンを一つ
設定し、そのボタンのクリックイベントで、

Private Sub コマンド0_Click()
Me!埋め込み0.Requery
End Sub

のように設定します。
ここで、「埋め込み0」というのはメインフォームの
デザインビューでサブフォームを表示するために
設定するコントロールのことで、サブフォーム
そのもではありません。初期値は「埋め込み0」
のよう...続きを読む

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QACCESS フォームからサブフォームのデータを更新・入力したい

ACCESS フォームからサブフォームのデータを更新・入力したい

tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。

フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェクトに所属するプロジェクトコードをサブフォームのtbl_テーマのプロジェクトコードにも反映したいのですがどのようにしたらよいでしょうか?
そういったことは可能でしょうか?分かりにくい説明で申し訳ないですが教えていただけると助かります。よろしくお願いします!



DBの構成
【テーブル】
tbl_プロジェクト (1件1件のIDとプロジェクトコードを持つ)
(フィールド:P_ID、プロジェクトコード、件名、契約日など)
tbl_テーマ(プロジェクト毎に関連のあるキーワードを持つ)
(フィールド:P_ID、プロジェクトコード、テーマ)←これのプロジェクトコードにtbl_プロジェクトのデータが入るようにしたい。
tbl_顧客(プロジェクトを依頼した顧客情報を持つ)
【クエリ】
q_テーマ(プロジェクト、テーマ、顧客を抽出するクエリ)
【フォーム】
f_プロジェクト (プロジェクトを1件ずつ表示・参照・新規作成するフォーム)
f_テーマサブフォーム (f_プロジェクトフォームのプロジェクトコードにづきテーマを
        表示・入力するサブフォーム)

リレーションはP_IDをキーに一対多で作成しています。

ACCESS フォームからサブフォームのデータを更新・入力したい

tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。

フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェク...続きを読む

Aベストアンサー

No.4です。

前回の回答は、「レコードの新規登録」のみを想定していました(汗)
大変失礼致しました。


【「メインフォーム」-「サブフォームの新規レコード」間の不一致について】
(=No.4の補足での、2個目の「◆」の件)

メインフォーム側の「レコード移動時」イベントで、『プロジェクトコード』の
更新後イベントと同様の処理を行えば、解消すると思います。
(先頭1行が「Private Sub Form_Current()」となる他は、前回のVBAと全く
 同じなので、今回は省略します)


【既存レコードでの『プロジェクトコード』の空白について】
(=No.4の補足での、1個目の「◆」の件)

対処法としては、
 a)更新クエリを使用して、tbl_テーマの『プロジェクトコード』を一括更新
  (→tbl_テーマに入力済みの『P_ID』の再確認が不要な場合)
 b)「メインフォーム上のプロジェクトコードを、サブフォームの全レコードに
  一括代入」するためのコマンドボタンを、メインフォームに追加
  (→tbl_テーマの『P_ID』が正しいかを目視確認してから代入する場合)
の、2つの考え方があります。

「a」については添付画像をご覧いただくとして、ここでは「b」について説明
します。

メインフォームに『コード転記』コマンドボタンを作成したら、そのクリック時
イベントに以下のコードを記載して下さい:

Private Sub コード転記_Click()

  If MsgBox("サブフォームにプロジェクトコードを追記します", vbOKCancel, "確認") = vbCancel Then Exit Sub

  'サブフォームの全レコードを上書き更新
  With Me![サブフォームのコントロール名].Form.RecordsetClone
    Do Until .EOF
      .Edit
      !プロジェクトコード = Me!プロジェクトコード
      .Update
    Loop
  End With

  '更新を反映
  Me![サブフォームのコントロール名].Form.Refresh

  MsgBox "追記しました", , "確認"

End Sub


なお、「a/b」のどちらを採った場合でも、サブフォームの『P_ID』の上書き
編集に合わせて『プロジェクトコード』も連動して更新させるには、別途、
以下のような『P_ID』の更新後イベントでの対応が必要です:

Private Sub P_ID_AfterUpdate()
'メインではなくサブフォームの『P_ID』テキストボックスの更新後イベント

  If IsNull(Me!P_ID) Then
    Me!プロジェクトコード = Null
  Else
    Me!プロジェクトコード = DLookup("[プロジェクトコード]", "tbl_プロジェクト", "[P_ID]=" & Me!P_ID)
    '『P_ID』がテキスト型の場合は上記ではなく以下のコード
    'Me!プロジェクトコード = DLookup("[プロジェクトコード]", "tbl_プロジェクト", "[P_ID]='" & Me!P_ID & "'")
  End If

End Sub

また、この対応を組み込んで戴けば、

> テーマを修正するとフォーム上では10001が入力される。
> tbl_テーマには反映されない。

の件も解消すると思います。
(但し、別のレコードに移動したり、メニューから「レコード(R)→レコードの
 保存(O)」を選択する等して、レコードが保存してからでないと、テーブル
 には反映されないので、確認の際はご注意下さい)


・・・以上です。

No.4です。

前回の回答は、「レコードの新規登録」のみを想定していました(汗)
大変失礼致しました。


【「メインフォーム」-「サブフォームの新規レコード」間の不一致について】
(=No.4の補足での、2個目の「◆」の件)

メインフォーム側の「レコード移動時」イベントで、『プロジェクトコード』の
更新後イベントと同様の処理を行えば、解消すると思います。
(先頭1行が「Private Sub Form_Current()」となる他は、前回のVBAと全く
 同じなので、今回は省略します)


【既存レコードでの『プロジェクトコー...続きを読む

Qサブフォームに対してGoToRecordするには?

フォームに対してRequeryすると先頭のレコードへ移動してしまうので
Requeryする前のレコードの番号を取得して
Requery後にそのレコード番号へ移動したいのですが

Sub test()
i = Forms("Form").Controls("SubForm").Form.CurrentRecord
Forms("Form").Controls("SubForm").Requery
DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i
End Sub

これをすると、実行時エラー2498
指定した式は、いずれかの引数とデータ型が対応していません。
になりますが、
どこがおかしいのでしょうか?

Aベストアンサー

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現状・例2>
  Forms("Form").Requery
 <現状・例3>
  Forms("Form").Controls("SubForm").Form.Requery
 <代替策>
  Forms("Form").Controls("SubForm").Requery
  ※「現状・例3」との違い(→途中の「.Form」の有無)に注意。


【詳細】
> 実行時エラー2498

このエラーの直接の原因は、GotoRecordメソッドの第2引数に指定している
「Forms("Form").Controls("Subform")」の部分です。

ここに指定するのはオブジェクト名になりますが、そのデータ型は文字列型です。
一方、「~.Controls(~)」の形で指定した場合、取得できるのは
 a)オブジェクトそのもの
 b)そのオブジェクトのデフォルトプロパティ
のどちらかです(→状況によって変化します)。
(例えばテキストボックスなら、TextBoxオブジェクトまたはValueプロパティの値)

サブフォームのデフォルトプロパティは調べていませんが(汗)、少なくとも文字列
型のプロパティではないため、「型が一致しない」とのエラーとなります。
サブフォームのコントロール名を取得する場合は、
  Forms("Form").Controls("SubForm").Name
というように、Nameプロパティを明示的に指定する必要があります。

ただ、「サブフォームのレコード移動」の場合、明示的に「Name」プロパティを
指定しても解決には至りません(汗)
これは、GotoRecordメソッドの第2引数には、直接開いているオブジェクトの
名前のみが有効なためで、サブフォームを直接的に指定することはできない、
ということです。
(注:Microsoftの資料を探したわけではなく、経験則から記述していますので、
 私の勘違いでしたらご容赦願います(汗))

サブフォームのレコード移動には、冒頭に記述したとおり、「フォーカスの移動」と
「一部の引数を省略したGotoRecord」を使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

なお、これも冒頭に書きましたが、サブフォームのRequeryの仕方には幾つか
方法がありますが、Requeryの対象を「コントロールとしてのサブフォーム」にすれば、
レコード移動が発生しませんので、GotoRecord自体が不要になります。
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmHowToRequeryAndReturn.html

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現...続きを読む

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング