はじめての親子ハイキングに挑戦!! >>

こんばんは。いつもこちらにはお世話になってます。

会社の業務でアクセスでデータを管理してます。
前任者が作ったフォームに、新規データを入力・・といういつもの業務をこなそうとしたら・・

フォームに新しいレコードが追加できなくなりました(今日突然です)
特に原因が分からないのでヘルプで見て
フォームの「レコードセット」のところを
”ダイナセット”→ダイナセット(矛盾を許す)に変えて、何とか新規レコードは追加できるようになったのです。

しかし、いざ新規のレコードを追加する段になって、
今度は 本来、社員NOを入れれば自動的に部署や、性別などが表示されていたのに、一切されなくなりました(今回は仕方ないのですべて入力しましたが)

ちなみに簡単に元になっているDBの説明をしますと

(1)社員基本情報テーブル(主なものだけ抜粋します)
フィールド 従業員NO
      部署
      性別
   
(2)社員出張情報テーブル
フィールド 従業員NO
      出張日
      出張先
      
この(1)と(2)のテーブルがクエリで結ばれて仮想テーブルができてます。
クエリのデザインを開くと、(1)(2)の従業員NO同士が
一本の線で結合されており(一対多とかではなく)
クエリの出力フィールドでは
(2)の従業員NO,(1)の部署、性別、(2)の出張日、出張先
が指定されてました。

フォームはこのクエリを元に作成されてるのですが、
従業員NOを入力すると自動的に部署と性別は表示され、出張日と出張先を入力するという業務でした。

特に何かをしたわけではない(はず)なので原因が分からないまま、とりあえず部署と性別を手入力でしのぎました。

何か解決策があれば教えてください。
(ちなみに質問の書き方で分かるかと思われますが、初級者レベルです)

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

A 回答 (2件)

クエリが追加更新不可になる原因はいろいろあります


詳しくはヘルプのクエリのトラブルシューティングで
「クエリからデータを更新できない」を見てください

>”ダイナセット”→ダイナセット(矛盾を許す)に変えて
これはこのようなときに使うものではありません
折角Accessがテーブルがおかしいよと教えてくれているのですから
そっちの方を正さないと駄目ですね

テーブルに主キーは設けられていますか?
無いようなら設定してください(多分できない)

原因の予想としては社員基本情報テーブルに矛盾したデータが入力された
というものですね。(多分レコードが重複)
    • good
    • 0
この回答へのお礼

ありがとうございました。おっしゃるとおりでした!
社員基本情報テーブルの主キーが設定されておらず、設定しようとしたらエラー(社員Noが重複していたため)で、データを修正して、主キーを設定したら→直りました!!!

お礼日時:2006/10/11 21:03

クエリは、テーブル<社員出張情報>のみで作成し、<社員基本情報>の各列は参照による列とする。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
こういう改造をすれば、100%動作が約束されます。
一方が他方を参照する関係ですから、<社員出張情報>と<社員基本情報>とでの矛盾も発生する余地がなくなります。
この改善は、初心者の方でも2、30分で可能と思います。

<社員基本情報:主キー=従業員No>
従業員No 氏名    性別  部署
1    鈴木 一郎  M   A
2    中村 太郎  M   B

<社員出張情報:主キー=従業員No+出張日>
従業員No 出張日   出張先
1 2006/10/10  あ
1    2006/10/11  い
1    2006/10/13  う

<社員出張情報 クエリ>
従業員No 出張日   出張先  社員_氏名  社員_性別 社員_部署
1    2006/10/10  あ   鈴木 一郎  M     A
1    2006/10/11  い   鈴木 一郎  M     A
1    2006/10/13  う   鈴木 一郎  M     A

<社員出張情報 クエリ:SQL ビュー>
SELECT 社員出張情報.従業員No, 社員出張情報.出張日, 社員出張情報.出張先, DBLookup("SELECT 氏名 FROM 社員基本情報 WHERE 従業員NO=" & [従業員No]) AS 社員_氏名, DBLookup("SELECT 性別 FROM 社員基本情報 WHERE 従業員NO=" & [従業員No]) AS 社員_性別, DBLookup("SELECT 部署 FROM 社員基本情報 WHERE 従業員NO=" & [従業員No]) AS 社員_部署
FROM 社員出張情報;

