動的に1次インデックスを作成するには?


サンプー  2006-02-24 01:31:25  No: 20200  IP: 192.*.*.*

DL6Pro,BDE,XPProです。Paradoxでテーブルを作成しています。
DBEを使って、2ジインデックスNameを作成しています。
ここで、フォームに、ComboBox、Editをおき、ComboBoxにはdropdownイベント時にテーブルのName項目の項目が入りようにしてあります。
テーブルの項目にない値が、editに入ったら、新しくテーブル(DM009.TbCarCorp)にこの値を追加したいと思い、以下のコードを書きました。1回目は通るのですが、2回目以降はインデックスが古くなっていますとエラーが発生します。
やりたいことは、テーブルになかった項目を追加し、新たにComboBoxにその項目も表示したいと考えています。
動的にインデックスは作成しないといけないのでしょうか?
どなたか、ご教示下さい。


procedure TFormEnt.Button1Click(Sender: TObject);
  Var S : String;
begin
 S := Edit1.Text;
 DM009.TbCarCorp.Open;
 begin
 if not DM009.TbCarCorp.FindKey([S]) then
  DM009.TbCarCorp.IndexName :='';
  DM009.TbCarCorp.Insert;
  DM009.TbCarCorp.Edit;
  DM009.TbCarCorp.FieldByName('Name').Text := S;
  DM009.TbCarCorp.Post;
  ShowMessage(S + 'を新たに登録しました');
  end;
  DM009.TbCarCorp.Close;
end;

編集 削除
HOta  2006-02-24 07:55:17  No: 20201  IP: 192.*.*.*

IndexNameを外してInsertしていますが、これをそのままにするとどうでしょうか?ComboBoxに再表示するのは、再度読み直さないとだめです。

編集 削除
サンプー  2006-02-24 15:34:49  No: 20202  IP: 192.*.*.*

begin
 S := Edit1.Text;
 DM009.TbCarCorp.Open;
 begin
 if not DM009.TbCarCorp.FindKey([S]) then
  begin
  DM009.TbCarCorp.Insert;
  DM009.TbCarCorp.FieldByName('Name').AsString := S;
  DM009.TbCarCorp.Post;
  ShowMessage(S + 'を新たに登録しました');
  end
  else
  ShowMessage(S + 'は既に存在します');
  end;
  DM009.TbCarCorp.Close;
end;
と変更すると、下記のエラーメッセージが出てきます。

プロジェクト Onine09.exe が EDBEngineError クラスの例外を生成しました。'インデックスは書き込み禁止です.'

編集 削除
サンプー  2006-02-24 16:41:57  No: 20203  IP: 192.*.*.*

どうも、postのところで、エラーが発生しているようです

編集 削除
HOta  2006-02-25 08:48:53  No: 20204  IP: 192.*.*.*

レコードを追加した後に、キー項目に値を設定していますか?
キー項目はNot Nullになっていると思います。

データーベースのプログラムをするのに、TTableはTQueryなどに変えましょう。
特に、RDBMSを使う場合は。

編集 削除
サンプ  2006-02-25 09:10:06  No: 20205  IP: 192.*.*.*

HOtaさん、いつもご丁寧なご指導ありがとうございます。早速、TTableをTQueryに変えて変更してみます。

編集 削除