アクセスでまたつまずいてしまいました。ちょっと教えてください。
複数のテーブルから選択クエリを作り、それを基にオートフォームでフォームを作ったのですが、フォームでデータの入力が出来ません。クエリでもデータの入力が出来ません。
「このレコードセットは更新できません」と下のほうに出ます。
フォームのプロパティのデータの更新の許可と、データ入力用のところは“はい”になっています。
私では原因がわかりません。わかりにくい質問でしょうが、どなたかご指導お願いします。

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

A 回答 (3件)

No2さんと似たような回答になりますが


SELECTしたデータが
主キーで結合でき
1:1、1:nやn:1の場合は、お互いの主キーをSELECTに加えてあれば
更新可能だと思います。
しかし n:nの場合は、更新できません。
具体的に表現すると

伝票テーブル
 伝票NO      主キー
 伝票日付      
 得意先ID

伝票明細Aテーブル
 伝票NO      主キー
 明細番号      主キー
 伝票日付      
 商品ID
 金額

は、 伝票テーブル.伝票NO → 伝票明細Aテーブル.伝票NOで結合すれば
更新OK   

しかし

伝票明細Aテーブル
 伝票NO      主キー
 明細番号      主キー
 伝票日付      
 商品ID
 金額

伝票明細Bテーブル
 伝票NO      主キー
 伝票日付      
 科目ID      主キー
 補助科目ID
 
は、 伝票明細Bテーブル.伝票NO → 伝票明細Aテーブル.伝票NOで結合しても
n:nになるので更新不可

また

伝票明細Aテーブル
 伝票NO      主キー
 明細番号      主キー
 伝票日付      
 商品ID
 金額

商品マスタ
 商品ID      主キー
 商品名

を伝票明細Aテーブル.商品ID → 商品マスタ.商品IDと結合しても主キー同士で結合できないので更新不可です。

複数のテーブルを使うときは最後の形態がよく使われます。
伝票の中にマスタデータのキー情報を持ち名称をマスタから取得する場合など

この条件に当てはまりませんか?
    • good
    • 0
この回答へのお礼

お世話になります。結局1つ別の選択クエリを作り、テーブルも違うのを新しく作り、この2つから選択クエリを作ったらなぜか出来ました。よく解らないままですが、アドバイスはよく解りました。今後の参考にします。
ありがとうございました。またお願いします。

お礼日時:2002/03/04 11:00

簡単に説明すると、参照される側のテーブルへのリレーションが、主キーである必要があります。



つまりこういうことです。
"売上テーブル"と"商品マスタ"があったとして、
"売上テーブル"の商品コードと"商品マスタ"の商品コードを結合したいとします。
その場合、参照される側の"商品マスタ"は、"商品コード"が主キーでないと更新できません。

主キーで結合できない場合は、フォーム上のイベントを使うなどして、値を取得する工夫が必要です。
    • good
    • 0
この回答へのお礼

たびたびお世話になります。よく解りませんが解決できました。
ありがとうございました。

お礼日時:2002/03/04 10:50

クエリーの内容によって、更新出来る項目とできない項目があります。



Accessのヘルプの質問のことろに
「クエリのデータを更新できない」
を入れて調べてみると詳細が書いてあります。
    • good
    • 0
この回答へのお礼

たびたびお世話になり、ありがとうございます。参考になりました。

お礼日時:2002/03/04 10:43

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

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

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

QACCESSでデーフル作成入力フォームで入力しながら、クエリのデータを参照したい