<社員出張情報 クエリ>では、社員_氏名、社員_性別、社員_部署の全てを参照によって生成しています。
クエリ自身が参照しているテーブルは、<社員出張情報>のみです。
SQLビューを真似して編集すれば、多分、成功するでしょう。
当然に、DBLOOKUP関数を標準モジュールに登録してから作業します。

フォームでは、社員_氏名、社員_性別、社員_部署を配置することになります。

社員_氏名.使用可能=いいえ
社員_氏名.編集ロック=はい

にします。
これで、社員_氏名、社員_性別、社員_部署は自動参照し、入力もスキップされます。

※AccessではDLookup関数をサポートしていますが実行速度に問題があります。そこで、DBLookup関数を使っています。
※DLookup関数でも事足りるのは当然のことです。

? DBLOOKUP("SELECT 氏名 FROM 社員基本情報 WHERE 従業員No=1")
鈴木 一郎
? DBLOOKUP("SELECT * FROM 社員基本情報 WHERE 従業員No=1")
1;鈴木 一郎;M;A

Microsoft DAO X.XX Object Library を参照設定に加える必要があります。

Public Function DBLookup(ByVal strQuerySQL As String) As String
On Error GoTo Err_DBLookup
  Dim I   As Integer
  Dim N   As Integer
  Dim Datas As String
  Dim dbs  As DAO.Database
  Dim rst  As DAO.Recordset
  
  Set dbs = CurrentDb
  Set rst = dbs.OpenRecordset(strQuerySQL)
  With rst
    Do Until .EOF
      N = .Fields.Count - 1
      For I = 0 To N
        Datas = Datas & .Fields(I) & IIf(I = N, "", ";")
      Next I
      .MoveNext
    Loop
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  dbs.Close
  DBLookup = Datas
  Exit Function
Err_DBLookup:
  MsgBox Err.Description
  Resume Exit_DBLookup
End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。
途中までは文章が理解できたのですが、
DAO?のあたりから、理解ができなくなってしまいました・・
とりあえず、書いていただいたソースをコピーして、分からないところをヘルプで見ながら理解していきます。

お礼日時:2006/10/11 21:20

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

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

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

関連するカテゴリからQ&Aを探す

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

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

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

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で別テーブルの値をフォームに表示したい

初めての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アクセス レコードセットを更新できません

アクセスは初心者ですが、会社で少しずつ勉強しながら、会社のアクセスのシステムを管理しています。
先日から、突然既存のアクセスのシステムで、フォームを入力しテーブルに追加しようとすると「レコードセットを更新できません」とメッセージが出てきて、データを更新できなくなってしまっています。
特にアクセスを変更したりしていないのですが、突然なってしまいました。
今まで問題なく動いていたので、なぜそういったメッセージが出るのか分からず、困っています。
どういった対策をしたらよいでしょうか。
ご助言をお願いいたします。

Aベストアンサー

フォームのソースがクエリなんじゃないですか
フォームの下部のレコード移動ボタン「*」が単色表示になっていませんか
その場合はクエリが追加・更新不可になっています

クエリが追加・更新不可になる原因はいろいろありますが
以前は出来ていたと言うことですから
変なデータが入力されテーブルの結合に矛盾が生じてしまったのでしょう

テーブルには主キーは設けてありますか?
リレーションシップ、参照整合性は設定してありますか?
してなければこれらをきちんと設定してください
たぶんそのどこかで出来ないとAccessに怒られるでしょう
そのテーブルに原因がありますから注意深くデータを点検してください

QACCESSのフォームからデータの追加ができない

現在Accessの基本を勉強中です。
テーブルを元にフォームを作成し、フォームから新しく名前や会社名などを直接入力し、追加できるようにしたいです。
ところがフォームから入力を行うと、内容が追加されず一番最初に登録した人の名前が書き換わるだけになります。
どのように新しくデータを追加できるようになるのでしょうか?
まったくの初心者なので、どの機能を使えばよいか戸惑ってます。
どうかよいご意見をお願い致しますm(__)m

