• 締切済み

「更新に必要なキー列の情報が足りません。」エラーメッセージの回避策を教えてください。

Access、VB6、データグリッドを使用した処理を行った際に、 「更新に必要なキー列の情報が足りません。」というメッセージが表示 されてしまいました。 【使用環境】  ・WindowsXP SP1  ・VB6  ・ACCSESS2002 【発生手順】  (1)インプット用mdbのテーブルデータを   中間mdbのテーブルデータにコピー。  (2)中間mdbのテーブルデータをAccessクエリを使用し   画面出力用のデータを作成。  (3)クエリデータをデータグリッドに表示。   ※1.[コード1、文字列1、コード2、文字列2、コード3]     を表示しています。   ※2.コード1、コード2、コード3でプライマリキーとなっています。  (4)データグリッドで特定の文字列2のセルをクリック後、   他のセルにカーソルが移動しなくなる。   このときに、エラーメッセージが表示される。 【回避できる場合】  ・エラーメッセージが表示される元となるインプット用mdbの   テーブルデータの文字列2に対し、何か変更を加えたあと、   もとに戻す。   例)あいうえお→あいうえお1→あいうえお    のように変更を加えたあと、1を削除して最初    の状態に戻す。      この状態で処理を実行すると、【発生手順】(4)でエラーが出ていた   ものがカーソルも移動することができ、エラーが発生しなくなります。   ですが、ユーザが使用する際にこのような回避はできないため、回避策と   はいえないです。    なぜ、このようなことが起こるのかや、エラーメッセージを表示させないような 回避策があれば教えていただけないでしょうか。

みんなの回答

noname#182251
noname#182251
回答No.5

データグリッドを ReadOnly にするとどうなるでしょうか?あるいはレコードソースを

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.4

私じゃ力不足みたい こちらでも質問してみてはどうでしょう? http://www.moug.net/

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.3

joinを行った結果に対して更新はアクセスの場合はできない仕様になっていたと思います。(データグリッドの自動更新を使用しては) クエリを変更できない場合はレコード移動などのイベントを拾って手動で更新クエリを発行するなどの対策が必要です

oshobo
質問者

お礼

ご回答ありがとうございます。 データグリッドは表示のみで、データグリッドに入力したデータをアクセスのテーブルに更新するというようなことはしていません。 データグリッドに表示し、あるレコードのセルにカーソルを当てた後、そのレコードの上や下にカーソルを移動したときに、エラーメッセージが出てしまうのです。 単なる表示だけなのに、何が原因なのでしょう。

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.2

あとは中間テーブルへのクエリにjoinなどの連結を使用しているとか?

oshobo
質問者

お礼

何度も回答していただき、ありがとうございます。 joinの件ですが、inner joinなら行っていましたが、このクエリは開発者共通で使用しているため、修正することはできなさそうです。 そのほかの方法があるのでしょうか。

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.1

更新対象のテーブルに主キーが設定されていない可能性があります

oshobo
質問者

お礼

ご回答ありがとうございます。 クエリーデータをデータグリッドに表示しているのですが、クエリーの元となるテーブルには主キー設定をしているため、主キー設定はしていると思われます。 とすると、何が原因なのでしょう・・・。

