deiphiでDBGridに出力したデータを変更するには?


たろ  2007-04-26 02:39:49  No: 25931  IP: [192.*.*.*]

初心者なのですが、SQLで作成したDBテーブルをTableコンポーネントとDataSourceコンポーネントを用いてDBGridに出力したのですが、実行中にその表の中身を直接書き換えようとすると「Project1.exeがEDBEngineErrorクラスの例外を生成しました。'複数のレコードが見つかりましたが,必要なのは1つだけです.'」というエラーが出てしまいました。
何か設定の問題なのでしょうか?ご教授よろしくお願いします。

編集    削除
たろ  2007-04-26 02:46:52  No: 25932  IP: [192.*.*.*]

上の追記です。環境はDelphi4です。

編集    削除
HOta  2007-04-27 00:44:23  No: 25933  IP: [192.*.*.*]

作成したテーブルのインデックスはどのようになっていますか?また、その中のどの項目を変えようとしているのでしょうか?
エラーから見ると、キーの重複があり、どのレコードか判別できないようです.

編集    削除
beagle  2007-04-27 01:06:04  No: 25934  IP: [192.*.*.*]

憶測だが、そのエラーメッセージは正確には
×  複数のレコードが見つかりましたが,必要なのは1つだけです
○  複数のレコードが見つかりましたが、必要なのは1つです
ではないか?

http://www.google.co.jp/
でキーワード「複数のレコードが見つかりましたが    必要なのは」で検索
しましょう。  Tipsがヒットするので、それが参考になるかもしれません。

編集    削除
たろ  2007-04-27 19:57:13  No: 25935  IP: [192.*.*.*]

皆さんありがとうございます

HOtaさん、8行×27列のテーブルでインデックスは使っていません。

実行中に書き換えというのは、DBGridの書き換えたいセルをマウスでクリックして、キーボード入力する、ということです。

beagleさん、そちらのサイトも見させて頂きましたが、回答は既に削除されているのか表示されませんでした。

編集    削除
beagle  2007-04-27 22:30:41  No: 25936  IP: [192.*.*.*]

google検索で  Borland Answers - Delphi Tips がヒット・・・まではOK
ですね?
では「キャッシュ」をクリックして下さい。

インデックスを使っていないとすれば、
1)そもそも「SQLで作成した」時点で既に、重複レコードが存在していた。
2)ある項目を変更すると、他のレコードと全く同じ内容になる。
このどちらかの状況じゃないかなあ。

編集    削除
TS  2007-04-28 05:07:02  No: 25937  IP: [192.*.*.*]

>SQLで作成したDBテーブルをTableコンポーネントと
>DataSourceコンポーネントを用いてDBGridに出力したのですが、
QueryコンポーネントのSQLで作成したDBテーブルを
DataSourceコンポーネントを用いてDBGridに出力したのですが、
とは違うのですか。

編集    削除
HOta  2007-04-28 16:33:19  No: 25938  IP: [192.*.*.*]

>8行×27列のテーブルでインデックスは使っていません。
なら、インデックスがないので、更新する相手が判らないのでしょう。
重複レコードが存在しないインデックスを付けましょう。

編集    削除