クエリ データシート ビューでデータを編集して、基になるテーブルのデータを変更できない場合があります。 この記事は、どのような場合にクエリ データを編集できるか、どのような場合にクエリ データを編集できないか、およびクエリの設計を変更して基になるデータを編集できるようにする方法を理解するのに役立ちます。
この記事の内容
概要
データシート ビューでクエリを開くときに、データを編集したい場合があります。 エラーに気付いたり、古い情報が表示されたりします。 クエリの作成方法によっては、クエリ データシートで直接データを編集できます。
クエリ データシートのデータを編集しようとしても何も起こらない場合、または Windows でサウンドが再生されるが編集が実行されない場合は、編集を実行できません。 クロス集計クエリなど、クエリ自体を編集できない場合があります。 また、編集しようとしているフィールドのみを編集できない場合もあります (フィールドが平均などの集計関数に基づいている場合など)。 いずれの場合も、編集を有効にするために何らかの操作を実行できる場合があります。
クエリ データシート ビューでのデータの編集に加えて、更新クエリを使用してテーブル内のデータを更新することもできます。 この記事では、更新クエリについては説明しません。
更新クエリの詳細については、「更新クエリを作成して実行する」を参照してください。
通常、クエリ データシート ビューでデータを編集する場合は、クエリの基になるテーブルに変更を保存する必要があります。 これらのテーブル内のデータを変更したくないが、編集を行った後もそのデータを編集して保存したい場合は、テーブル作成クエリを使用して、データを編集できる新しいテーブルを最初に作成します。 テーブル作成クエリを使用して、編集が許可されていないクエリの結果を新しいテーブルとして保存し、その新しいテーブルのデータを編集することもできます。 この記事では、メイク テーブル クエリを作成して実行する方法については説明しません。
メイク テーブル クエリの詳細については、「 メイク テーブル クエリを作成する」の記事を参照してください。
クエリのデータを編集できるのはどのような場合ですか?
クエリが 1 つのテーブルのみに基づいている場合、または互いに 1 対 1 のリレーションシップを持つ 2 つのテーブルに基づいている場合は、クエリ内のデータをいつでも編集できます。
注
クエリ内のデータを編集できる場合でも、一部のフィールドは編集できない場合があります。 そのようなケースを次のセクションに示します。
クエリのデータを編集できないのはどのような場合ですか?
次の場合、クエリのデータを編集することはできません。
クエリはクロス集計クエリです。
クエリが SQL 固有のクエリである。
編集しようとしているフィールドは集計フィールドです。 この場合、他のフィールドを編集できる場合があります。
クエリは 3 つ以上のテーブルに基づいており、多対一対多のリレーションシップがあります。
注
この場合はクエリ データシートを編集できませんが、フォームの RecordsetType プロパティが Dynaset (Inconsistent Updates) に設定されている場合、フォーム内のデータを編集できます。
クエリに GROUP BY 句が含まれています。
データを編集できるようにクエリを変更する操作方法
次の表は、クエリを編集できない場合に、クエリ データシートを編集できるようにするメソッドと組み合わせて示したものです。
| 次の場合、クエリ データシートの値を編集することはできません。 | クエリ データシートを編集できるようにするには、次の手順を実行します。 |
|---|---|
| クエリの "一意の値" プロパティが [はい] に設定されている。 | クエリの "一意の値 " プロパティを [いいえ] に設定します。 このプロパティの設定方法については、次の「 一意の値プロパティをいいえに設定する」セクションを参照してください。 |
| このクエリには、一意のインデックスを持たないリンクされた ODBC データベース テーブルや、主キーを持たない Paradox テーブルが含まれています。 | リンク データベースのベンダーによって提供されるメソッドを使用して、主キーまたは一意インデックスをリンク テーブルに追加します。 |
| 基になるテーブルに対する [データの更新] アクセス許可がありません。 | Update Data のアクセス許可を割り当てます。 |
| クエリに複数のテーブルまたはクエリが含まれており、テーブルまたはクエリがデザイン ビューで結合線で結合されていない。 | 適切な結合を作成します。 結合を作成する方法については、「 結合を作成する」セクションを参照してください。 |
| データベースが読み取り専用で開かれているか、読み取り専用ドライブにある。 | データベースを閉じて、 読み取り専用で開く を選択せずに再度開きます。データベースが読み取り専用ドライブにある場合は、ドライブから読み取り専用属性を削除するか、データベースを読み取り専用ではないドライブに移動します。 |
| 更新しようとしているレコードのフィールドが削除されているか、別のユーザーによってロックされています。 | レコードのロックが解除されるまで待ちます。 ロックされたレコードは、レコードのロックが解除されるとすぐに更新できます。 他のユーザーがレコードをロックした操作を完了するまで待ちます。 |
| クエリは一対多リレーションシップを持つテーブルに基づいており、"多" 側の結合フィールドは出力フィールドではありません。 この場合、"一" 側の結合フィールドのデータは編集できません。 | リレーションシップの "多" 側からクエリ出力フィールドへの結合フィールドを追加します。 結合フィールドを追加する方法については、「 多」側の結合フィールドをクエリ出力フィールドに追加するセクションを参照してください。 |
| (データを編集した後の) "多" 側の結合フィールドは "一" 側に配置されます。 | SHIFT+F9 キーを押して変更をコミットし、クエリを更新します。 |
| 一対多リレーションシップの "一" 側にはテーブルの空白フィールドがあり、その結合は右外部結合です。 | "one" 側のそのフィールドに値があることを確認します。 "多" 側の結合フィールドを編集できるのは、"一" 側のそのフィールドに値がある場合のみです。 |
| リンクされた ODBC データベース テーブルを使用していますが、リンク テーブルの固有インデックスのすべてのフィールドがクエリ出力に含まれていません。 | ODBC テーブルの固有インデックスからすべてのフィールドをクエリの出力フィールドに追加します。 フィールドを追加する方法については、「 リンクされた ODBC テーブルから一意のインデックス フィールドを追加する」セクションを参照してください。 |
"一意の値" プロパティを [いいえ] に設定します
- クエリをデザイン ビューで開きます。
- プロパティ シートが開いていない場合は、F4 キーを押して開きます。 クエリ デザイン グリッドで 1 回クリックすると、プロパティ シートにフィールド プロパティではなくクエリ プロパティが表示されるようになります。
- プロパティ シートで、[ 一意の値 ] プロパティ ボックスを見つけます。 その横のボックスをクリックし、そのボックスの矢印をクリックして、[ いいえ] をクリックします。
結合を作成する
- クエリをデザイン ビューで開きます。
- 別のテーブルまたはクエリに結合する各テーブルまたはクエリについて、そのテーブルまたはクエリの結合フィールドを、結合を作成するテーブルまたはクエリ内の対応するフィールドにドラッグします。
結合の作成の詳細については、記事「 テーブルとクエリを結合する」を参照してください。
"多" 側の結合フィールドをクエリの出力フィールドに追加する
- クエリをデザイン ビューで開きます。
- クエリ デザイナーで、関連する一対多リレーションシップに対応する結合を見つけます。
- 一対多リレーションシップの "多" 側の結合フィールドをダブルクリックします。 結合フィールドがフィールド グリッドに表示され、これが出力フィールドになっていることが示されます。
リンクされた ODBC テーブルから一意のインデックス フィールドを追加する
- クエリをデザイン ビューで開きます。
- クエリ デザイナーで、リンクされた ODBC テーブルを見つけます。
- 一意のインデックス フィールドには、フィールド名の横にキー記号が表示されます。 フィールド グリッドにまだ表示されていない各フィールドをダブルクリックします。 各フィールドがフィールド グリッドに表示され、これが出力フィールドであることが示されます。