関連するQ&A

  • access2003 「#エラー」を文字列にしたい

    テキスト型に入れた値を数値に変換し、「#エラー」を文字列にしたい テーブル1のデザインビューで ・フィールド1 テキスト型 ・主キーなし として データを 1 2 あ を投入します。 そして SELECT CLng(テーブル1!フィールド1) AS 数値型に変換 FROM テーブル1; クエリを作りました。 1と2は数値に変換されますが、文字列を入れた「あ」は 「#エラー」になります。  「#エラー」を「未設定」という文字列にしたいのですが どうすえばいいのでしょうか? よろしくお願いします。

  • Excel2003からAccess2007のデータの取り込みについて

    Excel2003からAccess2007で作成しているデータを取り込もうとしているのですが、うまくいきません。クエリのウィザードでテーブル名等は表示されるのですが、いざデータを取り込もうとすると、”ファイル名.mdbが見つかりません”というエラーが表示されます。そもそも拡張子がmdbというファイルはないのですが、回避する方法があるのでしょうか?

  • Excel「外部データの取り込み」でエラーになる

    環境:Excel2003、Access2000 Excelで「外部データの取り込み」をして、Accessのクエリを選択するとエラーが出ます。 1.[ツール]-[外部データの取り込み]-[新しいデータベースクエリ] 2.「MS Access Database」を選択 3.ローカル(Dドライブ)の[test01.mdb]を選択 4.クエリウィザードで、[条件検索]クエリを選択し、表示する列を2列ほど選び、次へ次へで進む 5.クエリウィザードの最後で「Microsoft Office Excelにデータを返す」を選択して完了ボタンを押す すると、 「入力テーブルまたはクエリ 'mdb.条件検索' が見つかりませんでした。 そのテーブルやクエリが存在していること、または名前が正しいことを確認してください」 というエラーが出ます。 また、4.で[1全検索-FROM]というクエリを選択すると、エラーの内容が 「 'mdb.' のかっこの使い方が正しくありません」になります。 なぜか 'mdb.' という文字が出てきます。 他のPCでは、同じデータがきちんと取り込めます。 どうしたら、うまくデータが取り込めるのでしょうか? Excelをインストールし直した方が良いのでしょうか? 皆様のお力を貸してください。 よろしくお願いいたします。

  • 削除クエリー”更新可能なクエリーでなければなりせん”のエラー

    アクセス97(W2000) 削除クエリーを実行すると、上記のようなエラーメッセージが出てきます。 行ったのは、下記のような内容です。 テーブルA:品種・商品コード テーブルB:購入月・商品コード・単価 この2つのデーブルを、商品コードで結合します。 そして、選択クエリーで、 ”購入月・品種・商品コード・単価” を表示させます。 その後、品種で”R”を設定し、抽出します。 ここまでは、抽出も出来、後は、テーブルBから”品種R”だけ、 つまり、選択した内容を削除したく、選択クエリーを削除クエリーに変更し、 実行したところ、上記のエラーが発生いたしました。 削除するテーブルを指定する、サブクエリーを使用する、 など、このままではいけない、というのはわかったのですが、 具体的な方法が、よくわかりません。 今の自分の実力では、かなりの勉強不足、と思いますが、 なにがしかのアドバイスを頂ければと、思っております。 お手数ですが、どなたか、よろしくお願い申し上げます。

  • Access2003 コントロールの(?)エラーメッセージ

    Access2003 コントロールの(?)エラーメッセージ excelからインポートしたデータでテーブルを作り、そこから、今後もデータを増やしていけるようにフォームを作ろうとしています。 まず、オートフォームでフォームを作りました。 データの中に「カテゴリー」を表示するフィールドがあり、そこはフォーム入力時にプルダウンで選んで登録できるように、コンボボックスを使ってカテゴリーフィールド(コントロール)を作りなおしたところ、「例えば数値型のフィールドに文字列を挿入しようとした」というようなエラーメッセージが出ます。 このフィールドは元からテキスト値が入っていたところで、プルダウンで選べるようにしたカテゴリーリストのテーブルの方もテキスト値で入力しています。 なので、このエラーメッセージが「例えば」と言っているのと全く同じエラー(数値型のフィールドにテキスト値を入れる)がでているわけではないとは思うのですが、他に何が悪のいかがわかりません。 どこをどうしたらいいのでしょうか?

  • コンパイルエラーの回避

    ある時点から、 EXCELを立ち上げるとき「非表示モジュール AutoExecNew内」と 閉じるとき「非表示モジュール DistMon内」に 「コンパイルエラーが発生しました」のメッセージが表示されるようになりました。 OFFICE全体をアンインストール&インストールしても回避されません。 今のところ実用上の差し支えはないのですが、エラー表示されなくするにはどうしたらよいのでしょうか

  • ACCESS更新クエリで型変換エラー

    ACCESSで更新クエリを作成して実行したら 「…個のフィールドで型変換エラーが発生したためレコードを更新できませんでした。」 となってしまいます。 「医薬品コード(-)」というフィールドに「医薬品コード」フィールドの文字から( )で囲まれた部分を省いた文字を更新するクエリを作りたいのです。 更新クエリのレコードの更新セルに入力しているのは Left([医薬品コード],InStr([医薬品コード],"(")-1) です。 更新するフィールドの設定は 値要求:いいえ、空文字列の許可:はい、インデックス:いいえ、Unicode圧縮:いいえ 型変換エラーの原因はなんでしょうか?

  • 「実行しましたが、ページでエラーが発生しました」とエラーメッセージが出ます。どなたか助けてください

    ホームページを作成しましたが、 表示は一応ちゃんとされていますが IE左下に、「実行しましたが、ページでエラーが発生しました」とメッセージが出ます どなたか教えていただけないでしょうか メッセージ詳細は以下です ライン:2 文字:1 エラー:構文エラーです コード:0 URL:省略 どなたか助けてください。

  • nvarchar型で指定して文字列幅を越えた文字列をクエリした場合のエラー

    nvarchar型で文字列幅を(255)と指定したテーブルに、指定幅を越えた文字列にてクエリを送った場合に、エラーがはきだされると思ったのですが、 なぜか吐き出されません。 超過していた文字列が黙って切り捨てられた文字列で、insertが完了します。 エラーをだしたいのですが、そもそもエラーをなくすような設定があるのでしょうか?

  • PSpiceのエラー回避策について

    PSpiceの初心者です。 1石トランジスタ回路のシミュレーションを試みたところ、 回路上のエラーは無いようですが、以下のような、 エラーメッセージが表示され、中断しました。 エラーの回避策を、知りたいのですが。 *Analysis directives: ----------------------------------------------------$ ERROR -- Unable to open file .DC LIN V_V1 0 10 0.1 .PROBE V(*) I(*) W(*) D(*) NOISE(*) .INC ".\pp-01-SCHEMATIC1.net"

専門家に質問してみよう