ACCESSで売上明細テーブルを作成し、入力用のフォームを作成しました。他に顧客マスタテーブルがあります。売上明細には顧客CDフィールドがありますが、顧客名等はマスターに存在するため設けてません。しかし売上明細入力時に顧客CDを入力した時点で顧客名の確認がしたいのです。そこで入力フォームの顧客CDの隣に非連結でテキストボックスを作り、そこに顧客名を表示したいのです。売上明細には顧客名のフィールドは追加したくありません。ただ参照したいだけです。顧客マスタと売上明細で顧客CDをキーにクエリを作成し、明細に対応する顧客情報は顧客情報検索というクエリで作成済みです。入力フォーム画面の非連結のフィールドのプロパティのコントロールソースに
=DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD])
と表記しましたがエラーになります。
最初はコントロールソースに直接顧客情報検索クエリの顧客名フィールドを表記し、フォーカス取得時にクエリを開くマクロを実行していました。でもやはり表示されませんでした。
顧客名の設定をどのように設定すればいいのですか?
コントロールソースでの設定だけでは無理なのでしょうか?
よろしくお願いします。

ACCESSで売上明細テーブルを作成し、入力用のフォームを作成しました。他に顧客マスタテーブルがあります。売上明細には顧客CDフィールドがありますが、顧客名等はマスターに存在するため設けてません。しかし売上明細入力時に顧客CDを入力した時点で顧客名の確認がしたいのです。そこで入力フォームの顧客CDの隣に非連結でテキストボックスを作り、そこに顧客名を表示したいのです。売上明細には顧客名のフィールドは追加したくありません。ただ参照したいだけです。顧客マスタと売上明細で顧客CDをキーにクエリ...続きを読む

Aベストアンサー

ご質問の件では、アンダーバー「_」は無用です。
(VBAの編集画面上であれば、一群の文字列の改行表示のために使用することもありますが、
 コントロールソースへの直接記述には使用できません)
従って、以下のようにすれば、とりあえず今現在起きているエラーは解消するかと思います:

現在:
=DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD])

修正後:
=DLookup("[顧客名]","顧客情報検索","[顧客CD] =" & Forms![売上明細入力Form]![顧客CD])
または:
=DLookup("[顧客名]","顧客情報検索","[顧客CD] =" & [顧客CD])

*「顧客情報検索」がフォームのレコードソースで、もしも「顧客マスタ」に相当するテーブルがあるの
 でしたら、ここの式にはそちらを使用した方がよいはずです。

なお、もしも「顧客CD」のデータが数値型ではなくテキスト型などの場合は、
=DLookup("[顧客名]","顧客情報検索","[顧客CD] ='" & [顧客CD] & "'")
のように、Where条件式の右辺がシングルクォーテーションで括られるようにする必要があります。


※演算コントロール(=コントロールソースが関数のコントロール)で誤作動というのは、私には経験が
  ありません。
  但し、VBAでは、「Me」で、コードを記述しているフォームそのものを参照することができますが、
  コントロールソースなど、プロパティシートに直接記述する関数では「Me」は使用できない、
  といった制限はあります。


  ------------------------------------

なお、演算コントロールでは、検索や並べ替えができないといった制約があります。
同じDLookupを使うのであれば、フォームではなくクエリで演算フィールドを作成してコントロール
ソースとして使用した方が、検索・並べ替えが行えるので使い勝手はよいと思います。
(「売上明細には顧客名のフィールドは追加したくありません」とのことですが、テーブルではなく
 クエリのみへのフィールド追加なので、問題ないのではないかと)

演算フィールドは、クエリのデザインビューの「フィールド:」欄に、
顧客: DLookup("[顧客名]","顧客マスタ","[顧客CD]=[顧客マスタ]![顧客CD]")
といったように入力します(「テーブル:」欄は空白のまま)。

*上記の式は、「顧客情報検索」がクエリで、「顧客CD」フィールドが「顧客マスタ」テーブルの
 「顧客CD」フィールドに拠っている、という前提で作成しました。

ご質問の件では、アンダーバー「_」は無用です。
(VBAの編集画面上であれば、一群の文字列の改行表示のために使用することもありますが、
 コントロールソースへの直接記述には使用できません)
従って、以下のようにすれば、とりあえず今現在起きているエラーは解消するかと思います:

現在:
=DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD])

