初心者なのですが、SQLで作成したDBテーブルをTableコンポーネントとDataSourceコンポーネントを用いてDBGridに出力したのですが、実行中にその表の中身を直接書き換えようとすると「Project1.exeがEDBEngineErrorクラスの例外を生成しました。'複数のレコードが見つかりましたが,必要なのは1つだけです.'」というエラーが出てしまいました。
何か設定の問題なのでしょうか?ご教授よろしくお願いします。
上の追記です。環境はDelphi4です。
作成したテーブルのインデックスはどのようになっていますか?また、その中のどの項目を変えようとしているのでしょうか?
エラーから見ると、キーの重複があり、どのレコードか判別できないようです.
憶測だが、そのエラーメッセージは正確には
× 複数のレコードが見つかりましたが,必要なのは1つだけです
○ 複数のレコードが見つかりましたが、必要なのは1つです
ではないか?
http://www.google.co.jp/
でキーワード「複数のレコードが見つかりましたが 必要なのは」で検索
しましょう。 Tipsがヒットするので、それが参考になるかもしれません。
皆さんありがとうございます
HOtaさん、8行×27列のテーブルでインデックスは使っていません。
実行中に書き換えというのは、DBGridの書き換えたいセルをマウスでクリックして、キーボード入力する、ということです。
beagleさん、そちらのサイトも見させて頂きましたが、回答は既に削除されているのか表示されませんでした。
google検索で Borland Answers - Delphi Tips がヒット・・・まではOK
ですね?
では「キャッシュ」をクリックして下さい。
インデックスを使っていないとすれば、
1)そもそも「SQLで作成した」時点で既に、重複レコードが存在していた。
2)ある項目を変更すると、他のレコードと全く同じ内容になる。
このどちらかの状況じゃないかなあ。
>SQLで作成したDBテーブルをTableコンポーネントと
>DataSourceコンポーネントを用いてDBGridに出力したのですが、
QueryコンポーネントのSQLで作成したDBテーブルを
DataSourceコンポーネントを用いてDBGridに出力したのですが、
とは違うのですか。
>8行×27列のテーブルでインデックスは使っていません。
なら、インデックスがないので、更新する相手が判らないのでしょう。
重複レコードが存在しないインデックスを付けましょう。
ツイート | ![]() |