Aベストアンサー

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォーム自体を入力専用にする
 (フォームのプロパティシートの『データ』タブで『データ入力用』を「はい」に設定:
  既存のレコードは表示されなくなります)
 ・レコード移動用のコマンドボタンを設置する
 (フォームをデザインビューで開き、ツールボックス(矢印や、新規のテキストボックス等を
  設置する際に使用するツールバー)の左から二番目にあるウィザードボタンが押された
  状態にして、新規コマンドボタンを設置すると、簡単に作れると思います)
といった方法があります。

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォー...続きを読む

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

Qアクセスのフォームのビューが表示されないのですが、

Accessでフォームを作っているのですが、クエリを元にウイザードで作成。デザインビューではちゃんと文字が出ているのに、データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけなんですが、何が原因なのでしょうか? 同じ作り方で出来る物もあるのですが、アクセスは初心者です。本を見てもわからないのですが、教えて下さい。よろしくお願い致します。
参考になるURLがあれば、それも教えて頂きたいです。

Aベストアンサー

> データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけ

表示されるレコードがなく、追加もできない(=新規レコードの枠が表示されない)状態
の場合、フォームビューの詳細領域にあるコントロールは、全て表示されなくなります。

これはAccessがそういう仕様になっているようなのでどうしようもないのですが、
詳細領域ではなくフォーム ヘッダ/フッタに設置したコントロールであれば表示は
されるので、表示レコードがない場合にも表示が必要なコントロール(フォームを閉じたり
表示を切り替えるコマンドボタンや、フォームの抽出条件を指定するテキストボックス等)
はフッタ/ヘッダに移動する、といった回避方法があります。

フォーム ヘッダ/フッタを表示するようにするには、フォームをデザインビューで開き、
メニューで「表示(V)→フォーム ヘッダ/フッタ(H)」を選択します。
ヘッダのみ、またはフッタのみ必要な場合は、不要な方の下端にマウスポインタを
合わせて、水平な線と上下矢印を組み合わせた形になったところで、マウスをクリック&
ドラッグして下さい。


※本来表示させるレコードがない状態で、詳細領域のコントロールを強引に表示させる
  には、フォームのプロパティシートの『データ』タブで、『レコードセット』の設定を
  「ダイナセット (矛盾を許す)」にするという手もあります。
  但し、変な形でレコード編集がされてしまう危険性が生じますので、お勧めはできません。


参考までに、以前の回答へのリンクも載せておきます:
http://oshiete1.goo.ne.jp/qa3371589.html
http://oshiete1.goo.ne.jp/qa3028994.html

> データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけ

表示されるレコードがなく、追加もできない(=新規レコードの枠が表示されない)状態
の場合、フォームビューの詳細領域にあるコントロールは、全て表示されなくなります。

これはAccessがそういう仕様になっているようなのでどうしようもないのですが、
詳細領域ではなくフォーム ヘッダ/フッタに設置したコントロールであれば表示は
されるので、表示レコードがない場合にも表示が必要なコントロール(フォームを閉じたり
...続きを読む

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

宜しくお願いします。

仕様環境:WinVISTA Access2007

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

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

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

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

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


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

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

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

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

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

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

宜しくお願いします。

仕様環境:WinVISTA Access2007

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

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

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

Aベストアンサー

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

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

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

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

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

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

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

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

【1...続きを読む

Qテキストボックスにクエリ結果を表示させたい

フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。

クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。

テーブルは
フィールド1|フィールド2
  A   |  10
  B   |  20
  C   |  30
  D   |  40
のような簡単なものです。

テキストボックスBのコントロールソースに
「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。

どのようにやればよいのでしょうか?

Aベストアンサー

クエリは必要ありません。

フォームのレコードソースに無いデータを表示させる
場合には DLookUp を使います。

テキストボックスBのコントロールソースに
=DLookUp("フィールド2","テーブル名","フィールド1='" & [テキストボックスA]) & "'"

上記は「フィールド1」が文字列型の場合です。

数値型の場合は次のようになります。
=DLookUp("フィールド2","テーブル名","フィールド1=" & [テキストボックスA])

DLookUp 関数は コントロールソースに限らず
VBA でも使用し、Access では、非常に使用頻度の高いものです。

ヘルプで調べて、ぜひマスターしてください。

もし Access でなかったら、このレスは無視して下さい。


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

人気Q&Aランキング