修正後:
=DLookup("[顧客名]","顧客情報検索","[顧客CD] =" & Forms![売上明細入力Form]![顧客CD])
または:
=...続きを読む

QAC2000でフォームから入力したデータをサブフォームに表示

ID 商品名 単位 単価で商品マスタフォームを作っています。このフォーム内にサブフォームを作っておいて
データが入力するたびにサブフォームへ表示させたいのですが、このときの条件としてID(オートナンバー)を降順(最新のデータが一番上になる)・データシート形式にしたいと思います。
T_商品(テーブル名)
Q_商品(IDを降順としたクエリ)
MF_商品(各入力テキストボックスがあるフォーム)
SF_商品(MF_商品に貼り付けるサブフォーム)
降順にすると一番若いIDのデータだけがサブフォームに
表示されるのです。
requeryは必要なのでしょうか?
よろしくお願い致します。

Aベストアンサー

MF_商品(各入力テキストボックスがあるフォーム)
SF_商品(MF_商品に貼り付けるサブフォーム)
のRecordSourceは両方ともQ_商品ですか?
そうだとすると、
MF_商品で入力するたびに、Q_商品のRequeryが必要です。さらにSF_商品をRefleshする必要があります。
ただ、MF_商品での変更が反映されるのは、レコード移動後になりますので、テキストボックスに入力したデータを反映させるには、Me.Refreshなどを実行して入力値をテーブルに保存しなければなりませんし、それらの処理を実行するとレコードを移動してしまうので、クローンやブックマークを使って元に戻る処理を加えなければならなくなります。結構面倒です。

Qアクセスのフォームでデータ元をテーブルからクエリにかえたい

上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。
アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。
そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作ります。このクエリを元にして、同じフォームでデータ入力したいのです。入力項目は全く同じです。「福岡県」をもっているレコードだけが全く同じフォームで表示されるようにしたいのです。
もとのテーブル名を「全データ」とし、クエリを「福岡県抽出クエリ」と呼ぶとすると、どこかで「全データ」を「福岡県抽出クエリ」に書き換えればすべてのテキストボックスのデータ元が入れ替わってくれると思うのですが、それでいいのでしょうか。その場合、どうやったらいいのでしょう。
なぜ一からファームを作り直さないかというと、テキストボックスの大きさや配置を決めるのに膨大な労力を費やしていて、全部をやり直したくないからです。
どうかお願いします。ご指導ください。

上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。
アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。
そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作...続きを読む

Aベストアンサー

フォームをデザインビューで開き、
プロパティの[データ]タブの[レコードソース]にカーソルを置き、
右の▼をクリックして「福岡県抽出クエリ」を選択してください。

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

宜しくお願いします。

仕様環境:WinVISTA Access2007

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

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

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

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

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


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

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

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

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

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

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

宜しくお願いします。

仕様環境:WinVISTA Access2007

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

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

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

Aベストアンサー

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

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

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

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

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

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

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

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

【1...続きを読む

Qクエリの抽出条件をフォームで入力したものにしたい

こんにちは。すみませんうまくいかないのでどなたか助言していただきたくお願いいたします。
クエリの抽出条件をフォームで入力した値にしたいと思っており、クエリの抽出条件欄に

>=[集計フォーム]![開始日入力]

と入力しました。「フォームの名前」!「テキスト名」です。
そしてフォームに値を入力してクエリ実行ボタンをクリックするとパラメータクエリのようになってしまいます。

フォーム内で何か設定をしないといけないのでしょうか?
すみませんがよろしくお願いいたします。

Aベストアンサー

こんにちは。わたくしも素人なので..回答文を書こうか迷いまいたが...お急ぎのようなので...

(1)[forms]を追加してはどうでしょうか?
>=[forms]![集計フォーム]![開始日入力]

(2)フォームの[開始日入力] のデータ型と検索するテーブルのフィールドのデータ型は日付型になっているでしょうか?

以上 ”間違っていたら”または”関係なかったら”すみません。


人気Q&Aランキング

おすすめ情報